IISでLet's Encrypt を利用してSSLサイトを構築する (letsencrypt-win-simple クライアントを利用)
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 クライアントソフトウェアです。
補足
letsencrypt-win-simpleの次期版である、win-acmeを利用した手順は
こちらの記事を参照してください。
手順
letsencrypt-win-simple のダウンロードと配置
https://github.com/Lone-Coder/letsencrypt-win-simple/releases にアクセスします。下図のWebページが表示されます。

Downloadsセクションからletsencrypt-win-simple クライアントをダウンロードします。今回はVersion 1.9.4.3 をダウンロードしました。
ダウンロードしたZIPファイルを展開します。ZIPファイル内にはletsencryptクライアントソフトウェアが含まれています。
Let's Encrypt クライアントによるSSL証明書の取得
管理者権限でコマンドプロンプトを起動します。
letsencryptクライアントソフトウェアのディレクトリに移動し、letsencrypt.exe プログラムを実行します。
下図の画面が表示されます。
メールアドレスを入力します。
License Agreement の同意確認があります。"y"を入力します。
下図の画面が表示されます。メニューが表示されます。下図の状態はIISにサイトが作成されていないためサイトのリストが表示されていません。
IISがインストールされ、サイトが作成されている場合は、サイトのリストが表示されます。SSLの証明書を作成するサイトの番号を入力します。
番号を入力すると、証明書の要求と作成が始まります。証明書の取得が完了すると。更新タスクの作成、または更新の確認が表示されます。
補足
証明書の要求に失敗する場合は下記の「証明書の要求に失敗する場合」のセクションを参照して、".well-known" ディレクトリに"web.config"ファイルを作成します。
IISの再起動の確認プロンプトが表示されます。"y"を入力し再起動しておきます。
メニュー画面に戻ります。終了する場合は"Q"を入力し、プログラムを終了します。
証明書の確認
インターネット インフォメーション サービス(IIS) マネージャーを起動します。IISマネージャーのウィンドウの左側のツリービューの[サイト]のノードを展開し、SSL証明書の設定をしたサイトノードをクリックして選択します。
マウスの右ボタンをクリックします。下図のポップアップメニューが表示されますので、[バインドの編集]メニューをクリックします。
[サイト バインド]ダイアログが表示されます。
httpsの項目をクリックして選択します。選択後ウィンドウの右側の[編集]ボタンをクリックします。
[サイトバインドの編集]ダイアログが表示されます。[SSL 証明書]のコンボボックスにSSL証明書が設定されていることを確認します。
証明書の要求に失敗する場合
証明書の要求に失敗する場合の対処方法を紹介します。
証明書の作成の際に
The ACME server was probably unable to readh (ドメイン名)/.well-known/acme-challenge/(answerファイル名)
Check in a browser to see if the answer file is being served collectry.
のようなエラーメッセージが表示され、証明書の要求に失敗する場合があります。
ドキュメントルートのフォルダを確認すると、".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のルート証明書がインストールされていない場合は、下図のセキュリティ証明書エラー画面が表示されます。
接続できない場合
接続できない場合は以下の原因が考えられます。
- ルーターでhttps接続を許可していない
- ルーターでポートマッピング等の設定が正しくされていない
- サーバーのファイアウォールが許可されていない
うまく動作しない場合はサイトの再起動をすると改善される場合もあります。
注意
証明書はドメイン証明書のため、URLにIPアドレスを入力して接続した場合は証明書エラー画面が表示されます。また、証明書取得時のホスト名と違うエイリアス名でサイトにアクセスした場合もエラー画面が表示されます。
参考
letsencrypt-win-simpleのWiki
https://github.com/Lone-Coder/letsencrypt-win-simple/wiki
letsencrypt-win-simpleのコマンド一覧
https://github.com/Lone-Coder/letsencrypt-win-simple/wiki/How-to-Run
補足:google検索の処理
httpサイトとhttpsサイトの両方のサーバーが起動している場合、1カ月~2カ月ほど経過すると、Googleからのページ遷移先が自動でhttpサイトからhttpsサイトに切り替わります。
以前の手順
letsencrypt-win-simple のダウンロードと配置
https://github.com/Lone-Coder/letsencrypt-win-simple/releases にアクセスします。下図のWebページが表示されます。
Downloadsセクションから最新のletsencrypt-win-simple クライアントをダウンロードします。今回はVersion 1.8.9 をダウンロードしました。
ダウンロードしたZIPファイルを展開します。
ZIPファイル内にはletsencryptクライアントソフトウェアが含まれています。
Let's Encrypt クライアントによるSSL証明書の取得
管理者権限でコマンドプロンプトを起動します。
cdコマンドで letsencrypt-win-simple クライアントを配置したディレクトリに移動します。
(今回の場合は "c:\tools\letsencrypt-win-simple-v1.8.9-Pre-Release" に配置してあります。)
cd c:\\tools\letsencrypt-win-simple-v1.8.9-Pre-Release
証明書の取得コマンドを実行します。
書式
letsencrypt.exe --accepttos --manualhost (ホスト名) --webroot (ドキュメントルートのファイルパス)
今回は以下のコマンドを実行しました。
letsencrypt.exe --accepttos --manualhost www.ipentec.com --webroot c:\home\LocalUser\ipentec.com\web
初回のコマンド実行時には時にはメールアドレスの入力があります。
メールアドレスを入力します。
初回は失敗します。下図のエラーメッセージが表示されます。
エラーメッセージは
The ACME server was probably unable to readh (ドメイン名)/.well-known/acme-challenge/(answerファイル名)
Check in a browser to see if the answer file is being served collectry.
となります。
ドキュメントルートのフォルダを確認すると、".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の場合は
C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org
ディレクトリに証明書が保存されます。
実行後に証明書を更新するタスクがタスクスケジューラーに追加されます。タスクを特定のユーザーで起動するかの確認プロンプトが表示されます。今回は実行ユーザと同じAdministratorで実行するため"N"を入力します。
コマンドが終了しました。
証明書の確認
"letsencrypt-win-simple"クライアントは、SSL証明書の取得が完了するとIISのサーバーにも証明書を自動で追加します。サーバーに証明書が追加されているかを確認します。
実行ユーザーのディレクトリの"letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org"が証明書の保存フォルダです。
Administrator の場合は
C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org
になります。
証明書が保存されていることが確認できます。
letsencrypt-win-simple クライアントはIISにも自動で証明書を追加しますので、設定できているか確認します。[インターネット インフォメーション サービス(IIS)マネージャー]を起動します。左側のツリービューでサーバーノードを選択します。下図の画面が表示されます。
右側の機能ビューの[サーバー証明書]をダブルクリックします。
[サーバー証明書]の画面が表示されます。証明書が追加されていることが確認できます。(証明書の発行者は、正式版の場合は"Let's Encrypt Authority X3" が発行元になります。 ベータ版時点では、"Let's Encrypt Authority X1"が証明書の発行元となっています。)
タスクスケジューラーの確認
"letsencrypt-win-simple"クライアントは、SSL証明書の取得の完了時に証明書更新のバッチ処理をタスクスケジューラーに追加します。更新処理が正しくタスクスケジューラーに追加されたかを確認します。
タスクスケジューラーを開きます。左側のツリービューで[タスクスケジューラー ライブラリ]のノードを選択します。右側のタスク一覧に"letsencrypt-win-simple httpsacme-v01.api.letsencrypt.org"という名前のタスクが追加されています。
タスクをクリックして選択し、右側下部エリアの[操作]タブをクリックしてコマンドを確認します。
letsencrypt.exe --renew --baseuri "https://acme-v01.api.letsencrypt.org/"
コマンドが毎日9時に実行される設定になっています。
サイトの設定
続いてWebサイトにSSLの設定をします。インターネット インフォメーション サービス(IIS)マネージャーを開き、左側のツリービューで設定するWebサイトのノードを選択します。選択後右クリックし、ポップアップメニューを表示します。メニューの[バインドの編集]をクリックします。
[サイト バインド]ダイアログが表示されます。ポートを確認すると、SSLのポートはまだ追加されていないことがわかります。右上の[追加]ボタンをクリックします。
[サイトバインドの追加]ダイアログが表示されます。
[種類]のコンボボックスを開きます。ドロップダウンリストから"https"を選択します。httpsを選択するとポート番号は"443"に自動で変更されます。
IPアドレスやホスト名を選択します。ダイアログ下部の[SSL 証明書]のコンボボックスを開きます。ドロップダウンリストが表示され、サーバーに追加してある証明書が表示されます。一覧から、このサイトに設定する証明書を選択します。
設定ができました。ダイアログボックス右下の[OK]ボタンをクリックして設定を確定します。
[サイトバインド]ダイアログに戻ると、httpsサイトのバインドが追加されていることが確認できます。右下の[閉じる]ボタンをクリックしてダイアログボックスを閉じます。
httpsサイトにWebブラウザでアクセスします。証明書のエラー画面が表示されずにサイトが表示できれば正しく設定ができています。
以上で設定は完了です。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。