リクエストが中止されました。SSL/TLSセキュアチャネルを作成できませんでした

このエラーメッセージが表示されるため、WebRequestを使ってHTTPSサーバーに接続できません。

The request was aborted:Could not create SSL/TLS secure channel..

この問題を回避するには、StackOverflowの他の投稿から引用した以下のコードを使用します。

private void Somewhere() {
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}

private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
   return true;
}

問題は、サーバーが証明書を検証せず、上記のエラーで失敗することです。どなたか、どうすればいいかお分かりになりますか?


数週間前に同僚とテストを行ったところ、上に書いたような内容で問題なく動作していたことをお伝えしておきます。唯一の大きな違いは、私はWindows 7を使っていて、彼はWindows XPを使っていたということです。 それが何かを変えるのでしょうか?

あなたが抱えている問題は、aspNetユーザーが証明書へのアクセス権を持っていないことです。 winhttpcertcfg.exeを使ってアクセス権を与えなければなりません。

この設定の仕方の例は以下の通りです。 http://support.microsoft.com/kb/901183

ステップ2の詳細はこちら

EDIT: IISの最近のバージョンでは、この機能は証明書マネージャツールに組み込まれており、証明書を右クリックして、秘密鍵を管理するオプションを使用することでアクセスできます。 詳細はこちら: https://serverfault.com/questions/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791

解説 (4)

このエラーは一般的なもので、SSL/TLSのネゴシエーションに失敗する理由はたくさんあります。最も一般的なのは、無効または期限切れのサーバー証明書であり、あなたは独自のサーバー証明書検証フックを提供することでこれに対処しましたが、必ずしもそれだけが理由ではありません。サーバーが相互認証を必要としていたり、クライアントがサポートしていない一連の暗号が設定されていたり、ハンドシェイクを成功させるには大きすぎるタイムドリフトがあったり、その他多くの理由が考えられます。

最良の解決策は、SChannelトラブルシューティングツールセットを使用することです。SChannelはSSLとTLSを担当するSSPIプロバイダであり、クライアントはハンドシェイクにSChannelを使用します。TLS/SSL Tools and Settings]1を見てみましょう。

また、How to enable Schannel event loggingもご覧ください。

解説 (2)

問題が証明書の有効性に関連しているかどうかを確認するために、デモ証明書をインストールしてみることができます(sslプロバイダーの中には、1ヶ月間無料で提供しているところもあります)。

解説 (3)