Let’s Encryptでwindows+nginxでもhttpsを動かす

「保護されていません」が気になってました

でもお金はかけたくない。
調べてみると「Let’s Encrypt」が無料でドメイン証明を作れるとのこと。
これは素晴らしい。やってみましょう。

Windowsの場合は「letsencrypt-win-simple」

やっぱりすくないですよね。
Windows上でNginx動かしてる人。
自分でも何でこういう環境になったのかわからなくなってきてるし・・・
閑話休題。
Windows+Nginxに特化した「Let’s Encrypt」アプリは2017年11月時点では見つけられませんでした。
IIS用の「letsencrypt-win-simple」がGitHubにあり、IIS以外で使う場合もマニュアル設定で対応できるのでこいつを利用します。

A simple ACME client for Windows (for use with Let's Encrypt et al.) - PKISharp/win-acme

使う、、、その前に

「letsencrypt-win-simple」ですが、そのままでは使いにくい場所に証明書ファイルを作成されてしまうので設定ファイルを修正して出力先パスを変更します。設定方法の記述は以下を参照。

A simple ACME client for Windows (for use with Let's Encrypt et al.) - PKISharp/win-acme
<setting name="CertificatePath" serializeAs="String">
  <value>C:\Web\SSL</value>

※ファイルパスは各自適切な場所に変更してください。

letsencrypt.exe にて証明書ファイルをマニュアル作成

選択・入力を順番に書くと

1. N Create New certificate
2. 4 Manually input host name
3. ホスト名を入力、うちなら「gadet.tim6300243.0t0.jp」
4. 3 [http-01] Save file on local (network) path
5. web.config のcopyは「n」を選択
6. Web rootを入力、うちなら「c:\web\うにゃうにゃ。。。」
7. 1 Do not run any installation step
8. タスクを作成するか聞いてくるので「y」w選択
9. 特権で動かすか聞いてくるので環境に合わせて選択

あと、途中でメールアドレス入力とライセンス確認があるはず
(ごめんなさい、初回処理の画面キャプチャしてないのでコメントで)

これで、上記で設定した出力パスに

  • ca-ドメイン名-crt.pem 中間証明書
  • ドメイン名-chain.pem サーバ証明書+中間証明書
  • ドメイン名-crt.pem サーバ証明書
  • ドメイン名-key.pem 秘密鍵

ができます。
nginxで使うのは、「サーバ証明書+中間証明書」「秘密鍵」の2つ

nginx自体の設定

nginx.confにSSLの設定

  • httpポートをhttpsポートにリダイレクト
  • SSL認証の設定
    server{
         listen 80;
         server_name bookmark.tim6300243.0t0.jp;
         return 301 https://bookmark.tim6300243.0t0.jp$request_uri;
    }

    server{
        listen 443 ssl http2;
        client_max_body_size 20M;

        ssl_certificate        \PATH名\gadget.tim6300243.0t0.jp-chain.pem;
        ssl_certificate_key    \PATH名\gadget.tim6300243.0t0.jp-key.pem;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_prefer_server_ciphers on;

    残りのServerの設定
    }

wordpressの設定

設定内容の変更

設定→一般の以下のhtmlアドレスをhttpsに変更

  • WordPress アドレス (URL)
  • サイトアドレス (URL)

記事内の文言一括修正

過去に投稿している記事内のリンクをhttp→httpsに変更。
手作業は面倒くさい&漏れるので「Search Regex」というプラグインを利用
「ツール → Search Regex」より以下を入力。
Replaceで確認して、Replace&Saveで実行。

  • Source:Post content(デフォルト)
  • Limit to:No limit(デフォルト)
  • Order By:Ascending(デフォルト)
  • Search pattern:http:ほにゃらら(うちなら、gadget.tim64300243.0t0.jp)
  • Replace pattern:https:ほにゃらら(〃)
  • Regex:選択不要