Me estoy conectando a un servicio web SOAP que requiere autenticación SSL. Yo (el cliente del servicio web) tengo un archivo .pfx y proporcioné el certificado público para ese archivo a la empresa a la que estoy accediendo al servicio web. Puedo enviar una solicitud de SOAP exitosa a su servicio web a través de SoapUI (después de configurar SoapUI para usar el .pfx).
Ahora estoy intentando enviar la misma solicitud a través del código (VB.NET) pero tengo problemas para conectar. El mensaje de error que recibo después de invocar la solicitud es: "La solicitud fue cancelada: no se pudo crear el canal seguro SSL / TLS".
En el código, tengo una clase de proxy para el servicio web que hereda SoapHttpClientProtocol. El código que configura el SSL e invoca la solicitud es el siguiente:
<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
He rastreado ambas solicitudes en WireShark y he visto los siguientes pasos del protocolo de enlace TLS:
SoapUI - Trabajos
Código:fallalaautenticaciónSSL
¿Alguien tiene una idea de por qué uno podría tener éxito mientras que el otro falla? Me parece que el código está fallando durante la autenticación de los clientes del servidor ... pero ya he intentado configurar el delegado ServicePointManager.ServerCertificateValidationCallback para que devuelva true y eso no cambió nada.
¡Gracias por cualquier información que pueda proporcionar!
EDITAR:
Aquí está la información del último paquete TLS en los registros de la red. Son las partes del protocolo de enlace ServerHello y Certificate del servidor. No hubo errores que vi.
Despuésdeesosolohubolassiguientescomunicacionesentreelclienteyelservidor: