web-dev-qa-db-ja.com

不正なローカルホスト証明書がIIS

OKこの1つのWin7x64マシンでは解決できないと思われるSSLの問題があります。私は何年も自己署名証明書を使用しており、以前にもブログに書いていたので、経験があります。しかし、今回はわからないことが起こっています。

(2)localhost SSL証明書を作成し、自分のマシンにインストールしました。

  1. IIS(7.5)で発行および作成されたlocalhost(フレンドリ名)。マシン名の「IssuedTo」および「IssuedBy」の値が含まれています:「DevMachine123」。これは次の証明書です。 IISの「デフォルトのWebサイト」で構成されたアプリケーションに提供されます。
  2. cN = localhost(共通名)が使用されたmakecert.exeツールを使用して作成されたlocalhostSSL証明書。これには、「localhost」の「IssuedTo」および「IssuedBy」の値が含まれています。これはSSL証明書ですI want「デフォルトのWebサイト」で構成されたアプリケーション用にIISで提供されます。

私が得ているエラーは次のとおりです。

「このWebサイトによって提示されたセキュリティ証明書は、別のWebサイトのアドレスに対して発行されました。」

IEブラウザから提供されている証明書を表示すると、「DevMachine123」に発行されたローカルホスト証明書が使用されており、notローカルホストに発行されたローカルホスト(上記の#2)これでこの問題が解決するはずです。したがって、「DevMachine123」が「localhost」と一致しないため、名前が一致しません。

もう1つのポイント。私の証明書持っている「信頼されたルート証明機関」に追加されたので両方とも信頼された証明書です

最後に、IISのマシンで「デフォルトのWebサイト」のhttpsポート443バインディング構成を確認しました。証明書を表示すると、correct localhost証明書がバインドされていることがわかります(上記の#2、CN = localhost)。

私はここで自分の拠点をカバーしたと感じています(はい、私は thisthis を見たので、再投稿しないでください)。ここで何が欠けていますか?

ありがとう!

14
atconway

私も同様の問題を抱えており、サイトのバインドについて上記のチェックも行っていました。次のnetshコマンドを実行しました

netsh http show sslcert

これにより、2つのSSL証明書バインディングが表示されました。 1つは正しい証明書を持つIP:Port 0.0.0.0:443にあり、もう1つは期限切れの証明書を持つIP:Port [::]:443にあります。ローカルコンピューターのCertMgr.mscを開いて(手順については ここ を参照)、無効な証明書を検索したところ、有効期限が切れていることがわかりました。

この問題を解決するために、私は次のことを行いました

  1. netsh http delete sslcert ipport=[::]:443
  2. iisreset /restart
30
IsolatedStorage

@IsolatedStorageと非常によく似た答えですが、何が私を助けたかについての詳細がいくつかあります。

最初に、おそらくあなたにとって同じであるいくつかのポイント

  • 有効期限が切れているため、証明書を更新しようとしました。
  • 同じIPに複数のドメインがバインドされています。それらはたまたまSAN証明書ですが、それはおそらく無関係です。
  • 一元化された証明書ストアを使用しようとしていました。繰り返しますが、これは私の答えのほとんどとは無関係だと思います。
  • すでに証明書を更新しようとしましたが、新しい日付が表示されませんでした。
  • 古い証明書の有効期限が切れている場合は、おそらく今パニックに陥っています。深呼吸する...

まず、https://www.digicert.com/help/にアクセスして、DigiCertツールをダウンロードすることを強くお勧めします。オンラインでもご利用いただけます。

Webサイトにhttps://example.comと入力すると、有効期限と拇印(MSが証明書ハッシュと呼ぶもの)が表示されます。リアルタイムのルックアップを行うため、ブラウザ(または中間サーバー)が何かをキャッシュしているかどうかを心配する必要はありません。

一元化された証明書ストアを使用している場合は、.pfxファイルが最新バージョンであることを100%確認する必要があるため、ストアディレクトリに移動して次のコマンドを実行します。

C:\WEBSITES\SSL> certutil -dump www.example.com.pfx

これにより、有効期限とハッシュ/拇印が表示されます。明らかに、この有効期限が間違っている場合は、おそらく間違った証明書をファイルシステムにエクスポートしただけなので、最初にそれを修正してください。

CCSを使用している場合は、このcertutilコマンドで(更新された証明書の)有効期限が予想されると想定して、続行できます。

次のコマンドを実行します。

netsh http show sslcert > c:\temp\certlog.txt
notepad c:\temp\certlog.txt

ここにはたくさんのものがあるので、テキストエディタで開く方が簡単です。

このファイルで、digicert.com(またはChromeから取得した拇印)から取得した間違ったハッシュを検索することをお勧めします。

私にとって、これは次のことをもたらしました。予想されるドメイン名ではなく、IPにバインドされていることがわかります。これが問題です。これは(理由は不明ですが)、example.com用に更新したIIS)で設定されたバインディングよりも優先されるようです。

IP:port                      : 10.0.0.1:443
Certificate Hash             : d4a17e3b57e48c1166f18394a819edf770459ac8
Application ID               : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name       : My
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check                  : Enabled
Revocation Freshness Time    : 0
URL Retrieval Timeout        : 0
Ctl Identifier               : (null)
Ctl Store Name               : (null)
DS Mapper Usage              : Disabled
Negotiate Client Certificate : Disabled

このバインディングがどこから来たのかさえわかりません-デフォルトのサイトにはSSLバインディングすらありませんが、このサーバーは数年前のもので、何かが壊れてスタックしていると思います。

だからあなたはそれを削除したいと思うでしょう。

安全のために、最初に次のコマンドを実行して、この1つのアイテムのみを削除していることを確認する必要があります。

C:\Windows\system32>netsh http show sslcert ipport=10.0.0.1:443

SSL Certificate bindings:
-------------------------

IP:port                      : 10.0.0.1:443
Certificate Hash             : d4a17e3b57e48c1166f18394a819edf770459ac8
Application ID               : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name       : My
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check                  : Enabled
Revocation Freshness Time    : 0
URL Retrieval Timeout        : 0
Ctl Identifier               : (null)
Ctl Store Name               : (null)
DS Mapper Usage              : Disabled
Negotiate Client Certificate : Disabled

これが「悪い」拇印であることを確認しました。予想される単一のレコードは、次のコマンドで削除できます。

C:\Windows\system32>netsh http delete sslcert ipport=10.0.0.1:443

SSL Certificate successfully deleted

うまくいけば、Digicertに戻ってコマンドを再実行すると、期待される証明書の拇印が得られます。念のため、すべてのSANの名前がある場合は、名前を確認する必要があります。

後で驚きがないことを確認するために、おそらくここでIISRESETを実行する必要があります。

最後の注意:一元化された証明書ストアを使用していて、そこから証明書を取得しているかどうかを判断しようとしても異常な動作が見られる場合は、心配しないでください。これはあなたのせいではありません。新しいファイルをすぐに取得することもあるようですが、古いファイルはキャッシュします。何らかの変更を加えた後にSSLバインディングを開いて再保存すると、SSLバインディングがリセットされるように見えますが、100%の確率ではありません。

幸運を :-)

6
Simon_Weaver

同じ症状

ドロップダウンリストのHTTPSバインディングをサーバーIPに変更しました(サイトバインディングダイアログ内)。 「すべて未割り当て」に設定されていました。承諾した既存の証明書とIPの組み合わせの上書きに関する警告が表示され、問題が解決しました。

2
Matt Evans

IISでも、バインディングごとに1つのサイトのみが設定されていることを確認してください。

デフォルトサイトと別のサイトがインストールされている場合、両方とも同じポートにHTTPSバインディングを持っている可能性があります。これが発生した場合、提供される証明書は他のサイトのものである可能性があります。

0
j8048188