di crittografia in C# Web-Services


16

Sto cercando un modo semplice per crittografare la mia comunicazione sapone nel mio C# Web-Service.

Stavo esaminando WSE 3.0 ma sembra che Microsoft abbia abbandonato il supporto per questo, e quindi non è semplice da usare.
Sembra che WCF possa essere un'opzione ma preferisco non eseguire l'aggiornamento da .NET 2.0.

Qualsiasi semplice, metodo di crittografia semplice?

8

Penso che questo possa essere d'aiuto; l'anno scorso abbiamo usato questo per comprimere i servizi web e ha funzionato molto bene, credo che potrebbe essere migliorato con le classi di crittografia;

Creating Custom SOAP Extensions - Compression Extension


0

Forse sono ingenua, ma sarebbe costringendo la comunicazione di essere tramite https essere accettabile? Sviluppo servizi Web eseguiti su 2.0 e ho avuto successo con il solo fatto che IIS imponga l'https sulla directory virtuale.

In alternativa, o in aggiunta, è possibile controllare lo HttpRequest.IsSecureConnection property.


1

Forse sono ingenua, ma sarebbe costringendo la comunicazione di essere via https essere accettabile? Sviluppo servizi web eseguiti su 2.0 e con successo con il solo ottenimento di IIS su , applicare https nella directory virtuale .

che sarebbe il modo più semplice per andare probabilmente, ma purtroppo non hanno controllo sulla configurazione di IIS , e non può garantire che possa funzionare https.

In questo caso, forse la cosa migliore è quella entrambi i casi per caso porzioni cifrare dei messaggi SOAP (dopo tutto, potrebbe non essere necessario l'intero messaggio da cifrare -? Solo determinati campi sensibili), oppure puoi scegliere di utilizzare un HttpModule per intercettare tutti i messaggi e operare sui contenuti. In entrambi i casi è probabile che tu debba fornire proxy personalizzati.


0

Abbiamo effettivamente utilizzare WSE 3.0 nei nostri servizi web, che sono stati originariamente sviluppati pre-WCF. Per sicurezza, utilizziamo un sistema basato su token SAML basato sulle classi Cryptography in System.Security.

Funziona molto bene. Tuttavia, questo metodo non è affatto "semplice".


2

Qualsiasi cosa tu faccia per fornire "crittografia" che non sta usando SSL/TLS è probabile che sia vulnerabile. Ora devi chiedertelo, vale la pena bruciare ore di sviluppo che potresti spendere per funzionalità su una misura di sicurezza di pollo-pollo? Forse lo è.

Le API .NET come DPAPI e l'API crypt32 Win32 semplificano la crittografia dei blocchi di dati con chiavi statiche. Ma come riceveranno le chiavi i tuoi clienti? Qualsiasi client SOAP installato dovrà avere la chiave masterizzata nella sua configurazione o riceverla su Internet non sicuro.

Questo è il problema che SSL/TLS risolve per te; il ballo che fai con i certificati TLS è ciò che risolve il problema della comunicazione delle chiavi pubbliche sui canali non attendibili.


0

È possibile utilizzare la crittografia dei parametri in C# utilizzando l'estensione System.Security.Cryptography.

Crittografare i parametri e decrittografarli sarebbe più difficile ma molto più sicuro.

How To: Encrypt and Decrypt Data Using a Symmetric (Rijndael) Key (C#/VB.NET)

Sto usando questo aproach per un'OTP (One Time Password) servizio web, e funziona bene per me.