Po raz pierwszy muszę korzystać z uwierzytelniania certyfikatów. Partner komercyjny ujawnia dwie usługi: usługę sieciową XML i usługę HTTP. Muszę uzyskać dostęp do obu z nich za pomocą klientów .NET.Uzyskiwanie dostępu do usługi sieci Web i interfejsu HTTP przy użyciu uwierzytelniania certyfikatów
Co Próbowałem
0. Konfigurowanie środowiska
Mam zainstalowaną SSLCACertificates (na korzeń i dwa pośrednie) oraz certyfikat klienta w moim lokalnym komputerze (win 7 Professional) przy użyciu narzędzia certmgr.exe.
1. W przypadku usługi internetowej
- mam certyfikat klienta (der).
- Usługa zostanie wykorzystana przez serwer proxy .NET.
Oto kod:
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);
Wyjątek zgłaszane w ostatnim zdaniu: The request failed with an empty response
.
2. W przypadku interfejsu HTTP
- jest to interfejs HTTPS Muszę zadzwonić poprzez metody POST.
- Żądanie HTTPS zostanie wysłane z klienta .NET za pomocą HTTPWebRequest.
Oto kod:
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());
Wyjątek zgłaszane w ostatnim zdaniu: The request was aborted: Could not create SSL/TLS secure channel
.
3. Ostatnia próba: za pomocą przeglądarki
W Chrome po zainstalowaniu certyfikatów, jeśli próbuję uzyskać dostęp oba adresy URL dostaję błąd: 107
Error 107 (net::ERR_SSL_PROTOCOL_ERROR)
siedzę.
U nie może dokonać żądania HTTP z certyfikatów SSL athorization. Trzeba to zrobić przez https. Czy potrzebujesz tego certyfikatu? Jeśli odpowiedź brzmi "tak", musisz sprawić, aby ta usługa internetowa komunikowała się przez https. – harry180
@ harry180. Dzięki za wyjaśnienie. Zmontowałem to pytanie. –
w protokole http, gdy wyślesz nazwę użytkownika i hasło, musi być zaszyfrowane minimum w MD5. Nawet jeśli to zrobisz, łatwo jest przekazać te informacje nieupoważnionym osobom. Ponownie rozważ wykorzystanie protokołu https do tego rodzaju udostępniania informacji. – harry180