パブリック ルート機関証明書ファイル X509 を使用して httpwebrequest を作成しています。秘密鍵ではなく、公開鍵しか持っていません。コンソール アプリからはすべて正常に機能しますが、asp.net アプリからは機能しません。「基になる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした」というエラーが表示されます。
検証を無効にするオプションはオプションではありません。
ここにコードがあります
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://xxxxxxx/gateway.aspx");
string post = "abcdef";
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
req.ContentLength = post.Length;
var cert = System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromCertFile(@"c:\temp\root.cer");
req.ClientCertificates.Add(cert);
StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(post.ToString());
stOut.Close();
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
System.Net および System.Net ソケットからのシステム ログを次に示します。
System.Net 情報: 0 : [5928] SecureChannel#8106798 - 信頼されたルート機関への証明書チェーンを構築できませんでした。
System.Net 情報: 0 : [5928] SecureChannel#8106798 - リモート証明書がユーザーによって無効であることが確認されました。
System.Net.Sockets Verbose: 0: [5928] Socket#7486778::Dispose()
System.Net エラー: 0 : [5928] HttpWebRequest#51319244 の例外:: - 基になる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。
System.Net エラー: 0 : [5928] HttpWebRequest#51319244::EndGetRequestStream の例外 - 基になる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。
詳細情報
このコードを使用する場合 (CodeGuru から)
public static bool ValidateServerCertificate(object sender,
X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateChainErrors) {
return false;
} else if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateNameMismatch) {
System.Security.Policy.Zone z =
System.Security.Policy.Zone.CreateFromUrl
(((HttpWebRequest)sender).RequestUri.ToString());
if (z.SecurityZone ==
System.Security.SecurityZone.Intranet ||
z.SecurityZone ==
System.Security.SecurityZone.MyComputer) {
return true;
}
return false;
}
return true;
}
最終的にエラーが発生します:
リモート証明書チェーン エラー