L'accès à un service web et une interface HTTP à l'aide de l'authentification par certificat
C'est la première fois que je dois utiliser l'authentification par certificat.
Un partenaire commercial exposer deux services, un Service Web XML et d'un service HTTP. J'ai accès à tous deux .NET clients.
Ce que j'ai essayé
0. Configuration de l'environnement
J'ai installé le SSLCACertificates (sur la racine et deux intermédiaires) et le certificat du client dans mon local de la machine (win 7 professionnel) à l'aide de certmgr.exe.
1. Pour le service web
- J'ai le certificat du client (der).
- Le service sera consommée par un .NET proxy.
Voici le code:
OrderWSService proxy = new OrderWSService();
string CertFile = "ClientCert_DER.cer";
proxy.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile));
orderTrackingTO ot = new orderTrackingTO() { order_id = "80", tracking_id = "82", status = stateOrderType.IN_PREPARATION };
resultResponseTO res = proxy.insertOrderTracking(ot);
Exception signalée lors de la dernière déclaration: The request failed with an empty response
.
2. Pour l'interface HTTP
- c'est une interface HTTPS-je faire un appel par le biais de la méthode POST.
- La demande HTTPS sera envoyer à partir d'une .NET client à l'aide de HTTPWebRequest.
Voici le code:
string PostData = "MyPostData";
//setting the request
HttpWebRequest req;
req = (HttpWebRequest)HttpWebRequest.Create(url);
req.UserAgent = "MyUserAgent";
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile, "MyPassword"));
//setting the request content
byte[] byteArray = Encoding.UTF8.GetBytes(PostData);
Stream dataStream = req.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
//obtaining the response
WebResponse res = req.GetResponse();
r = new StreamReader(res.GetResponseStream());
Exception signalée lors de la dernière déclaration: The request was aborted: Could not create SSL/TLS secure channel
.
3. Dernier essai: à l'aide du navigateur
En Chrome, après l'installation de certificats, si j'essaie d'accéder à l'url-je obtenir un 107 erreur:
Error 107 (net::ERR_SSL_PROTOCOL_ERROR)
Je suis coincé.
Merci pour la clarification. J'ai édité la question.
pour le protocole http, lorsque vous enverrez un nom d'utilisateur et mot de passe, il doit être chiffré minimum en MD5. Même lorsque vous faites cela, c'est assez facile de fuite de cette information à des personnes non autorisées. Reconsidérer l'aide du protocole https pour ce genre de partage de l'information.
OriginalL'auteur Alberto De Caro | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
Les points suivants devraient vous aider à identifier le problème, voici deux méthodes pour tester la connectivité SSL on teste le site, tandis que l'autre est une méthode de rappel pour identifier pourquoi SSL a échoué. Si rien d'autre, il devrait vous donner une meilleure idée de pourquoi ça ne marche pas.
Lorsque la méthode est appelée, elle apparaîtra avec le certificat de la boîte de dialogue, évidemment, quand vous le faire pour de vrai, vous aurez envie de lire à partir du cert stocker automatiquement. La raison pourquoi j'ai mis ce est parce que si pas de certificat valide est trouvé, alors vous saurez que votre problème est avec la façon dont le certificat est installé.
La meilleure chose à faire est de mettre ce code dans une application console simple:
OriginalL'auteur David Martin