IISでLet's Encrypt を利用してSSLサイトを構築する手順を紹介します。
Let's Encrypt を利用すると、無償のSSL証明書を発行できます。この記事では、IISのWebサーバーを利用している環境でLet's Encryptを利用し無料のSSL証明書を取得してhttpsサイト(SSL対応サイト)を設定する方法を紹介します。
IISでLet's Encrypt を利用する方法は何通りかありますが、今回はletsencrypt-win-simple を利用する手順を紹介します。letsencrypt-win-simple はWindowsで動作するLet's Encrypt クライアントソフトウェアです。
https://github.com/Lone-Coder/letsencrypt-win-simple/releases にアクセスします。下図のWebページが表示されます。
Downloadsセクションからletsencrypt-win-simple クライアントをダウンロードします。今回はVersion 1.9.4.3 をダウンロードしました。
ダウンロードしたZIPファイルを展開します。ZIPファイル内にはletsencryptクライアントソフトウェアが含まれています。
管理者権限でコマンドプロンプトを起動します。
letsencryptクライアントソフトウェアのディレクトリに移動し、letsencrypt.exe プログラムを実行します。
下図の画面が表示されます。
メールアドレスを入力します。
License Agreement の同意確認があります。"y"を入力します。
下図の画面が表示されます。メニューが表示されます。下図の状態はIISにサイトが作成されていないためサイトのリストが表示されていません。
IISがインストールされ、サイトが作成されている場合は、サイトのリストが表示されます。SSLの証明書を作成するサイトの番号を入力します。
番号を入力すると、証明書の要求と作成が始まります。証明書の取得が完了すると。更新タスクの作成、または更新の確認が表示されます。
証明書の要求に失敗する場合は下記の「証明書の要求に失敗する場合」のセクションを参照して、".well-known" ディレクトリに"web.config"ファイルを作成します。
IISの再起動の確認プロンプトが表示されます。"y"を入力し再起動しておきます。
メニュー画面に戻ります。終了する場合は"Q"を入力し、プログラムを終了します。
インターネット インフォメーション サービス(IIS) マネージャーを起動します。IISマネージャーのウィンドウの左側のツリービューの[サイト]のノードを展開し、SSL証明書の設定をしたサイトノードをクリックして選択します。
マウスの右ボタンをクリックします。下図のポップアップメニューが表示されますので、[バインドの編集]メニューをクリックします。
[サイト バインド]ダイアログが表示されます。
httpsの項目をクリックして選択します。選択後ウィンドウの右側の[編集]ボタンをクリックします。
[サイトバインドの編集]ダイアログが表示されます。[SSL 証明書]のコンボボックスにSSL証明書が設定されていることを確認します。
証明書の要求に失敗する場合の対処方法を紹介します。
証明書の作成の際に
のようなエラーメッセージが表示され、証明書の要求に失敗する場合があります。
ドキュメントルートのフォルダを確認すると、".well-known" ディレクトリは既に作成されています。
中に入ると"acme-challenge"ディレクトリも作成されています。
answerファイルも作成されています。しかし、Webブラウザからはanswerファイルにはアクセスできません。拡張子が定義されていないため、MIMEのタイプに定義されていないファイルと判断されて、アクセスできないことが原因かと考えられます。
すべてのMIMEタイプについてアクセスできるように設定を変更します。Answerファイルを配置したディレクトリに"web.config"ファイルを作成します。
web.configファイルの内容は下記とします。
拡張子の無いファイルは"text/plain"として処理する設定です。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension="." mimeType="text/plain" />
</staticContent>
</system.webServer>
</configuration>
設定後に再度、証明書の要求を実行します。
SSLの証明書をWebブラウザから確認します。IEの場合はaddressバーの右側の南京錠のアイコンをクリックします。下図のポップアップウィンドウが表示されます。[証明書の表示]リンクをクリックします。
証明書のダイアログが表示されます。
自己証明書でCAのルート証明書がインストールされていない場合は、下図のセキュリティ証明書エラー画面が表示されます。
接続できない場合は以下の原因が考えられます。
うまく動作しない場合はサイトの再起動をすると改善される場合もあります。
証明書はドメイン証明書のため、URLにIPアドレスを入力して接続した場合は証明書エラー画面が表示されます。また、証明書取得時のホスト名と違うエイリアス名でサイトにアクセスした場合もエラー画面が表示されます。
https://github.com/Lone-Coder/letsencrypt-win-simple/wiki
httpサイトとhttpsサイトの両方のサーバーが起動している場合、1カ月~2カ月ほど経過すると、Googleからのページ遷移先が自動でhttpサイトからhttpsサイトに切り替わります。
https://github.com/Lone-Coder/letsencrypt-win-simple/releases にアクセスします。下図のWebページが表示されます。
Downloadsセクションから最新のletsencrypt-win-simple クライアントをダウンロードします。今回はVersion 1.8.9 をダウンロードしました。
ダウンロードしたZIPファイルを展開します。
ZIPファイル内にはletsencryptクライアントソフトウェアが含まれています。
管理者権限でコマンドプロンプトを起動します。
cdコマンドで letsencrypt-win-simple クライアントを配置したディレクトリに移動します。
(今回の場合は "c:\tools\letsencrypt-win-simple-v1.8.9-Pre-Release" に配置してあります。)
証明書の取得コマンドを実行します。
今回は以下のコマンドを実行しました。
初回のコマンド実行時には時にはメールアドレスの入力があります。
メールアドレスを入力します。
初回は失敗します。下図のエラーメッセージが表示されます。
エラーメッセージは
となります。
ドキュメントルートのフォルダを確認すると、".well-known" ディレクトリは既に作成されています。
中に入ると"acme-challenge"ディレクトリも作成されています。
answerファイルも作成されています。しかし、Webブラウザからはanswerファイルにはアクセスできません。拡張子が定義されていないため、MIMEのタイプに定義されていないファイルと判断されて、アクセスできないことが原因かと考えられます。
すべてのMIMEタイプについてアクセスできるように設定を変更します。Answerファイルを配置したディレクトリに"web.config"ファイルを作成します。
web.configファイルの内容は下記とします。
拡張子の無いファイルは"text/plain"として処理する設定です。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension="." mimeType="text/plain" />
</staticContent>
</system.webServer>
</configuration>
設定後に再度コマンドを実行します。
正常に認証できると証明書が取得でき、実行ユーザーのディレクトリの"letsencrypt-win-simple"に保存されます。
実行ユーザーがAdministratorの場合は
ディレクトリに証明書が保存されます。
実行後に証明書を更新するタスクがタスクスケジューラーに追加されます。タスクを特定のユーザーで起動するかの確認プロンプトが表示されます。今回は実行ユーザと同じAdministratorで実行するため"N"を入力します。
コマンドが終了しました。
"letsencrypt-win-simple"クライアントは、SSL証明書の取得が完了するとIISのサーバーにも証明書を自動で追加します。サーバーに証明書が追加されているかを確認します。
実行ユーザーのディレクトリの"letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org"が証明書の保存フォルダです。
Administrator の場合は
"letsencrypt-win-simple"クライアントは、SSL証明書の取得の完了時に証明書更新のバッチ処理をタスクスケジューラーに追加します。更新処理が正しくタスクスケジューラーに追加されたかを確認します。
タスクスケジューラーを開きます。左側のツリービューで[タスクスケジューラー ライブラリ]のノードを選択します。右側のタスク一覧に"letsencrypt-win-simple httpsacme-v01.api.letsencrypt.org"という名前のタスクが追加されています。
タスクをクリックして選択し、右側下部エリアの[操作]タブをクリックしてコマンドを確認します。
コマンドが毎日9時に実行される設定になっています。
続いてWebサイトにSSLの設定をします。インターネット インフォメーション サービス(IIS)マネージャーを開き、左側のツリービューで設定するWebサイトのノードを選択します。選択後右クリックし、ポップアップメニューを表示します。メニューの[バインドの編集]をクリックします。
[サイト バインド]ダイアログが表示されます。ポートを確認すると、SSLのポートはまだ追加されていないことがわかります。右上の[追加]ボタンをクリックします。
[サイトバインドの追加]ダイアログが表示されます。
[種類]のコンボボックスを開きます。ドロップダウンリストから"https"を選択します。httpsを選択するとポート番号は"443"に自動で変更されます。
IPアドレスやホスト名を選択します。ダイアログ下部の[SSL 証明書]のコンボボックスを開きます。ドロップダウンリストが表示され、サーバーに追加してある証明書が表示されます。一覧から、このサイトに設定する証明書を選択します。
設定ができました。ダイアログボックス右下の[OK]ボタンをクリックして設定を確定します。
[サイトバインド]ダイアログに戻ると、httpsサイトのバインドが追加されていることが確認できます。右下の[閉じる]ボタンをクリックしてダイアログボックスを閉じます。
httpsサイトにWebブラウザでアクセスします。証明書のエラー画面が表示されずにサイトが表示できれば正しく設定ができています。
以上で設定は完了です。