Usuário com melhor resposta
Segurança entre WCF e Silverlight

Pergunta
-
Srs,
Alguém já fez ou tem alguma aplicação exemplo mostrando como trafegar mensagens criptografadas entre serviços WCF e clientes SILVERLIGHT.
Ex.: Tenho um form de Login e ao tentar logar se eu colocar um sniffer (firebug p. ex.) vejo trafegar meu Login e minha Senha totalmente abertos.
Já pesquisei pacas....mas nao encontrei de forma clara como fazer esse transporte de mensagens fim a fim de modo seguro, ou seja, garantindo Integridade e Confidencialidade.
Agradeço desde já
Fabio
Respostas
-
Boas Fabio,
Acredito que ele deva seguir o mesmo principio do Fiddler: http://www.fiddler2.com/Fiddler/help/httpsdecryption.asp (Question 1).
http://www.israelaece.com- Sugerido como Resposta AndreAlvesLimaModerator quinta-feira, 18 de março de 2010 22:59
- Marcado como Resposta AndreAlvesLimaModerator sábado, 12 de junho de 2010 00:58
Todas as Respostas
-
-
-
-
-
Boas Fabio,
Legal, então o HTTPS pode te ajudar nisso, já que ninguem irá conseguir penetrar e ver o que tem ali dentro.
Se estiver utilizando o IIS 7.0, então pode criar um certificado para testes, mas quando por em produção, precisa efetuar a compra de um certificado válido, através de empresas como CertSign, Serasa, etc.
http://www.israelaece.com -
É só colocar isso?
<serviceBehaviors> <behavior name="BehaviorCert"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> <serviceCredentials > <serviceCertificate x509FindType ="FindBySubjectName" findValue="fabio-PC" storeLocation="LocalMachine" storeName="My" /> </serviceCredentials> </behavior> </serviceBehaviors> <basicHttpBinding> <binding name="seguro"> <security mode="Transport"> <transport clientCredentialType="Certificate"> </transport> </security> </binding> </basicHttpBinding> </bindings> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> <services> <service name="NHibernateWCF.Application.Implementation.PessoaService" behaviorConfiguration="BehaviorCert"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="seguro" contract="NHibernateWCF.Application.IPessoaService" /> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> </service>
E no cliente precisa de alguma coisa?
Feito isso...pq q o Firebug continua mostrando a informação Descriptografada? Ele se utiliza do certificado para descriptografar?
Estamos tendo esta mensagem no browser:
<fieldset><legend>Resumo de Erros</legend>Erro HTTP 403.7 - Forbidden
A página que você está tentando acessar requer que o navegador tenha um certificado de cliente SSL reconhecido pelo servidor Web.
</fieldset>
Grato
Fabio -
Boas Fabio,
Não, isso que está fazendo é para que o cliente fornece um certificado para autenticá-lo. Isso não protege a comunicação.
O que você precisa fazer é configurar o IIS para suportar HTTPS, mas para isso precisa de um certificado. Você pode seguir os passos que são mostrados aqui para criar um certificado de testes e utilizar na aplicação: http://weblogs.asp.net/scottgu/archive/2007/04/06/tip-trick-enabling-ssl-on-iis7-using-self-signed-certificates.aspx
Com isso, a sua aplicação/serviço será acessada através de HTTPS, garantindo assim a confidencialidade e integridade das informações.
http://www.israelaece.com -
Israel,
Retiramos a requisição do certificado para o Cliente, deixamos apenas com o Security mode = Transport, sem certificado.
<behaviors>
<serviceBehaviors>
<behavior name="BehaviorCert">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding> <binding name="seguro"> <security mode="Transport"> </security> </binding> </basicHttpBinding> </bindings> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> <services> <service name="NHibernateWCF.Application.Implementation.PessoaService" behaviorConfiguration="BehaviorCert"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="seguro" contract="NHibernateWCF.Application.IPessoaService" /> <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> </service> </services>
Fizemos como recomendou e funcionou como mostra a imagem:
http://img714.imageshack.us/img714/2941/ssl.png
Entretanto a informação continua sem Confidencialidade, como podemos ver na imagem abaixo pelo Firebug (Sniffer do Firefox).
http://img535.imageshack.us/img535/5638/firebug.png
Como proceder para q a informação permaneça sempre confidencial? Tem jeito??? estamos ficando louco ja rsrsrsrs...
Valeu!
Fabio -
Boas Fabio,
Acredito que ele deva seguir o mesmo principio do Fiddler: http://www.fiddler2.com/Fiddler/help/httpsdecryption.asp (Question 1).
http://www.israelaece.com- Sugerido como Resposta AndreAlvesLimaModerator quinta-feira, 18 de março de 2010 22:59
- Marcado como Resposta AndreAlvesLimaModerator sábado, 12 de junho de 2010 00:58