証明書認証を使用するのは初めてです。商用パートナーは、XML Web サービスと HTTP サービスの 2 つのサービスを公開しています。.NET クライアントを使用して両方にアクセスする必要があります。
私が試したこと
0. 環境を整える
certmgr.exe を使用して、SSLCACertificates (ルートと 2 つの中間) とクライアント証明書をローカル マシン (win 7 プロフェッショナル) にインストールしました。
1. Web サービスの場合
- 私はクライアント証明書 (der) を持っています。
- サービスは .NET プロキシ経由で使用されます。
コードは次のとおりです。
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);
最後のステートメントで例外が報告されました: The request failed with an empty response
。
2. HTTP インターフェースの場合
- これは、POST メソッドを介して呼び出さなければならない HTTPS インターフェースです。
- HTTPS 要求は、HTTPWebRequest を使用して .NET クライアントから送信されます。
コードは次のとおりです。
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());
最後のステートメントで例外が報告されました: The request was aborted: Could not create SSL/TLS secure channel
。
3. 最後の試行: ブラウザーを使用する
Chrome で証明書をインストールした後、両方の URL にアクセスしようとすると、107 エラーが発生します。
Error 107 (net::ERR_SSL_PROTOCOL_ERROR)
ハマった。