Pergunta

Estou procurando uma maneira simples de criptografar minha comunicação Soap em meu serviço Web C#.

eu estava olhando WSE 3.0 mas parece que a Microsoft abandonou o suporte e, portanto, não é fácil de usar.
Parece que o WCF poderia ter sido uma opção, mas prefiro não atualizar do .NET 2.0.

Qualquer simples, método de criptografia simples?

Foi útil?

Solução

Acho que isso pode ajudar;ano passado usamos isso para compactar os webservices e funcionou muito bem, acredito que poderia ser aprimorado com classes de criptografia;

Criando extensões SOAP personalizadas - Extensão de compactação

Outras dicas

Qualquer coisa que você faça para fornecer "criptografia" que não use SSL/TLS provavelmente será vulnerável.Agora você deve se perguntar: vale a pena gastar horas de desenvolvimento que você poderia gastar em recursos de uma medida de segurança de borracha?Talvez seja.

APIs .NET como DPAPI e Win32 crypt32 API facilitam a criptografia de blobs de dados com chaves estáticas.Mas como seus clientes receberão as chaves?Qualquer cliente SOAP instalado deverá ter a chave gravada em sua configuração ou recebê-la pela Internet insegura.

Este é o problema que o SSL/TLS resolve para você;a dança que você faz com os certificados TLS é o que resolve o problema de comunicação de chaves públicas em canais não confiáveis.

Talvez eu esteja sendo ingênuo, mas forçar a comunicação a ser via HTTPS seria aceitável?Desenvolvei os serviços da Web que são executados no 2.0 e tive sucesso em fazer com que o IIS aplique HTTPS no diretório virtual.

Esse seria o caminho mais simples a seguir provavelmente, mas infelizmente não tenho controle sobre a configuração do IIS e não posso garantir que ele pode executar o HTTPS.

Nesse caso, talvez a melhor aposta seja criptografar partes das mensagens SOAP caso a caso (afinal, talvez você não precise que a mensagem inteira seja criptografada - apenas alguns campos confidenciais?), ou você pode optar por usar um HttpModule para interceptar todas as mensagens e operar no conteúdo.Em ambos os casos, você provavelmente terá que fornecer proxies personalizados.

Talvez eu esteja sendo ingênuo, mas seria aceitável forçar a comunicação via https?Eu desenvolvo serviços da Web que rodam em 2.0 e obtive sucesso apenas fazendo com que o IIS aplicasse https no diretório virtual.

Alternativamente, ou além disso, você pode verificar o Propriedade HttpRequest.IsSecureConnection.

Na verdade, usamos o WSE 3.0 em nossos serviços da web, que foram originalmente desenvolvidos antes do WCF.Para segurança, usamos um sistema baseado em token SAML construído nas classes Cryptography em System.Security.

Funciona muito bem.No entanto, este método não é de forma alguma “simples”.

Você pode usar criptografia de parâmetros em C# usando a extensão System.Security.Cryptography.

Criptografar seus parâmetros e descriptografá-los seria mais difícil, mas muito mais seguro.

Como:Criptografar e descriptografar dados usando uma chave simétrica (Rijndael) (C#/VB.NET)

Estou usando essa abordagem para um serviço da web OTP (senha de uso único) e funciona bem para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top