J'ai un problème à consommer un service Web de savon (w/att.) Et MTOM qui nécessite l'authentification du certificat client (mutuelle?).503 erreur consommant thirdy part Soap webservice utilisant TLS 1.2 et l'authentification du certificat client avec WCF
Avant d'écrire ce que je l'ai déjà essayé, je vous montre ce que je l'ai fait pour recevoir un certificat client: Avec cette touche
- J'ai produit une clé RSA avec
openssl command openssl genrssa -out mykey.key 2048
- i « ai généré CSR:
openssl req -new -key mykey.key -out mycsr.csr
- J'ai envoyé ce CSR au propriétaire du service Web afin de recevoir un certificat client , et on m'a donné un certi signé ficat: certificate.cer
Maintenant que je l'ai obtenu mon certificat client je l'ai ajouté dans mon magasin de certificats sous autorité de certification racine de confiance.
Maintenant le code:
d'abord tout ce que je créé un projet de test dans Visual Studio et j'ai ajouté un service de référence en utilisant le WSDL du service.
Puis je l'ai écrit quelques lignes de code:
' Setting TLS 1.2 protocol '
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
ServicePointManager.ServerCertificateValidationCallback = Function(sender1, certificate, chain, sslPolicyErrors)
Return True
End Function
'Creating endpoint and binding'
Dim endpoint As EndpointAddress = New EndpointAddress("https://myWebService.it/service-page")
Dim sslBinding As BasicHttpBinding = New BasicHttpBinding(BasicHttpSecurityMode.Transport)
'Setting CredentialType = Certificate'
sslBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate
'Getting the client certificate from the store'
Dim coll = New X509Store(StoreName.My, StoreLocation.CurrentUser)
coll.Open(OpenFlags.ReadOnly)
Dim cert = coll.Certificates.Find(X509FindType.FindByThumbprint, "76DB1454D4B25ACEAF2BAE465C310E3119278792", True)
'Creating the service'
Dim svc As SdITrasmissioneFileClient = New SdITrasmissioneFileClient(sslBinding, endpoint)
'Setting the certificate inside client credentials'
svc.ClientCredentials.ClientCertificate.Certificate = cert(0)
svc.Open()
'Calling the service'
Dim resp As RispostaEsito_Type = svc.Esito(New Esito_Type() With {.IDFile = "4454555"})
svc.Close()
Il est très simple pour moi, mais quand j'exécute mon code je reçois un
System.ServiceModel.Security.MessageSecurityException: 'The HTTP request was forbidden with client authentication scheme 'Anonymous'.'
Internal Exception: WebException: Remote Server Error: (403) Forbidden
Next i analysé le trafic en utilisant Fiddler et Wireshark et j'ai découvert que, pendant l'établissement de liaison TLS entre le client et le serveur, le client n'envoie pas le certificat au serveur.
Maintenant, je ne comprends pas la raison pour laquelle, même si j'ajouté le certificat d'identification du client, il n'est pas envoyé à la destination.