Ir para conteúdo


Revista PROGRAMAR – Edição 46 (Setembro 2014): Download já disponível!

- - - - -

Webservice + Certificados

wcf asp ssl iis

  • Por favor inicie sessão para responder
3 respostas a este tópico

#1 Flinger

Flinger

    CRLF

  • Membro
  • PipPipPipPipPip
  • 820 mensagens

Publicado 13 de Julho de 2012 - 10:23

Bons dias.

Não tenho a certeza se isto devia estar aqui ou na secção de redes, mas como o objectivo é configurar o webservice pareceu-me mais correcto aqui.

Tenho um webservice Restfull, configurado e a funcionar perfeitamente no IIS 7.5. Mas agora preciso passar o Webservice para https, de forma a garantir a segurança da comunicação. Mas aqui é que a porca torce o rabo :S Parece que não consigo acertar com as configurações nem a tiro...

Já alterei o web.config, e tenho a binding para https no IIS, mas ao tentar aceder obtenho falha na autenticação (403.7 ). Faço o teste apartir do meu PC com o fiddler, e obtenho o mesmo, apesar de ter colocado o certificado no sítio indicado.

Vejo montes de configurações, todas diferentes, mas nenhuma se parece enquadrar no que eu quero: Este é o meu Web.Config:


Código (ASP):
<configuration>
        <system.web>
                <compilation targetFramework="4.0" />
        </system.web>
        <system.serviceModel>
         <bindings>
                <webHttpBinding>
                  <binding name="Mybinding" maxReceivedMessageSize="900000" maxBufferSize="900000" >
                        <security mode="Transport" >
                          <transport clientCredentialType="Certificate" />
                        </security>
                  </binding>
                </webHttpBinding>
          </bindings>
          <services>
                <!-- The name of the service -->
                <service name="MyLibrary.IMyInterface">
                  <!-- you can leave the address blank or specify your end point URI -->
                  <endpoint address="" binding="webHttpBinding"  bindingConfiguration="Mybinding" contract="MyLibrary.IMyInterface">
                  </endpoint>
                </service>
          </services>
          <behaviors>
                  <serviceBehaviors>
                          <behavior name="">
                                  <serviceMetadata httpsGetEnabled="true" />
                                  <dataContractSerializer maxItemsInObjectGraph="500000"/>
                                  <serviceDebug includeExceptionDetailInFaults="false" />
                          </behavior>
                  </serviceBehaviors>
          </behaviors>
          <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        </system.serviceModel>
        <system.webServer>
                <security>
                        <requestFiltering>
                                <requestLimits maxAllowedContentLength="300000000" maxQueryString="500000" >
                                        <headerLimits>
                                                <add header="Content" sizeLimit="500000000" />
                                        </headerLimits>
                                </requestLimits>
                        </requestFiltering>
                </security>
        </system.webServer>
</configuration>

Falta-me alguma coisa na security? Tenho de dizer qual é o certificado que vai ser usado, ou isso fica a cargo do IIS?

Editado por Flinger, 13 de Julho de 2012 - 10:23.


#2 bruno1234

bruno1234

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2183 mensagens

Publicado 13 de Julho de 2012 - 19:15

Tens aí <transport clientCredentialType="Certificate" /> no binding do teu serviço.
Isso indica que o cliente tem que enviar um certificado.
É isso que pretendes, ou queres que seja apenas o servidor a ter certificado?
Se não pretendes isso, experimenta retirar e testar.

Tens aqui a explicação sobre o que estás a utilizar:
http://msdn.microsoft.com/en-us/library/ms731074.aspx

#3 Flinger

Flinger

    CRLF

  • Membro
  • PipPipPipPipPip
  • 820 mensagens

Publicado 13 de Julho de 2012 - 23:29

Exacto, entretanto cheguei lá. Mudei para "None" e funcionou. Se não estou em erro, com esta configuração, as comunicações são encriptadas usando o certificado do servidor, certo?

Obrigado pelo link. Parece-me estar tudo bem explicado... Navegar na ajuda da microsoft à vezes parece-me como andar num carrocel, e dos foleirinhos...  Mas vai servir caso decida colocar um certificado do lado do cliente, para o autenticar com o servidor.

#4 bruno1234

bruno1234

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2183 mensagens

Publicado 14 de Julho de 2012 - 00:11

Ao teres o securiy mode = transport indicas que queres utilizar o SSL.
Por omissão funciona da mesma forma que um browser a aceder a um site por https, é feita a negociação do certificado.

As client credentials só são necessárias se quiseres que o cliente do serviço se autentique. Se não for uma necessidade não precisas por nada, caso contrário deves por a forma de autenticação que pretendes que o cliente faça.
Podes ver os tipos de autenticação possiveis aqui:
http://msdn.microsoft.com/en-us/library/ms733836.aspx