web-dev-qa-db-ja.com

IIS 7.5で(コマンドラインを使用して)一度に複数のサイトのワイルドカード証明書を置き換えます

私は3つのウェブサイトを持っています:aaa.my-domain.combbb.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から通常の方法を試しました。 edit site bindings window in IIS 7.5

しかし、OKを押すと、次のエラーが発生します。

---------------------------サイトバインディングの編集-------------------- -------

少なくとも1つの他のサイトが同じHTTPSバインディングを使用しており、そのバインディングは別の証明書で構成されています。このHTTPSバインディングを再利用し、他のサイトを再割り当てして新しい証明書を使用してもよろしいですか?

- - - - - - - - - - - - - - はい・いいえ - - - - - - - - - - - ------

はいをクリックすると、次のメッセージが表示されます:

---------------------------サイトバインディングの編集-------------------- -------

このバインディングに関連付けられている証明書は、別のサイトのバインディングにも割り当てられています。このバインディングを編集すると、他のサイトのHTTPSバインディングが使用できなくなります。続行しますか?

- - - - - - - - - - - - - - はい・いいえ - - - - - - - - - - - ------

このメッセージは、 https://bbb.my-domain.com および https://ccc.my-domain.com が使用できなくなることを通知します。そして、少なくともこれら2つのドメインの証明書の置き換えが完了するまでは、ダウンタイムが発生します。

これを行うにはもっと賢い方法があるに違いないと私は考えていました。おそらく、すべてのWebサイトのワイルドカード証明書を新しい証明書に一度に置き換えるコマンドラインを使用します。その方法についてオンラインでリソースを見つけることができませんでした。何か案は?

ワイルドカードとバインディングに関連するサイト:

コマンドラインからの証明書のバインドに関連するサイト:

7
Chris

答えの文脈は、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自体です。

Certhashを見つける

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)です。

Appidを見つける

まずは すべての証明書とソケットのバインディングを確認

_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サイトの証明書を置き換えました。

11
Chris