2010-12-20 18 views
3

私の会社は、.NET WebサービスとそのWebサービスを使用するクライアントDLLを開発しました。 webserviceはssl経由で私たちのサーバー上でホストされ、証明書はGoDaddyによって提供され署名されています。 Webサービスにアクセスしようとすると、クライアントdllから次のエラーメッセージが表示される、ホストされた環境にいくつかのクライアントがあります。WebException SSL/TLSセキュアチャネルの信頼関係を確立できませんでした

System.Net.WebException基になる接続が閉じられました:SSL/TLSセキュリティで保護されたチャネルに対して信頼関係を確立できませんでした。

私たちの修正では、ホストされているサービスの多くで、それ自体が挑戦的であり、WSDLのURLに移動することが難しいです。 IEは、セキュリティ警告ダイアログを表示します。証明書の日付が有効であり、ページの名前と一致する有効な名前が、あなたが信頼することを選択していない会社によって発行されたことを示しています。 [はい]をクリックして続行すると、クライアントdllは正常にWebサービスに接続して正常に動作します。

GoDaddyが有効なサイト運営者リストに登録されていなかった理由はありますか?実行しているすべてのサーバーにGoDaddyが有効な権限を持っています。私は、セキュリティ上の理由から、GoDaddyの権限をアンインストールしたと推測していますが、他に根本的な問題はないと全面的には確信していません。

残念ながら、私はローカルでこれを再現しようとすることはあまりありませんでした。私がインターネットオプションに行き、GoDaddyの権限を取り除いて私たちのサービスを打つと、sslは正常に動作します。私は出版社のリストに戻って、GoDaddyがすぐに戻ってくる。だから私の2番目の質問は、どうやってGoDaddyを取り除いて無効な証明書の警告を得ることができるのかということです。

さて、最後の質問です。コードに無効な証明書を無視するようWebサービスに指示する方法がありますか?私はWCFでプログラム的にこれをやっているが、古いWebサービスではないことについていくつかの記事を見てきました。

+0

で安全な証明書の要求に応じて正確に解決し、あなたのDNSのですか?つまり: 'https:// wsdl.companydomain.local'またはSSL証明書に指定されているもの。 –

+0

私はそう信じています。私はここで証明書を検証しました。http://www.sslshopper.com/ssl-checker.html。 –

+0

あなたは一度に多すぎる質問をしています。ローカルマシンとサーバーマシン上の信頼されたルート証明書リストは注意深く保護されたリソースであり、頻繁には更新されません。誰でも新しいルート証明書を作成できます。 GoDaddyがMicrosoft配布リストにない追加のルート証明書を作成している可能性があり、SSL証明書にその1つが署名している可能性があります。また、SSL証明書に署名するために使用されたルート証明書が侵害され、「信頼できない」リストに置かれている可能性があります。これは、SSL証明書が信頼できないことを意味します。 – dthorpe

答えて

4

SSL証明書に署名するために使用される中間証明書をサーバーにインストールする必要がある場合があります。

ブラウザは、SSL証明書に署名した証明書チェーンの検証をチェックすることによって、SSL証明書の検証を試みます。サーバが証明書チェーンにSSL証明書を提供しない場合、ブラウザはSSL証明書を拒否することがあります。 (FirefoxよりもIEよりも問題が多い)。これが動作するには、クライアントマシンにルート証明書をインストールする必要があります。

+0

私はあなたが間違っていると言っているわけではありませんが、ブラウザはサーバにルート証明書のリストを要求すべきではないと思われます...それは巨大なセキュリティホールのようです。また、問題のマシンがGoDaddyをCAとして信頼しないように聞こえます。これは、ブラウザに、信頼できるルート権限のリストにGoDaddyがリストされていないことを意味します。そこに到達する唯一の方法は、マイクロソフトの更新を介して、または手動でそれを信頼することです。 – NotMe

+0

