37

SSL経由でリクエストしようとしています。証明書はすでにマシンにインストールされており、ブラウザを介して機能します。

私はこのリクエストを使用しています:

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] data = encoding.GetBytes(request.Content.OuterXml.ToString());
string password = "XXXX";
X509Certificate2 cert = new X509Certificate2("c:\\zzzz.p12", password);
string key = cert.GetPublicKeyString();
string certData = Encoding.ASCII.GetString(cert.Export(X509ContentType.Cert));

Uri uri = new Uri(request.Url);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(uri);
myRequest.Credentials = new NetworkCredential(request.User, request.Password.ToString());
myRequest.Method = "PUT";
myRequest.ContentType = request.ContentType;
myRequest.ContentLength = data.Length;
myRequest.ClientCertificates.Add(cert);

Stream newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();

System.IO.StreamReader st = new StreamReader(((HttpWebResponse)myRequest.GetResponse()).GetResponseStream());

このコードを使用すると、次のエラーが発生します。

基になる接続が閉じられました:SSL/TLSのセキュリティで保護されたチャネルの信頼関係を確立できませんでした。---> System.Security.Authentication.AuthenticationException:検証手順に従って、リモート証明書が無効です。

何が問題ですか?

4

3 に答える 3

99

私はこれで問題を解決しました:

ServicePointManager.ServerCertificateValidationCallback = new        
RemoteCertificateValidationCallback
(
   delegate { return true; }
);
于 2012-06-28T08:57:51.343 に答える
2

証明書が適切に信頼されていることを確認してください。ルート証明書が正しい証明書ストア(ローカルマシン上の信頼されたルートCA)に追加されていますか?

(自己署名)証明書の(自己署名)ルート証明書が現在のユーザーの信頼されたルートCAに追加されたときに、このエラーが発生しました。ルート証明書をローカルマシンのルートCAストアに移動すると、問題が解決しました。

于 2016-12-01T11:07:30.540 に答える
-1

これはクライアントコードですよね?そして、あなたはHTTPS URLにアクセスしていますね?問題は、クライアント側のTLSスタックが検証できないサーバー証明書にあると思います。ブラウザ経由でそのURLに接続すると、スムーズに機能しますか、それとも証明書の不一致に関する警告が表示されますか?

于 2012-06-27T09:10:39.300 に答える