私は3つのウェブサイトを持っています:aaa.my-domain.com
、bbb.my-domain.com
およびccc.my-domain.com
すべて単一のワイルドカード証明書を使用*.my-domain.com
on IIS 7.5 Windows Server 2008R2 64ビット。その証明書は1か月で期限切れになり、新しいワイルドカード証明書を取得しました*.my-domain.com
サーバー上で準備ができています。
これらのすべてのドメインで、顕著なダウンタイムなしに新しいワイルドカード証明書を使用する必要があります。
私はaaa.my-domain.comの証明書を置き換えることから始めて、UIから通常の方法を試しました。
しかし、OKを押すと、次のエラーが発生します。
---------------------------サイトバインディングの編集-------------------- -------
少なくとも1つの他のサイトが同じHTTPSバインディングを使用しており、そのバインディングは別の証明書で構成されています。このHTTPSバインディングを再利用し、他のサイトを再割り当てして新しい証明書を使用してもよろしいですか?
- - - - - - - - - - - - - - はい・いいえ - - - - - - - - - - - ------
はいをクリックすると、次のメッセージが表示されます:
---------------------------サイトバインディングの編集-------------------- -------
このバインディングに関連付けられている証明書は、別のサイトのバインディングにも割り当てられています。このバインディングを編集すると、他のサイトのHTTPSバインディングが使用できなくなります。続行しますか?
- - - - - - - - - - - - - - はい・いいえ - - - - - - - - - - - ------
このメッセージは、 https://bbb.my-domain.com および https://ccc.my-domain.com が使用できなくなることを通知します。そして、少なくともこれら2つのドメインの証明書の置き換えが完了するまでは、ダウンタイムが発生します。
これを行うにはもっと賢い方法があるに違いないと私は考えていました。おそらく、すべてのWebサイトのワイルドカード証明書を新しい証明書に一度に置き換えるコマンドラインを使用します。その方法についてオンラインでリソースを見つけることができませんでした。何か案は?
ワイルドカードとバインディングに関連するサイト:
コマンドラインからの証明書のバインドに関連するサイト:
答えの文脈は、IIS 7は実際には証明書のバインディングを気にしないということです。IIS 7はWebサイトを1つ以上のソケットに結び付けるだけです。各ソケットIP +ポートの組み合わせです。ソース: IIS7はコマンドラインからサイトに証明書を追加します
したがって、OSレイヤーで証明書の再バインドを実行する必要があります。 OS層がSSL部分を制御するため、netsh
を使用して証明書を特定のソケットに関連付けます。これは、_netsh http add sslcert
_を使用してnetsh
を介して行われます。
(新しい)証明書をソケット(ip +ポート)にバインドすると、そのソケットを使用するすべてのサイトが新しい証明書を使用します
証明書をソケットにバインドするコマンドは次のとおりです:_netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-999999999999}
_
このパートでは、ステップバイステップで進める方法を説明します。有効期限が近づいている* .my-domain.com証明書を実行しているWebサイト(aaa.my-domain.com、bbb.my-domain.com)があることを前提としています。 サーバーに既にインストールされているが、IISのWebサイトにはまだ適用されていない新しい証明書があります。
まず、2つのことを見つける必要があります。新しい証明書とappidのcerthash。
certhash
証明書のSHAハッシュを指定します。このハッシュは20バイトの長さで、16進文字列として指定されます。appid
GUIDを指定して、所有するアプリケーションを識別します。つまり、IIS自体です。certutil
コマンドを実行して、マシン上のすべての証明書を取得します。
_certutil -store My
_
すべての情報が必要なわけではないので、次のようにします。
_certutil -store My | findstr /R "sha1 my-domain.com ===="
_
出力の中には、サーバーで新しい証明書が用意されているはずです。
================ Certificate 5 ================ Subject: CN=*.my-domain.com, OU=PositiveSSL Wildcard, OU=Domain Control Validated Cert Hash(sha1): 12 34 56 78 90 12 34 56 78 90 12 34 56 78 90 12 34 56 78 90
_1234567890123456789012345678901234567890
_は、探していたcerthash
です。スペースのない証明書ハッシュ(sha1)です。
まずは すべての証明書とソケットのバインディングを確認 :
_netsh http show sslcert
_
または特に1つのソケット
_netsh http show sslcert ipport=10.100.0.12:443
_
出力:
_SSL Certificate bindings:
----------------------
IP:port : 10.100.0.12:443
Certificate Hash : 1111111111111111111111111111111111111111
Application ID : {12345678-1234-1234-1234-123456789012}
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
_
_{12345678-1234-1234-1234-123456789012}
_は、探していたappid
です。これは、IIS自体のアプリケーションIDです。ソケット_10.100.0.12:443
_が現在も古い証明書(ハッシュ111111111 ...)にバインドされていることがわかります。
コマンドプロンプトを開き、管理者として実行します。管理者として実行しないと、「要求された操作には昇格が必要です(管理者として実行)」のようなエラーが表示されます。
まず、このコマンドを使用して現在の証明書とソケットのバインディングを削除します
_netsh http delete sslcert ipport=10.100.0.12:443
_
あなたは得るべきです:
_SSL Certificate successfully deleted
_
次に、このコマンドを使用して( here が見つかります)、このコマンドを使用して以前に見つけたappidおよびcerthash(スペースなし)を使用して新しい証明書ソケットバインディングを追加します
_netsh http add sslcert ipport=10.100.0.12:443 certhash=1234567890123456789012345678901234567890 appid={12345678-1234-1234-1234-123456789012}
_
あなたは得るべきです:
_SSL Certificate successfully added
_
できました。このIP +ポート(ソケット)にバインドされているすべてのWebサイトの証明書を置き換えました。