Let’s encrypt:運用方法

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

コメントを残す 0

Your email address will not be published.