Let's Encrypt による証明書作成例

無償で TLS証明書を作成できるサービス Let's Encrypt と win-acme v2 を使って、PMailServer2 用の証明書を作成する例です。
下記の例では、win-acme v2.1.5.742.x64.pluggable と OpenSSL を利用しています。

OpenSSL は、http://www.openssl.org/からダウンロードできます。
Win-ACME v2 は https://www.win-acme.com/からダウンロードできます。

注意事項

Let's Encrypt + Win-acme v2 で証明書の取得

  1. ダウンロードした win-acme v2 を解凍して、wacs.exe を起動します。

  2. 新規で作成する場合は、Create new certificate (full options) を選択します。

  3. 手動で作成しますので、Manual Input を選択します。
    続けてコモンネームを聞いてきますので、自分のドメインを入力します。
    ここでは、ドメイン名を入れていますが、これはドメイン名=ホスト名で運用している為です。
    サブドメインがつく場合はサブドメイン名を入力します(例 mail.akisoftware.jp)
    またワイルドカード証明書の取得もできますが、ここでは扱っていません。(DNS が絡む為、説明が更に大変になる為)

  4. フレンドリ名を聞いてきますので設定をするか、そのままエンターを押して、コモンネームと同じにします。
    あとから、PKCS#12 に変更して Windows証明書ストアに入れた後、フレンドリ名は設定できますので、ここではそのままエンターで構いません。

  5. ここまではなんとなく進められる方も多いと思いますが、いきなり難易度が上がった感が出てきます。
    ここでは1番を選択します。
    1番は「Let's encrypt で証明書を発行する際に、その確認用のファイルをサーバーのルートに作成して、そのファイルに Let's Encrypt から http でアクセスをして正しくサーバー管理者から要求された物なのか確認する方法」となります。
    以降を読みますと、意味がわかります。

  6. 5の説明の中にある「確認用のファイル」をサーバーのルートに作成するので、サーバーの Document root へのパスを指定します。
    画像の例では Windows10 上で処理をして、サーバーの Document root をネットワークドライブで接続をしていますので、ドライブレターを含めたフルパスで指定しています。
    やったことは無いのですが、¥¥ServerName¥Documents root のような指定もできそうな気がします。
    例えば、Webサーバー上のルートフォルダが Windows Server の C:¥Apache2¥Document root¥akisoftware.jp だった場合、一時的に サーバーの C:¥Apache2¥Document root¥akisoftware.jp を共有フォルダにして、Windows10 からサーバー上のこのフォルダをネットワークドライブ(Z:)として一時的に割り当てている感じです。
    共有フォルダにするのがイヤな場合は、FTP や WebDav などを使うといいでしょう。

  7. デフォルトの設定をコピーして確認をしますか?と聞いています。(多分)
    y / n どちらを押しても変わらない気がしますが、おそらく、Win-ACME を解凍したフォルダにある、Web_Config.xml とか setting.json や setting_default.json 辺りを使って処理をするんじゃないかなと思います。(事前に書き換えて置くとか?)
    正直、ここの意味がはっきりしなかったので、いつも y を選択しています。

  8. 鍵の暗号化を、楕円曲線暗号か、RSA暗号か、どちらを使うか選択するのだと思います。
    暗号強度は違いますが、証明書としてはどちらを利用しても作れますので、デフォルトの RSA を選択します。

  9. 鍵の暗号化を、楕円曲線暗号か、RSA暗号か、どちらを使うか選択するのだと思います。
    暗号強度は違いますが、証明書としてはどちらを利用しても作れますので、デフォルトの RSA を選択します。

  10. ここでは出力する証明書のフォーマットを選択します。
    PEM encoded files を選択すると、Apache2 にそのまま利用することができます。
    また、PEM ファイルを OpenSSL で PKCS#12(.p12) に変換すると PMailServer2 で利用することができますので、2を選択します。

  11. PEM encoded files を出力するフォルダをフルパスで指定します。
    ここで指定するフォルダはローカルのフォルダにして下さい。
    間違っても6番と同じようにサーバーのルートにアップロードなどはしないで下さい。

  12. おそらくですが、証明書ストアに入れるかどうかの選択だと思いますが、PEM 形式ですので、証明書ストアに追加する作業を行わない3を選択します。

  13. おそらくですが、証明書の更新を外部のスクリプト等で行うか?それとも手動で行うか?の選択だと思います。
    手動で行うので4番を選択します。
    ちなみに Let's Encrypt の証明書は 90日間のみ有効です。約3ヶ月に1回更新が必要となります。
    有効期限が残り30日になると、親切にメールを送ってきてくれますので、手動でも忘れることは余り無いと思います。
    (また既存のスクリプトの場合、PKCS#12 への変換作業はしてくれませんので、結局手動になります)

  14. 暫く通信をした後、指定したフォルダに PEM ファイルが生成されます。
    最後に、自動更新用のスクリプトをタスクスケジューラーに登録するか?を聞いてきますが、No にします。

  15. 指定したローカルフォルダに PEM ファイルが3つできています。
    Apache で利用する場合は、これらのファイルを SSLCertificateFile / SSLCertificateKeyFile / SSLCertificateChainFile などに設定すれば利用可能になります。

PEM ファイルを OpenSSL を使って PKCS#12 に変換


  1. win-acme で生成された3つのファイルを OpenSSL の bin フォルダにコピーします。
  2. コマンドプロンプトを開き、OpenSSL の Bin フォルダに移動したら
    openssl pkcs12 -export -in example.jp-crt.pem -inkey example.jp-key.pem -out example.jp.p12
    を実行します。
  3. Enter Export Password を聞いていますので、必要がなければ空欄、あれば適切なパスワードを入力します。
  4. 処理が終わりましたら、bin フォルダの中に -out で指定した PKCS#12(.p12)が生成されていますので、後は証明書インストールページを参考にして証明書のインストールを行って下さい。

証明書の手動での更新方法

  1. wacs.exe を起動すると、A: Manage renewals がありますので、こちらから更新を行います。
  2. 更新を行うと、最初に指定した PEM を出力したフォルダに更新された PEM ファイルが出来上がりますので、改めてコピーを行う。又は PKCS#12 に変換してインストールを行う等を行って下さい。
1回作成された設定は、デフォルトで C:¥ProgramData¥win-acme¥acme-v02.api.letsencrypt.org の中に保存されています。
別のPCに変更する場合などは、このフォルダをコピーすれば同じように更新ができるようになります。