Spesso e volentieri quando si sviluppano e si distribuiscono web service, si utilizza SSL per incrementare e migliorare la sicurezza.
Se si utilizza un certificato rilasciato da una certification authority (come si dovrebbe sempre fare!) non ci sono particolari problemi. Però in ambiente di test spesso e volentieri si utilizza un certificato self-signed che può essere facilmente creato attraverso il tool Makecert o attraverso gli IIS 6.0 Resource Kit Tools.
In quest'ultimo caso, quando si va a consumare un web service da un'applicazione .NET viene restituita un'eccezione che indica che il certificato utilizzato non è valido. Come fare? Lorenzo ha già indicato la via attraverso un suo tip.
Con il Framework 2.0 il metodo descritto è considerato obsoleto (anche se funziona) e viene consigliato di utilizzare il delegate ServicePointManager.ServerCertificateValidationCallback.
Dal punto di vista pratico cambia molto poco (non è più necessario creare una nuova classe):
' Prima di creare il proxy, assegno il callback per la verifica del certificato
ServicePointManager.ServerCertificateValidationCallback = _
new RemoteCertificateValidationCallback(AddressOf ValidateCertificate)
' Creo l'oggetto
Dim service As New MyWebService.Service
Dim s As String
' Richiamo la funzione del web service
s = service.HelloWorld
service.Dispose()
La funzione ValidateCertificate ha il compito di effettuare la procedura di validazione:
Private Function ValidateCertificate(ByVal sender As Object, _
ByVal certificate As X509Certificate, _
ByVal chain As X509Chain, _
ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
' Verifico l'issuer
If certificate.Issuer <> "MyIssuer" Then Return False
' Certificato valido
Return True
Nell'esempio la funzione di verifica fa ben poco. Controlla solo che l'issuer del certificato sia quello atteso.
Chiaramente è possibile (e vivamente consigliato) implementare logiche di verifica più complesse, prima fra tutte la verifica della scadenza del certificato.
Technorati Tags:
SSL,
Web Service,
.NET