@Chris:SSLインストールの一般的な問題は、サーバーが証明書チェーンの指示なしにリーフノード証明書のみを返すことです。 IEブラウザはしばしばそのような証明書を受け入れますが、Firefoxはそうしません。 Firefoxを癒すための解決方法は、中間証明書がサーバー上で利用可能であることを確認することです。あなたはおそらくルート証明書について正しいでしょう - 私は答えを編集しました。 – dthorpe

+0

もっとよく見えます。+1 – NotMe

1

これは実際にはserverfaultに関する質問ですが、ここで私ができることを追加します。

Windowsマシンが通常信頼するルート証明機関リストは、かなり定期的に更新されます。これは、WindowsにIEのアップデートとして来る。 MSDN for more informationが表示されます。

多くのIT部門で窓の更新が有効になっていない、またはWindowsの更新を積極的に無視している場合は、SSLのスイッチを切り替える以外のことはあまりありません。

基本的には、証明書の更新を取得する必要があります。または、問題のマシンで既に信頼されている可能性が高い証明書プロバイダーに切り替える必要があります。通常、これはVerisignまたはThawteを意味します。 3番目の選択肢は、ダウンしているルートです。ルートCAを手動で信頼させるようにします。

私は、このような方法でアプリを変更するという考えが嫌いです。なぜなら、問題のIT部門は馬鹿だからです。本当の質問は、あなたの会社がこれをどう扱うかということになります。

1

Webサーバー上のその証明書のGo Daddy Certification Pathを見ると、Daddy Class xxxまたはStarfield Class xxxになると表示されますか?

あなたのWindows Vista以外のクライアントからは、Go Daddy Certification Pathには何が表示されますか? Go Daddy Class xxxまたはStarfield Class xxx?

警告を受け取るこれらのクライアントは、レガシークライアントですか?すなわちWinXP以上?

ルート証明書の更新はWindows Vistaとは異なります。ルート証明書ごとに、ある - 後で

http://support.microsoft.com/kb/931125

ルートのWindows Vista上の証明書とは、自動ルート更新メカニズムを介して配布されています。ユーザーがセキュリティで保護されたWebサイト(HTTPS SSLを使用)を訪問し、セキュリティで保護された電子メール(S/MIME)を読み取ったり、署名されたActiveXコントロールをダウンロードしたり(コード署名)、新しいルート証明書、 Microsoft Updateでルート証明書が確認されます。見つかった場合は、プログラム内のすべての信頼されたルート証明書のリストを含む現在の証明書信頼リスト(CTL)をダウンロードし、そこにルート証明書がリストされていることを確認します。指定されたルート証明書がシステムにダウンロードされ、Windowsの信頼されたルート証明機関ストアにインストールされます。

WebサーバーのGo Daddy Certification PathはGo Daddy Class 2の代わりにStarfield Class 2だと思っているので、間違ったルート証明書をインストールしたことに気付くでしょう。それは、あなたがルート証明書の警告を表示しないWebサーバー上で見るとき、私はDo Daddyクラス2のルート証明書をダウンロードしてインストールし、Starfieldを削除して、あなたの問題はなくなるはずです。

21

私は、Webメソッドを呼び出す前に、この行を追加することによって、このエラーを修正:

System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; }; 
+1

これは理想的な解決策ではありませんが、無効なSSLを使用している場合(これは避けられないこともあります)、これは許容される回避策になります。 –

+1

あなたの証明書を検証するカスタムロジックを追加しない限り、これは解決策にはなりません。 prodでどんなcertも受け入れることはできません。証明書の検証を無視して、代わりに証明書を受け入れる場合、SSL/TLSの使用には何の意味もありません。 –

+0

Maksと同意するとprodでこれをやっていないとのコメントがありますが、この解決策は私が働いている内部使用専用ユーティリティの時間を節約しました。ちょっと注意してください。 – BitsEvolved

2

VB.NETと同等の

System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(senderX, certificate, chain, sslPolicyErrors) 
                      Return True 
                     End Function 
関連する問題