今回の記事では、Windows Server のリプレイスなどにより、元々使用していたサーバーにインストールされているSSLサーバー証明書を新しい別のサーバーに移行する場合の手順を解説していきます。
また、各手順において、知っておくと良いWindows ServerやIISや証明書の関連知識についても解説していきます。
尚、今回の記事内容はWindows系サーバー間での証明書移行を前提としております。
例えば、LinuxとWindows間の場合は、OpenSSLによって「pfx形式ファイル」を変換するといった手順も必要です。
その場合、当ブログで過去に紹介した以下の記事も参考になるかも知れません。
SSLサーバー証明書の移行作業の概要
今回の記事では、Windows ServerにインストールしたSSLサーバー証明書を、新しく構築した別のWindows Serverへ移行する一連の手順を紹介します。
一般的に、このような作業が必要になるケースとしては、Windows Server 2012 などの古いWindows Server で稼働していたウェブサーバーやアプリケーションサーバーをリプレイスするといった場合かと思います。
今回紹介する手順は、どのWindows Server及び、どのIISのバージョンであってもほぼ同じ手順で実施できます。
作業の流れは以下です。
- 移行元のWindows Server からSSL証明書(pfxファイル)をエクスポート
- 移行先のWindows Server にSSL証明書(pfxファイル)をインポート
- 移行元のWindows Server に中間証明書をインストール
- 移行元のWindows Server のIISで証明書適用対象のサイトをバインド
今回の記事では、上記の各手順を具体的に説明していきます。
【参考】PFXファイルとは
PFXとは「Personal Information Exchange」の略称であり、秘密鍵ファイルと証明書ファイルをパスワードで保護し、暗号化したうえで一つにまとめたファイル形式です。
「PKCS」と呼ばれる暗号化に関する各標準規格のなかの12番目である「PKCS#12」で定義されているファイルフォーマットです。
IISからサーバー証明書をエクスポートする場合は、このファイル形式で出力されます。
PKCSにより定められている各規格については、以下のWikipediaの記事をご参照ください。
尚、当記事の冒頭で、OpenSSLを利用して秘密鍵を取り出すやり方を紹介した記事のリンクを掲載しましたが、このようにpfxファイルに格納されている秘密鍵や証明書を個別に取り出すことも可能です。
SSL証明書の移行作業手順
当項から、具体的なSSL証明書の移行作業の手順を紹介していきます。
尚、インターネットで手順を検索すると、インターネット インフォメーション サービス マネージャー(以降「IISマネージャー」と呼称)を起動して、証明書のエクスポートやインポートを行う手順がよく紹介されていますが、当記事では「MMC」を起動して、エクスポートやインポートを実施します。
理由としては、MMCに証明書のスナップインを追加して操作する方が直感的でわかりやすく、OSやIISのバージョンによるUIの違いにも左右されないためです。
Windows Serverに不慣れな場合、「MMC」の仕組みが少しわかり難いと感じる場合もあるかと思い、当記事の本題から外れますが簡単に解説します。
「MMC」とは「Microsoft Management Console」の略称であり、「MMC」の機能を一言で説明すると、Windowsの各管理機能を呼び出すための「ランチャー」だと言えます。
このランチャーに、「パフォーマンスモニター」や「タスクスケジューラー」などの管理機能を登録することを「スナップインの追加」と呼びます。
各管理機能をスナップインに追加して、「.msc」形式で設定を保存することで、以降はその.mscファイルを開ければ、スナップインに登録した各管理機能が紐付いた状態でMMCの画面に表示されるようになります。
よって、「MMC」とは、Windowsの各管理機能を呼び出すための「ランチャー」と覚えておいてください。
詳しい説明は以下のリンク先をご参照ください。
移行元サーバーからSSL証明書をエクスポート
当項では、SSL証明書が適用されている移行元サーバーからSSL証明書やその証明書の元となる秘密鍵をPFX形式でエクスポートする手順を紹介していきます。
尚、移行元サーバーは、Windows Server 2019(IIS 10.0)を前提としつつ、2016やそれ以前のOSで実施した場合の違いなども併せて紹介していきます。
MMCを起動して、スナップインに「証明書」を追加
「スタート」を右クリック→「ファイル名を指定して実行」を起動し、名前に「mmc」と入力して「OK」を押下します。
表示された「コンソール1」の左上「ファイル」→「スナップインの追加と削除」を選択します。
「スナップインの追加と削除」画面の左側の枠の「利用できるスナップイン」内の項目の最下部に「証明書」があるため、その「証明書」を選択して、中央の「追加」を押下します。
「証明書スナップイン」画面の「コンピューターアカウント」を選択して、「完了」を押下します。
「コンピューターの選択」画面の既定値で選択されている「ローカルコンピューター」のまま、「完了」を押下します。
「スナップインの追加と削除」画面が再度表示され、「選択されたスナップイン」に「証明書(ローカルコンピューター)」が追加されたのを確認したら、画面下部の「OK」を押下します。
証明書ストアから証明書をエクスポート
証明書ストア画面左側最上位の「コンソールルート」から以下の順にフォルダを開きます。
「証明書(ローカルコンピューター)」→「個人」→「証明書」
末端の「証明書」フォルダを選択すると、画面右側には、そのサーバーにインストールされている証明書が一覧で表示されます。
この一覧のなかから、エクスポートしたい証明書を選択して右クリックし「すべてのタスク」→「エクスポート」を選択します。
尚、過去に証明書の更新を繰り返しているサーバーの場合は、複数の証明書が表示されているため、「名前」「有効期限」「フレンドリ名」などから現在有効な証明書を判別してください。
こちらからインストールされている中間証明書もエクスポートすることが可能です。
「証明書のエクスポート ウィザード」が起動します。
「次へ」を押下します。
秘密キーをエクスポートするかを選択します。
一般的には秘密鍵と証明書はセットで使用するため、出力するPFXファイルには秘密鍵も含めます。
よって、「はい、秘密キーをエクスポートします」を選択して「次へ」を押下します。
エクスポートファイルの形式を選択します。
ファイル形式自体は「Personal Information Exchange(PFX)」しか選択できません。
その配下の選択項目は以下の画像のように指定するのが一般的です。
注意すべきは二つ目の項目の「正しくエクスポートされたときは秘密キーを削除する」です。
こちらにチェックを付けた状態でエクスポートを実施すると、エクスポートしたサーバーから、この証明書に紐付く秘密鍵が削除されます。
秘密鍵が削除されてしまうと、そのサーバーではhttpsでの通信ができなくなります。
秘密鍵はセキュリティ上、物理的に複数存在しないことが望ましいのですが、明確にエクスポートと同時に秘密鍵を削除しないといけない理由がない限り、このチェックは外しておいてください。
あと、Windows Server 2012 など過去のOSのエクスポート機能に無かった項目として、四つ目の「証明書のプライバシーを有効にする」にチェックを付けた場合、秘密鍵と証明書の両方が暗号化されます。
チェックを外した場合、秘密鍵のみが暗号化され、証明書自体は暗号化されずにPFXファイルに格納されるそうです。
詳しくは以下のリンク先の解説をご確認ください。
上記のリンク先でも説明されていますが、秘密鍵と証明書の両方を暗号化されるのが従来の挙動です。
証明書のみ暗号化をせずにPFXに格納するメリットはいまいち理解できていませんが、通常はチェックを付けておけば良いかと思います。
次の画面では、セキュリティ関連の設定をします。
具体的にはパスワードの設定と、Window Server 2019以降の場合は暗号化アルゴリズムの規格を選択します。
尚、暗号化アルゴリズムの選択では以下から選びます。
- TripleDES-SHA1
- AES256-SHA256
一般的には、TripleDES(暗号化方式)とSHA1(ハッシュ生成方式)の組み合わせより、AES256-SHA256の組み合わせの方が強固です。
よって、「AES256-SHA256」を選択するのが本来正しいかと思いますが、どうも、「AES256-SHA256」を選択してエクスポートした場合、Windows Server 2016以前のWindowsのインポートしようとするとエラーになるようです。
以下のリンク先で解説されていました。
よって、「TripleDES-SHA1」を選択した方が良さそうです。
尚、暗号化アルゴリズムを選択できるのは、Windows Server 2019以降のWindowsからです。
Windows Server 2016でエクスポートする場合は、以下の画像のように、暗号化アルゴリズムの選択欄は存在しません。
PFXファイルの出力先を指定します。
証明書のエクスポートウィザードの最終画面が表示されます。
この画面で「完了」を押下すると、PFXファイルが指定した場所に出力されます。
移行先サーバーでSSL証明書をインポート
当項では、前項でエクスポートした秘密鍵と証明書のペアを移行先サーバーにインポートする手順を紹介していきます。
MMCを起動して、スナップインに「証明書」を追加
当手順は、前項で紹介した手順と変わりがない為、移行元サーバーで実施した手順を参考に実施してください。
証明書ストアから証明書をインポート
証明書ストア画面左側最上位の「コンソールルート」から以下の順にフォルダを開きます。
「証明書(ローカルコンピューター)」→「個人」→「証明書」
末端の「証明書」フォルダを右クリックして、「すべてのタスク」→「インポート」を選択します。
「証明書のインポート ウィザード」が起動します。
「次へ」を押下します。
インポートする証明書を選択します。
前項で出力したPFXファイルを指定します。
尚、ファイルを指定するダイアログではファイルの種類で「Personal Information Exchange(*.pfx;*.p12)」を選択しないとPFXファイルは表示されないので注意してください。
秘密キーの保護設定をします。
パスワードは前項のエクスポート時に指定したパスワードを入力します。
インポートオプションでは、既定値として「このキーをエクスポート可能にする」のチェックが外れていますが、こちらは通常はチェックを付けておきます。
このチェックが外れていると、このインポート処理で取り込んだ秘密鍵をエクスポートできなくなります。
「すべての拡張プロパティを含める」は既定値ではチェックが付いていますが、そのままチェックが付いた状態で「次へ」を押下します。
格納する証明書ストアを選択します。
当手順の場合、「証明書をすべて次のストアに配置する」が選択されており、証明書ストアは「個人」が指定されている状態になっているはずです。
この場合は「次へ」を押下します。
証明書のインポートウィザードの最終画面が表示されます。
内容に問題がなければ、「完了」を押下します。
インポート処理が実行されます。
移行先サーバーで中間CA証明書をインポート
SSLサーバー証明書だけでは、ブラウザに格納されているルート認証局の証明書から末端のサーバー証明書まで辿ることができず、その間の中間証明書もサーバー側にインストールする必要があります。
当記事では、認証局により発行されたSSLサーバー証明書と併せて提供されている中間CA証明書ファイルをインポートする手順を紹介します。
移行元サーバーの証明書ストアにある中間証明書をエクスポートして、移行先サーバーにインポートしても結構です。
証明書ストアから中間証明書をインポート
移行先サーバーの証明書ストア画面左側最上位の「コンソールルート」から以下の順にフォルダを開きます。
「証明書(ローカルコンピューター)」→「中間証明機関」→「証明書」
末端の「証明書」フォルダを右クリックして、「すべてのタスク」→「インポート」を選択します。
証明書のインポートウィザードが開始されます。
「次へ」を押下します。
インポートする証明書ファイルを指定します。
尚、ファイルを指定するダイアログではファイルの種類を「X.509 証明書(*.cer;*.crt)」を選択し、インポート対象の中間証明書ファイルを指定します。
格納する証明書ストアを選択します。
当手順の場合、「証明書をすべて次のストアに配置する」が選択されており、証明書ストアは「中間証明機関」が指定されている状態になっているはずです。
この場合は「次へ」を押下します。
証明書のインポート ウィザードの最終画面が表示されます。
内容に問題がなければ、「完了」を押下します。
インポート処理が実行されます。
移行元サーバーの証明書適用対象Webサイトに証明書をバインド
当項では、移行先サーバーのIISマネージャーを起動して、証明書適用対象のWebサイトに対して、インポートした証明書を紐付ける(バインド)する手順を紹介します。
IISマネージャーを起動して証明書をバインド
移行先サーバーでIISマネージャーを起動し、画面左側の「接続」から、SSLサーバー証明書を適用するWebサイトを選択します。
その後、画面右側の「操作」にある「バインド」をクリックします。
サイトバインド画面が表示されます。
画面右上の「追加」を押下します。
サイトバインドの追加画面の左上「種類」をhttpからhttpsに変更すると、画面下部にSSL証明書の選択が可能になります。
このリストから前項でインポートした証明書のフレンドリ名を選択して、「OK」を押下します。
サイトバインド画面に種類「https」の行が追加されていればバインドが完了です。
【おまけ】httpsへ強制的にリダイレクトさせる場合は
当記事の作業を実施することで、移行先サーバーに対してhttpsで通信できるようになります。
このまま移行先サーバーを使用しても問題はありませんが、できればhttpでアクセスしてきた場合は、httpsに強制的にリダイレクトをするような設定を入れるのがより望ましいです。
当ブログでは、httpでアクセスしてきた通信を、強制的にhttpsへリダイレクトさせるIISの設定方法を紹介しています。
良ければ併せてご一読ください。
最後に
今回の記事では、Windows server にインストールしたSSLサーバー証明書を別のWindows Serverに移行する場合の手順を紹介しました。
他の技術ブログや証明書の認証局販売代理店などが公開している手順をインターネットで調べると、IISマネージャーから一連の操作をする手順が多いのですが、今回の記事で紹介したような、MMCを介して「証明書ストア」を起動し、そこでエクスポートやインポートを実施した方が直感的にわかりやすいのでは無いかと思います。
今回の記事が皆さまの手助けになれば幸いです。
長々と読んでいただきましてありがとうございました。
それでは皆さまごきげんよう!