SSL 証明書について
Let’s encrypt は ドメイン認証 です。
組織認証 や EV認証 はできません。
ウェブサイトで使用するSSL証明書の発行方法
Certbot クライアントの準備(CentOS7)
インストール(webrootプラグインを利用)
yum install certbot トランザクションの要約 ======================================================================================================================================================= インストール 1 パッケージ (+24 個の依存関係のパッケージ) 総ダウンロード容量: 3.5 M インストール容量: 16 M Is this ok [y/d/N]: y Downloading packages: (1/25): pyOpenSSL-0.13.1-4.el7.x86_64.rpm | 135 kB 00:00:00 ******************************************************************** (25/25): pytz-2016.10-2.el7.noarch.rpm | 46 kB 00:00:00 ------------------------------------------------------------------------------------------------------------------------------------------------------- 合計 2.1 MB/s | 3.5 MB 00:00:01 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : python2-pyasn1-0.1.9-7.el7.noarch 1/25 ******************************************************************** インストール中 : certbot-1.9.0-1.el7.noarch 25/25 検証中 : python-idna-2.4-1.el7.noarch 1/25 ******************************************************************** 検証中 : python2-cryptography-1.7.2-2.el7.x86_64 25/25 インストール: certbot.noarch 0:1.9.0-1.el7 依存性関連をインストールしました: 完了しました!
テスト実行(方法)
OS のパッケージ管理システムから Certbot パッケージをインストールした場合:
certbot Saving debug log to /var/log/letsencrypt/letsencrypt.log Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.
SSL/TLS サーバ証明書の取得
補助スクリプトの作成
スクリプト作成
# 例:hoge.example.com の場合 vi /etc/lets-encrypt-hoge-example-com.sh
lets-encrypt-hoge-example-com.sh
#!/bin/sh # 証明書のドメイン(,区切りで複数のドメインも指定可能) DOMAIN=hoge.example.com # ドキュメントルート(上のドメインで接続可能である必要がある) WEBROOT=/home/example/public_html # メールアドレス(トラブル時にメールが届く) EMAIL=hoge@example.com certbot certonly -m $EMAIL --agree-tos --non-interactive $* --webroot -w $WEBROOT -d $DOMAIN
証明書の取得テスト
cd /etc ./lets-encrypt-hoge-example-com.sh --test-cert chmod 700 lets-encrypt-hoge-example-com.sh
テスト実行結果
./lets-encrypt-hoge-example-com.sh --test-cert Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator webroot, Installer None Starting new HTTPS connection (1): acme-staging.api.letsencrypt.org Obtaining a new certificate Performing the following challenges: http-01 challenge for hoge.example.com Using the webroot path /home/example/public_html for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/hoge.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/hoge.example.com/privkey.pem Your cert will expire on 2018-02-05. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.
本番用の証明書を取得
cd /etc ./lets-encrypt-hoge-example-com.sh --force-renewal
本番実行結果
./lets-encrypt-hoge-example-com.sh --force-renewal Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator webroot, Installer None Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org Renewing an existing certificate Performing the following challenges: http-01 challenge for hoge.example.com Using the webroot path /home/example/public_html for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/hoge-example-com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/hoge-example-com/privkey.pem Your cert will expire on 2018-02-05. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
証明書発行のポイント
テスト用の証明書を取得する
--test-cert
オプションを与えることで、テスト専用のサーバに接続する。
ここで取得できる証明書は無効なだが、certbotが正しく動作するか、ドメインの設定等が間違っていないか、まずこの段階で確認しておくこと。
webrootプラグインを使用する
certbot自体をWebサーバとして機能させる、standaloneプラグインもあるが、利用するケースは限られるはずである。
動作確認でも、実際の運用でも、webrootプラグインの使用を推奨する。
証明書の確認・反映
取得した秘密鍵・証明書・中間証明書のファイルは、デフォルトでは以下のディレクトリに配置される。
取得した秘密鍵・証明書・中間証明書のファイル
/etc/letsencrypt/live/${DOMAIN}/
確認
cd letsencrypt/ ls -l 合計 0 drwx------ 4 root root 82 11月 8 00:40 accounts drwx------ 3 root root 30 11月 8 00:37 archive drwxr-xr-x 2 root root 62 11月 8 00:41 csr drwx------ 2 root root 62 11月 8 00:41 keys drwx------ 3 root root 30 11月 8 00:37 live drwxr-xr-x 2 root root 35 11月 8 00:41 renewal drwxr-xr-x 5 root root 43 11月 8 00:09 renewal-hooks cd live/ ls -l 合計 0 drwxr-xr-x 2 root root 93 11月 8 00:41 hoge.example.com
- privkey.pem … 秘密鍵
- cert.pem … 証明書
- chain.pem … 中間証明書
- fullchain.pem … 証明書と中間証明書を連結したファイル
Apacheでの設定方法
バージョン2.4.7以前の場合
httpd.conf
cd /etc/httpd/conf.d SSLEngine on SSLCertificateFile /etc/letsencrypt/live/hoge.example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/hoge.example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/hoge.example.com/chain.pem
バージョン2.4.8以降の場合
ssl.conf
cd /etc/httpd/conf.d SSLEngine on SSLCertificateFile /etc/letsencrypt/live/hoge.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/hoge.example.com/privkey.pem
httpd.confを修正した後、httpdを再起動します。
CentOS 7の場合
systemctl restart httpd.service
表示の確認
対象ドメインがブラウザで表示されるか確認します。
https://hoge.example.com/
運用のポイント
常に同じパスで最新版を参照できる
これらのファイルはすべてシンボリックリンクで、それぞれ最新版の実体ファイルにリンクされています。
証明書を更新しても、ファイルパスを変更する必要はない。
実体のファイルは /etc/letsencrypt/archive/${DOMAIN} 以下に、番号付きのファイル名で保存されています。
fullchain.pemの使い方
fullchain.pem には、証明書と中間証明書の両方が含まれています。
# 要するにこういうことになります cat cert.pem chain.pem > fullchain.pem
SSLを利用するソフトウェアの中には、中間証明書を設定する項目がないものもあります。
例えば nginx、Postfix、Dovecotなど。
そのような場合には、この fullchain.pem を証明書ファイルとして指定します。
証明書の更新
以下のようなスクリプトを、cronで毎日〜週に1回程度の頻度で実行します。
cronでの実行頻度については、User Guide によれば毎日〜毎週、All Instructiosによれば1日に2回が推奨とのこと。
期限が近い証明書がなければ、特に何もしないので、さほど神経質になる必要はありません。
–post-hook オプションの引数は、使用しているOS/ソフトウェアに合わせて変更する必要があります。
cron の設定
certbot renew -q --no-self-upgrade --post-hook "service httpd reload"
更新のポイント
renewサブコマンドを使う
renew を実行すると、これまでに取得した全ての証明書の期限がチェックされ、30日以内に期限が切れるものを自動的に更新します。
証明書の取得時に使用したオプションは
/etc/letsencrypt/renewal/${DOMAIN}.conf
というファイルに保存されており、更新時にはこの設定が使用されます。
変更が必要なら、このファイルを修正しましょう。
–force-renewal オプションは使用しない
–force-renewal オプションは、残り期限にかかわらず、強制的にすべての証明書を更新します。不要な負荷をかけることになるので、cronでの実行時には指定してはいけません。let’s encryptの使用量制限に引っかかる可能性もあります。
証明書の再読み込みには –post-hook オプションを使う
–post-hook で指定したコマンドは、証明書の更新が行われた場合にのみ、1度だけ実行されます。更新が行われなかった場合は実行されません。ここでWebサーバの再読み込み処理を実行すると良いでしょう。
Let’s Encrypt証明書を削除する方法
Let’s Encrypt証明書を手動で削除する方法
発行したLet’s Encrypt証明書を削除するには、以下のディレクトリにあるファイルを削除すれば、証明書が削除することができます
/etc/letsencrypt/archive/{ドメイン名}
/etc/letsencrypt/renewal/{ドメイン名}.conf
/etc/letsencrypt/live/{ドメイン名}
手動削除
rm -rf /etc/certbot/archive/hoge.example.com/ rm -rf /etc/certbot/live/hoge.example.com/ rm -rf /etc/certbot/renewal/hoge.example.com.conf
Let’s Encrypt 証明書を対話式のコマンドで削除する方法
certbot-auto コマンドや、certbot コマンドでは、deleteオプションを使うことで個別証明書(ドメイン)ごとに削除することが可能です。
コマンドを実行すると削除できる証明書が表示されるので、削除する証明書の番号を選択することで削除できます。
※番号を選択せずに「Enter」キーをおしたら、全ての証明書が削除されますので、削除する前には証明書をバックアップすることを推奨します。
対話式コマンドでの手動削除
# letsencryptフォルダごと、/var/tmp などにコピーしてバックアップ cp -pr /etc/letsencrypt /var/tmp certbot delete Saving debug log to /var/log/letsencrypt/letsencrypt.log Which certificate(s) would you like to delete? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: hoge.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The following certificate(s) are selected for deletion: * redmine.example.com Are you sure you want to delete the above certificate(s)? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Deleted all files relating to certificate redmine.example.com.
メールサーバーで使用するSSL証明書の発行方法
メールサーバーの場合
接続の保護:SSL/TSL
ポート:465
で接続する場合、証明書が必要となります。
証明書の発行要求
発行対象ドメイン:mail.example.com
※メールクライアントで指定するメールサーバのFQDN(Fully Qualified Domain Name)と合わせます。
証明書発行したいドメインの 443ポート を公開しているサーバで、以下のコマンドを実行します。
Webサーバが起動していると certbot コマンドはエラーになりますので、一時的にWebサーバを停止してから実行します。
ここでは Apache が起動していることとします。
systemctl stop httpd.service
certbot コマンドで証明書を発行します。
certbot certonly --standalone -d mail.example.com Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org Requesting a certificate for mail.example.com Performing the following challenges: http-01 challenge for mail.example.com Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mail.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/mail.example.com/privkey.pem Your certificate will expire on 2024-08-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
無事発行できました。
できあがった証明書を確認します。
ls -al /etc/letsencrypt/live/mail.example.com 合計 8 drwxr-xr-x 2 root root 93 5月 31 03:29 . drwx------ 19 root root 4096 5月 31 03:29 .. -rw-r--r-- 1 root root 692 5月 31 03:29 README lrwxrwxrwx 1 root root 39 5月 31 03:29 cert.pem -> ../../archive/mail.example.com/cert1.pem lrwxrwxrwx 1 root root 40 5月 31 03:29 chain.pem -> ../../archive/mail.example.com/chain1.pem lrwxrwxrwx 1 root root 44 5月 31 03:29 fullchain.pem -> ../../archive/mail.example.com/fullchain1.pem lrwxrwxrwx 1 root root 42 5月 31 03:29 privkey.pem -> ../../archive/mail.example.com/privkey1.pem
/etc/letsencrypt/live/mail.example.com ディレクトリに証明書の実体が保存されます。
今回は各ファイルの松の数字が1ですが、証明書が更新されるごとに、各ファイルの数字が1つずつ繰り上げられます。
証明書の設定をする場合は、シンボリックリンクが登録されている最新の証明書ディレクトリになります。
ls -al /etc/letsencrypt/live/mail.example.com 合計 8 drwxr-xr-x 2 root root 93 5月 31 03:29 . drwx------ 19 root root 4096 5月 31 03:29 .. -rw-r--r-- 1 root root 692 5月 31 03:29 README lrwxrwxrwx 1 root root 39 5月 31 03:29 cert.pem -> ../../archive/mail.example.com/cert1.pem lrwxrwxrwx 1 root root 40 5月 31 03:29 chain.pem -> ../../archive/mail.example.com/chain1.pem lrwxrwxrwx 1 root root 44 5月 31 03:29 fullchain.pem -> ../../archive/mail.example.com/fullchain1.pem lrwxrwxrwx 1 root root 42 5月 31 03:29 privkey.pem -> ../../archive/mail.example.com/privkey1.pem
Was this helpful?
0 / 0