ラージビッグバナー(970x90)

Linux

Redmine を 外部公開したときに Let's Encrypt でSSL化してみた

更新日:

ビッグバナー(piglog)728px

タイトルの通りですが、社内で利用するRedmineサーバを外部公開したついでにSSL化して、その際のサーバ証明書を無料のLet's Encryptを使用することにしました。メモがてら証明書作成・実装から自動更新設定までを紹介します。

Let's Encrypt 導入

環境は以下です。

・CentOS7.2
・Apache 2.4.6

今回、プライグインはWebroot プラグインを使用します。

プラグインは、サーバ証明書を

  • どのように取得するか
  • どのようにインストールするか

その方法によってどのプラグインを使うかを決めます。Webroot以外には、Apache/Nginx/Standalone/manual などがあります。

Webrootプラグインは、サーバ証明書取得・更新時に動作中のWebサーバを停止する必要はありませんが、証明書を取得するドメインを運用しているWebサーバ上で取得・更新処理を実行する必要があります。詳しい説明は以下。

https://letsencrypt.jp/docs/using.html#webroot

certbot のインストール

SSL・TLS証明書の取得はCertbotクライアントをインストールする必要があります。

epel リポジトリの追加後にyumでインストールが可能です。

証明書の取得

証明書の取得は以下のコマンドで可能です。

certonly で証明書取得のみとなります。

--webroot でプラグインを指定します。

-w(--webroot-path) でドキュメントルートを指定します。

-d でドメインを指定します。

コマンドを実行すると、メールアドレスの入力を求められるので、何かあったときの通知先メールアドレスを入力します。その後、そのメールアドレスを共有してもよいか聞かれるので、Y or N を入力します。

しばらくすると以下のようにサーバ証明書や秘密鍵の取得が完了します。

/etc/letsencrypt/live/DomaiName/ というディレクトリにサーバ証明書などへのシンボリックリンクが保存され、実体は、/etc/letsencrypt/archive/DomaiName/ に保存されます。

シンボリックリンクが作成されるのは、詳しくは後述しますが、更新時に実体のファイルが、1,2,3.pem…と連番で作成されるためです。(ssl.conf の証明書設置パスを変更する必要がない)

設定ファイル編集

証明書を発行できたので、設定ファイルに設置パスを記述します。今回はApacheへの設定となります。

設定を反映します。

以上で反映されているはずです。https://DomainName へアクセスして証明書を確認してみます。

更新

Let's Encrypt のサーバ証明書は有効期限が3ヶ月となっているため、結構短いスパンでの更新が必要となります。が、自動更新の機能がサポートされています。便利ですね。

以下のコマンド1発で更新が可能です。

実行したところ、「まだ、更新される予定ではありません」とのことでスキップされてしまった。。。

調べてみると、有効期限が残り30日未満でないと更新されないらしい。ただ、強制オプションがあるので試してみた。

出力されたメッセージを見ると無事に更新されたようなので、取得した実体ファイルを見てみると、末尾に2と付いたファイル群が出来上がってますね。

次にリンクの向き先を見てみると、しっかり末尾2のファイルに向いています。

そして、Webブラウザで確認してみると、、、証明書の有効期間が変わっていません。(10日ほど前に実装したので日付は変わるはずなのに。。。)

そういえば、Apacheの再起動をしていませんでした。設定ファイルを変更したわけではないので、忘れてました。。。

再起動後、Webで確認すると、ちゃんと有効期限が更新されていました。

じゃあ、定期的にCronで回すとしても、スクリプトにはApacheのリスタートも書かないといけないなぁ、と思っていたらありましたよ便利なオプションが。

--post-hook というオプションで証明書更新後に実行するコマンドを指定できます。ちなみに、--pre-hook を使用すると更新の前に実行するコマンドを指定できます。これは、更新時にWebサーバの停止が必要になる Standalone プラグインを使用する場合に使うみたいですね。今回は停止不要の Webroot プラグインを使用しているので、--post-hook のみを使用します。

実行した結果抜粋が以下。ちゃんと更新されてリスタートも実行されているようです。実体のファイルも末尾が3で作成されていました。リンクの向き先も変更されていました。

自動更新

Cronで実行するタイミングですが、毎週1回日曜日の夜間くらいに実行させておけばよいと思います。実行させるコマンドは以下。

強制しないことで、有効期限が30日未満となった際だけ更新されます。--post-hook オプションで指定するApacheリスタートコマンドも更新されるときにしか実行されません。

逆に、強制にしてしまうとタイミングの計算が面倒ですし、更新のし過ぎは、取得数の制限に引っかかってしまうこともあるようです。1サイト程度では大丈夫なようですが、余計な負荷はかけたくないですね。制限についての詳細は以下。

https://letsencrypt.jp/faq/#RateLimiting

以上です。
↓↓↓ 持っていると便利な一冊。

 

pig-log_ディスプレイ横長

リンクユニット(レスポンシブ)

-Linux
-, , , ,

Copyright© ぴぐろぐ , 2024 All Rights Reserved.