SSL/TLS(https://)に対応してみてわかったこと、事前に考えておくべき事のまとめ でも一部記載したように、 Let’s Encryptでは、無料のSSL/TLS サーバ証明書を発行してくれます。 ただし、最も信頼度の低いドメイン認証であって、
ドメインは、正しく管理されていますよ。
という程度のものであって、この証明書でなんでも証明してくれるものではありません。
管理している会社が、ちゃんと設立されていて実在するものですよなどという証明は、
企業認証型SSL/TLS サーバ証明書などが必要となります。
ただ、個人管理のサーバなどに導入する場合や、まずは、SSLへの対応を図りたいサイトには、
ドメイン認証型とはいえ、Let’s Encryptて発行してくれるSSL/TLS サーバ証明書は、
無料であることもあり打って付けだと思います。
今回は、その Let’s Encrypt での証明書の発行手続き、自動更新手続き、Nginxへの組み込みを行ってみます。
Let’s Encrypt の仕組みから詳しく知りたい方は、
Let’s Encrypt でACMEプロトコル の箇所から読まれると良いと思います。
設定方法のみで良い方は、そのまま読み進めてくください。
- 目次
- 履歴
2017年8月15日 初版
Let’s Encrypt でドメイン認証型SSL/TLS サーバ証明書を取得してみる
Let’s Encrypt でドメイン認証型SSL/TLS サーバ証明書を発行依頼し、取得するためには、
certbot(以前は、letsencrypt と呼んでいた) というツールを使うことになります。
(これを使わなくとも自前で ACMEプロトコル を使って発行依頼を行い、証明書を取得することも可能ではあります。
ただ、既に正式サポートのツールがあるので、そちらを使う方がメリットは大きいと思います。)
certbot は、
Debian 8では、backports リポジトリ から certbot として、
Ubuntu 16では、通常リポジトリから letsencrypt としてインストールできます。
また、CentOS 6/7 では、epel リポジトリ から certbot としてインストールできます。
このように徐々にではありますが、パッケージインストールできるようになってきました。
ただ、まだまだ、通常リポジトリからのインストールは一般的ではないので、ここでは、gitから最新版をダウンロードし、
certbot をインストールし、ドメイン認証型SSL/TLS サーバ証明書の発行依頼を行い、取得してみます。
certbot をインストールする
ここでは、certbot の最新版を git でインストールしてみます。
(gitがインストールされていない場合は、あらかじめインストールしてください。)
ここでは、/usr/local の配下に certbot をインストールしてみます。
|
ここでの最新バージョンは、0.16 だったので、v0.16.0 としています。
git コマンドが終了すると、certbot が作成されているはずです。
certbot-auto を実行することで、最新版があれば更新され、
必要な他のパッケージがインストールされていないのであれば、自動的にインストールしようとします。
|
上記のように正しくヘルプ情報が出力さればOKです。
certbot で証明書を取得する
certbot で証明書を取得するには、certbot-auto コマンドを使用します。
|
-n
は、--non-interactive
の省略形で、対話形式はなしとしています。
上記の設定がないものは、デフォルトの設定値が利用されます。
もし、仮に、どうしても対話が必要な場合はエラーとなりますが、まず、上記の設定でOKのはずです。
|
|
|
certbot で作成されたディレクトリおよび証明書ファイル一式
ここで発行された証明書は、以下のようなディレクトリ配下へ置かれます。
|
SSL/TLS サーバ証明書をNginxへ設定し、SSL対応してみる
次に、先に取得したSSL/TLSサーバ証明書をnginxへ設定します。
設定は、非常に簡単です。
サーバーの設定ファイルを、ここでは、/etc/nginx/conf.d/exmple.com.conf として解説してみます。
|
この文字色の箇所を編集するだけです。
|
このリンクファイルの指している実態ファイルが切り替わっていくだけなので、nginxの設定は変更しなくて良いようになっています。 うまくできていますね。
編集を終えたら、nginxの再読み込みを実行します。
|
Let’s Encrypt で発行したドメイン認証型SSL/TLS サーバ証明書を更新してみる
Let’s Encrypt で発行したドメイン認証型SSL/TLS サーバ証明書は、最長90日間の証明書の有効期限が設けられています。
そのため、その期限を超えた場合、SSLサーバは、安全な接続とならず、以下のようなメッセージに変わってしまいます。
このように表示されてしまうと、いかにも怪しいサイトのように思われてしまいます。
折角、信頼性および安全性をあげるためのSSL/TLSへの対応だったはずなのに、これでは、何のために対応したのかわからなくなりますね。
そこで、SSL/TLS サーバ証明書の更新を忘れないように自動化することにします。
自動化と言っても、以下のコマンド実行するだけです。
|
上記コマンドの実行で、
更新可能な期限(有効期限が残り30日未満となってから更新の受付可能となります)であれば、自動更新してくれます。
内容は、非常に単純な設定になっています。
|
その更新期限がまだな場合は、以下のようなメッセージが出力されます。
|
また、この更新作業を忘れないよう cronに設定しておきます。
ここでは、/etc/crontab に以下のように追加しました。
|
ここで指定しているパラメータは、それぞれ以下の意味になります。
--no-self-upgrade
: certbotのアップグレードを実行しない
--post-hook
: 証明書の更新を行った場合、以降指定のコマンドを実行する
certbotは、certbot-auto を実行する際に、最新版があれば自動更新しようとします。
ここでは、不用意に更新することで、証明書の更新ができなくなることを避けるために更新しないようにしています。
また、証明書が更新された際は、Nginxの再読み込みを実行するようにし、最新の証明書を読み込ませるようにしています。
Let’s Encrypt では、2回/日の実行を推奨しているようです。
これは、サーバが正しく動作していない場合などに何回でもトライできる十分な可能性を見出すためですが、
ここでは、テスト運用なため 1回/週 の運用にしています。
(おまけ)Let’s Encrypt でACMEプロトコルの話
Let’s Encrypt は、ACMEプロトコルという手順を使って
自動的にSSL/TLS サーバ証明書発行手続きを行っています。
その理解を深めるには、(以降で解説している)色々な用語を理解する必要はありますが、
ここでは、どういった手順で証明書の発行に至るかを
certbot が何をやっていて、
Let’s Encrypt サーバ が何をやっているのかを簡単に解説してみます。
以下の図は、それを概略化したものです。
- CERTBOT> 秘密鍵・CSR生成
- CERTBOT> ACMEプロトコル接続(指定ドメインの証明書要求)
- LETSENC> nonce(認証情報)送信
- CERTBOT> nonce(認証情報)をもとに認証用ファイルを作成(“.well-known/acme-challenge/” 配下になります)し、ウェブサーバー上に設置
- CERTBOT> 認証チャレンジ要求(認証用ファイル設置完了通知)
- LETSENC> HTTPリクエスト(認証チャレンジ実施:指定ドメインの認証用ファイルへアクセスする)
- CERTBOT> HTTPアンサー(ウェブサーバーによる通常のファイル応答)
- LETSENC> 正しく認証ファイルが読めたら、証明書送信
上記のように情報のやりとりを行い、証明書を発行します。
ここでのチェックをみても、DNSのサーバーと発行要求してきたサーバーが同じか否かぐらいのチェックしかしていません。
つまり、これがドメイン認証なんですね。
認証チャレンジように ウェブサーバのルートディレクトリに .well-known というディレクトリが作成されます。
これは、認証チャレンジを終えても残っています。(更新時にも使うから?なのかは不明ながら、今(2017.08)でも残っています。)
これを削除しても大丈夫なのか?はよくわかりません。(たぶん残骸なのではないか思います。)
Let’s Encrypt の無料SSL証明書発行については、いろんなサイトで紹介されていますので、 今さら感は否めませんが、ちょっと、個人的な備忘録もかねて、後でも見てもわかるように書いたつもりです。 ご参考になれば幸いです。
また、以降に用語の解説を少しだけやっていますので、理解を深めたい方は、読まれると良いと思います。
Automatic Certificate Management Environment プロトコルの略で、 直訳すると、自動・証明書・管理・環境 という感じです。
一応、海外のWikiに簡単な解説があったので、そちらを引用しておきます。
ユーザのウェブサーバと認証サーバ間のやりとりを行うための手続きのプロトコルで、 このプロトコルを自動化することで、低コストで公開鍵のインフラを提供することが可能となります。[ 出典 : https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment ]
また、これは、 Let’s Encrypt サービスのためにISRG(Internet Security Research Group)によって設計されたもので、 基本的なやりとりは、HTTPSを介してJSON形式でのやりとりとなっており、 IETF(Internet Engineering Task Force) ワーキンググループによってインターネット上に ドラフト版( 現在(2017.08)では、第7版 [ Automatic Certificate Management Environment (ACME) draft-ietf-acme-acme-07. ] まで出ているようです。) がとして公開されています。
また、SSLサーバ証明書の申請を行う際には、このCSR を SSLサーバ証明書を発行する業者 ( ここでは、Let’s Encrypt ) へ提出(送信)することになります。 (実際には、提供されているツールが、ACMEプロトコルに従い、自動て提出しているので、意識することはほとんどないと思います。)
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :