Let's Encryptとは

Let's Encrypt 総合ポータル

Let's Encrypt は、無料で利用できる自動化されていてオープンな認証局(CA)です。公共の利益を図る目的で Internet Security Research Group (ISRG) が運営しています。

つまるところ、無償で使えるSSL証明書を提供してくれるオープンな機関です。一般的にHTTPSサイトを実現しようとするとランニングコストがかかってきますが、Let's Encrypt を使えば無償で実現できます。

今回は、IIS(Windows Server)上に、Let's Encrypt で HTTPSサイトを構築する方法を紹介します。本サイトはHTTPSに対応していますが、Let's Encrypt を利用しています。そもそもSSLの仕組みとはなんぞやという人は以下の記事を参照してください。

SSL/TLSとHTTPS通信について

Let's Encryptの導入方法(IIS)

Let's Encrypt を IIS(WIndows)上で利用するには、letsencrypt-win-simple というWindowsで動作するクライアントソフトウェアを利用する方法があるので紹介します。

検証環境

  • WindowsServer 2012R2
  • IIS 8.5

letsencrypt-win-simpleのダウンロード

letsencrypt-win-simple

上記URLから最新バージョンのリリースをダウンロードします。導入時の最新バージョンは、1.9.1でした。

letsencrypt-win-simpleのダウンロード

ダウンロードしたzipファイルを展開すると、中身はこんな内容です。

letsencrypt-win-simpleの内容

letsencrypt.exeが本体なのでこれをコマンドプロンプトから実行していきます。

実行前の準備

実行前にローカルのWebサイトのパスの直下に、「/.well-known/acme-challenge」のフォルダを作成しておきます。そして作成したフォルダ内に、ダウンロードした諸々のファイルの中にある、「Web_Config.xml」をコピーして、ファイル名を「web.config」にして保存しておきましょう。

webconfigの用意

この、web.configファイルは次のような内容で、フォルダ内のファイルへのアクセスを可能にする設定を行っています。

web.config
<?xml version="1.0" encoding="UTF-8"?>

<configuration>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <staticContent>
      <mimeMap fileExtension="." mimeType="text/json" />
    </staticContent>
  </system.webServer>
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</configuration>

これで証明書を取得する準備ができました。

証明書を取得する

解凍したフォルダを適当な場所に置いておきます。今回は、C:\letsencrypt\letsencrypt-win-simple.V1.9.1 に置いておきます。

コマンドプロンプトを管理者権限で起動し、上で保存した場所に移動します。

cd C:\letsencrypt\letsencrypt-win-simple.V1.9.1
ディレクトリの移動

移動したら下記の書式で環境に合わせて letsencrypt.exe を実行します。

書式
letsencrypt --accepttos --manualhost <Webサイトの完全修飾ドメイン名> --webroot <ローカルのWebサイトのパス>
具体例
letsencrypt --accepttos --manualhost www.webbibouroku.com --webroot C:\hoge\webbibouroku

実行すると処理が始まり、初回の場合はメールアドレスの入力を求められますので入力して続行します。実行前に準備したフォルダが正しく作成されていて、web.configファイルが用意されていれば、エラーなく処理が続きます。

次のようなエラーになっていれば、正しくフォルダが作成できていないか、web.configが間違っているので、ファイルを用意してから再度実行すればOKです。

初回実行時のエラー内容

正常に認証できれば証明書が取得でき、保存されます。さらに証明書の更新タスクがタスクスケジューラに登録されます。

その際に、更新タスクを実行する特定のユーザーを別途指定するか聞かれます。実行したユーザーと同じ(この例だとはAdministrator)でよいのでNoを選びます。

Do you want to specify the user the task will run as?

実行ユーザーの指定

これで完了です。取得した証明書は以下のフォルダに保存されています。

C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org

証明書の保存先

サイトのHTTPS設定

ここまででサーバ証明書の取得とIISへの証明書の追加は済んでいます。なので後はサイトにHTTPS通信の設定を行う必要があります。それが済めば晴れてHTTPSでサイトを表示させられるはずです。

IISで左のツリーから対象のサイトを選択し、右の操作メニューの「バインド...」をクリックします。

IISサイト設定

サイトバインドにhttpsの設定を追加しないといけません。追加ボタンを押してhttpsのサイトバインドを追加します。証明書はプルダウンの候補に追加された証明書があるはずですのでそれを選択します。。

IISサイト設定

設定は以上で完了です。https~のURLで表示を確認してみましょう。証明書の内容も確認してみると、期限は3か月になっていることが確認できました。

ブラウザで証明書確認

確認

IIS

IISへの証明書の追加等も、letsencrypt-win-simple は自動でしてくれています。IISを起動し左側のツリーでサーバを選択し、右の各機能から「サーバー証明書」をダブルクリックして確認すると、証明書がIISにも追加されているのが確認できます。

IISのサーバー証明書 IISに追加された証明書

タスクスケジューラ

証明書の更新タスクのバッチが証明書取得と同時にスケジューラへ登録されています。それも確認しておきましょう。

タスクスケジューラを起動し、左のツリーでタスクスケジューラライブラリを選択すると、タスクの一覧が中央に表示されます。その中に、letsencrypt-win-simple httpsacme-v01.api.letsencrypt.org という名前のタスクがあります。

letsencrypt.exe --renew --baseuri "https://acme-v01.api.letsencrypt.org/"

このタスクは、デフォルト状態で上記コマンドを毎日9時に実行するものです。毎日更新処理が走るので、翌日にでも証明書の期限を再度ブラウザから確認すれば、正常に動作しているか確認できます。

以上です。