無料でSSL証明書が入手できるサービスLet’sEncryptをCentOS7+Nginx環境に導入しました。2016年4月にLet’sEncryptサービスがスタートして話題になっていることは知っていましたがそれ以前に無料対応していたstartSSLを使用していましたので乗り換える必要性を感じていませんでした。
しかし、FireFoxのバージョンアップに伴いStartSSLを正当な証明書と認めなくなったようでStartssl証明書を使用していた当Blogがエラーになってしまいました。それならとLet’sEncryptに乗り換えることにしました。
前提は、CnetOS7+nginx環境+独自ドメインでhttp,httsポートが開いていること。入力したドメイン名を正引きできること。
1.インストール
epelリポジトリを導入していない場合はインストールします。
1 |
# yum install epel-release |
本体をインストールします。
1 |
# yum install certbot python-certbot-apache |
*nginxの場合、python-certbot-apacheは不要です。
2.実行
実行する前に、certbotがPORT80とPORT443を使用できるようにNginxを停止します。
1 |
# systemctl stop nginx |
認証対象サーバにgtrt7.comとwww.gtrt7.comを指定して実行します。
1 |
# certbot certonly --standalone -d gtrt7.com -d www.gtrt7.com |
メールアドレスを入力します。
Let’s Encrypt の利用規約(Terms of Service)に同意して先に進みます。
サーバ証明書の取得完了メッセージ。
3.証明書の入手
(1)証明書の保存場所
証明書は以下のディレクトリに作成されます。下記ドメイン名は最初に設定した認証対象サーバ名(ここではgtrt7.com)になります。-dオプションで追加指定した(www.gtrt7.com)ディレクトリは作成されません。
保存ディレクトリ | 格納対象 |
---|---|
/etc/letsencrypt/archive/ドメイン名/ | 証明書の実体 |
/etc/letsencrypt/live/ドメイン名/ | 最新証明書へのシンボリックリンク |
確認します。
1 2 3 4 5 6 7 8 9 10 |
# ls -la /etc/letsencrypt/archive/gtrt7.com -rw-r--r-- 1 root root 1801 Jan 28 20:39 cert1.pem -rw-r--r-- 1 root root 1647 Jan 28 20:39 chain1.pem -rw-r--r-- 1 root root 3448 Jan 28 20:39 fullchain1.pem -rw-r--r-- 1 root root 1704 Jan 28 20:39 privkey1.pem # ls -la /etc/letsencrypt/live/gtrt7.com lrwxrwxrwx 1 root root 33 Jan 28 20:39 cert.pem -> ../../archive/gtrt7.com/cert1.pem lrwxrwxrwx 1 root root 34 Jan 28 20:39 chain.pem -> ../../archive/gtrt7.com/chain1.pem lrwxrwxrwx 1 root root 38 Jan 28 20:39 fullchain.pem -> ../../archive/gtrt7.com/fullchain1.pem lrwxrwxrwx 1 root root 36 Jan 28 20:39 privkey.pem -> ../../archive/gtrt7.com/privkey1.pem |
証明書は更新するごとに名前が変わりますが、シンボリックリンクの名前は変更されません。特に理由がなければNginxのconfファイルにはシンボリックリンク名を指定するのが推奨です。3か月毎に証明書が更新されてもconfファイルは変更せずに済みますので。
(2)nginxで使用する証明書
①サーバ証明書と中間証明書が結合されたファイル
証明書はssl_certificate ディレクティブで指定します。
1 2 3 4 |
#サーバ証明書と中間証明書が結合されたファイル /etc/letsencrypt/archive/ドメイン名/fullchainN.pem #最新更新のシンボリックリンンク /etc/letsencrypt/live/ドメイン名/fullchain.pem |
②秘密鍵
秘密鍵はssl_certificate_key ディレクティブで指定します。
1 2 3 4 |
#更新毎にNが1ずつUP /etc/letsencrypt/archive/ドメイン名/privkeyN.pem #最新更新のシンボリックリンンク /etc/letsencrypt/live/ドメイン名/privkey.pem |
4.自動更新の設定
証明書の有効期限は3ケ月なので自動更新の設定をします。毎週日曜日の4時30分に更新前にnginxを停止し更新したらnginxを起動します。更新の結果をroot宛にメールしてきます。
スクリプトを作成します。
1 2 3 4 5 |
[root@gtrt7 ~]# vi /root/certbot_run.sh #!/bin/bash PATH=/usr/bin:/bin #更新結果をメールで送信 certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"|mail -s "certbot run comlete at `hostname`" root 2>/dev/null |
スクリプトに実行権限を与えます。
#chmos +x /root/certbot_run.sh
cronに登録し毎週日曜日の朝4:30に起動されるようにします。
1 2 |
vi /etc/cron.d/certbot 30 4 * * 0 /root/certbot_run.sh |
certbot renewは–dry-run の引数を指定すると証明書の更新をせずに終了します。動作確認時に使用するとサーバに余計な負荷をかけずに確認がとれますのでお勧めです。
5.参考にさせて頂いたサイト
ありがとうございます。