Mi collego a un servizio web SOAP che richiede l'autenticazione SSL. Io (il client del servizio web) ho un file .pfx e ho fornito il certificato pubblico per quel file alla società a cui accedo il servizio web. Sono in grado di inviare una richiesta SOAP di successo al loro servizio web tramite SoapUI (dopo aver configurato SoapUI per usare .pfx).
Ora sto provando ad inviare la stessa richiesta tramite codice (VB.NET) ma avendo problemi di connessione. Il messaggio di errore che ricevo dopo aver richiamato la richiesta è: "La richiesta è stata interrotta: impossibile creare il canale sicuro SSL / TLS."
Nel codice, ho una classe proxy per il servizio web che eredita SoapHttpClientProtocol. Il codice che imposta SSL e richiama la richiesta è il seguente:
<System.Web.Services.Protocols.SoapDocumentMethodAttribute("UpdateLeadByDMS_v1", Use:=System.Web.Services.Description.SoapBindingUse.Literal, _
ParameterStyle:=System.Web.Services.Protocols.SoapParameterStyle.Bare), _
CaptureMessageExtension()>
Public Function UpdateLeadByDMS_v1(ByVal leadPushRequest As LeadPushRequest) As LeadPushResponse
Dim store As X509Store = Nothing
Try
store = New X509Store(StoreName.My, StoreLocation.LocalMachine)
store.Open(OpenFlags.OpenExistingOnly Or OpenFlags.ReadOnly)
Const thumbprint As String = "36C82D8E7BAEEB2E9B88F4748CB60AE6E0A89F64"
Dim certCollection As X509Certificate2Collection = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, False)
If certCollection.Count > 0 Then
Dim cert As X509Certificate2 = certCollection(0)
Me.ClientCertificates.Add(cert)
End If
Finally
If store IsNot Nothing Then
store.Close()
End If
End Try
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
Dim results() As Object
Try
results = Me.Invoke("UpdateLeadByDMS_v1", New Object() {leadPushRequest})
Catch ex As Exception
SendError(New Exception(ex.Message))
Throw
End Try
Return CType(If(results IsNot Nothing, results(0), Nothing), LeadPushResponse)
End Function
Ho rintracciato entrambe le richieste in WireShark e ho visto i seguenti passaggi dell'handshake TLS:
SoapUI - Works
Codice-ErrorediautenticazioneSSL
Qualcuno ha un'idea del perché uno avrebbe successo mentre l'altro fallisce? Mi sembra che il codice non funzioni durante l'autenticazione dei client del server ... ma ho già provato a impostare il delegato ServicePointManager.ServerCertificateValidationCallback per restituire true e questo non ha cambiato nulla.
Grazie per le informazioni che puoi fornire!
EDIT:
Ecco le informazioni dall'ultimo pacchetto TLS nei registri di rete. Sono le parti handshake ServerHello e Certificate dal server. Non c'erano errori che ho visto.
Successivamente,c'eranosololeseguenticomunicazionitraclienteserver: