WebExceptionはSSL/TLSセキュアチャネルの信頼関係を確立できませんでした
-
12-10-2019 - |
質問
私の会社は、.NET WebサービスとそのWebサービスを使用するクライアントDLLを開発しました。 WebServiceはSSLを介してサーバーでホストされており、CERTはGoDaddyによって提供および署名されています。ホストされた環境には、WebサービスにアクセスしようとするときにクライアントDLLから次のエラーメッセージを取得しているクライアントがいます。
System.net.Webexception基礎となる接続が閉じられました。SSL/TLSセキュアチャネルの信頼関係を確立できませんでした。
私たちの修正は、それらをサーバー上で開くことでした。これは、多くのホストされたサービスにとってそれ自体が課題であり、WSDL URLに移動します。 IEは、セキュリティアラートダイアログでそれらを促します。証明書の日付は有効であり、ページの名前に一致する有効な名前であると述べていますが、信頼することを選択していない会社によって発行されました。 [はい]をクリックして続行すると、クライアントDLLはWebサービスに接続して通常どおりに動作できます。
GoDaddyが有効な出版社リストに参加しなかった理由を誰もが考えていますか?私たちが実行しているすべてのサーバーは、有効な権限としてGoDaddyを持っています。セキュリティ上の理由から、彼らはGoDaddyの権限をアンインストールしたと思いますが、他の根本的な問題はないと完全に確信していません。
残念ながら、私はこれをローカルで再現しようとする運があまりありませんでした。インターネットオプションにアクセスしてGoDaddy当局を削除してサービスにヒットした場合、SSLはうまく機能します。私は出版社のリストに戻り、GoDaddyはすぐに戻されます。だから私の2番目の質問は、無効な証明書を取得できるように、GoDaddyをどのように取り除くのかということです。
さて、最後の質問。コードには、無効な証明書を無視するようにWebサービスに伝えることができます。 WCFでこのプログラムを行うことに関するいくつかの投稿を見てきましたが、古いWebサービスではありません。
解決
SSL証明書に署名するために使用される中間証明書をサーバーにインストールする必要がある場合があります。
ブラウザは、SSL CERTに署名した証明書チェーンの検証をチェックすることにより、SSL証明書を検証しようとします。サーバーがSSL証明書を証明書チェーンに提供しない場合、ブラウザはSSL証明書を拒否する場合があります。 (IEよりもFirefoxの問題の多く)。ルート証明書は、これが機能するためには、クライアントマシンにまだインストールする必要があります。
他のヒント
Webメソッドを呼び出す前に、この行を追加してこのエラーを修正しました。
System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; };
VB.NET等価です
System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(senderX, certificate, chain, sslPolicyErrors)
Return True
End Function
これは本当にServerFaultの質問ですが、ここでできることを追加します。
Windows Machinesが通常信頼するというルート証明書のリストは、かなり定期的に更新されます。これは、IEのWindowsアップデートとして下がります。あなたは見ることができます 詳細についてはMSDN.
クライアントにWindowsの更新がオンになっていないか、Windowsの更新を積極的に無視している場合、残念ながら多くのIT部門で非常に一般的です。SSLプロバイダーを切り替える以外にできることはあまりありません。
基本的に、彼らは証明書の更新を取得する必要があります。または、問題のマシンによってすでに信頼されている可能性が高いCERTプロバイダーに切り替える必要があります。通常、これは意味します verisign また Thawte. 。 3番目の選択肢は、あなたが下っているルートです。彼らに手動でルートを信頼してもらいます。
一日の終わりには、問題のIT部門がバカであるという理由だけで、このようにアプリを変更するというアイデアが嫌いですが、本当の問題はあなたの会社がこれをどのように処理したいかについて要約します。
Webサーバー上のその証明書のGO DADDY認定パスを見ると、Go Daddy Class XXXまたはStarfield Class XXXが表示されますか?
そして、あなたの非legacyクライアント、つまりWindows Vistaが上向きになってから、Go Daddy認定パスは何を表示しますか? Daddy Class XXXまたはStarfield Class XXXに行きますか?
そして、警告を受けたこれらのクライアントは、彼らはレガシークライアントですか?すなわちwinxp以上?
ルート証明書の更新は、Windows Vistaの時点では異なります。
http://support.microsoft.com/kb/931125
Windows Vistaのルート証明書以降は、自動ルート更新メカニズム、つまりルート証明書ごとに配布されます。ユーザーが(HTTPS SSLを使用して)安全なWebサイトにアクセスしたり、安全な電子メール(S/MIME)を読み取ったり、署名されたActiveXコントロールをダウンロードしたり(コード署名)、新しいルート証明書、Windows証明書チェーン検証ソフトウェアに遭遇した場合ルート証明書のMicrosoft Updateをチェックします。発見した場合、プログラム内のすべての信頼できるルート証明書のリストを含む現在の証明書トラストリスト(CTL)をダウンロードし、ルート証明書がそこにリストされていることを確認します。次に、指定されたルート証明書をシステムにダウンロードし、Windows Trusted Root Certification Authorities Storeにインストールします。
おそらく、WebサーバーのGo Daddy認定パスは、Go Daddy Class 2の代わりにStarfield Class 2であると考えているため、間違ったルート証明書をインストールしました。 Webサーバーで表示されると、ルート証明書の警告が表示されないため、Do Daddy Class 2 Root Certをダウンロードしてインストールして、スターフィールド1を削除すると、問題が発生するはずです。