CentOS 7 環境に無料SSL証明書 Let’s Encrypt を導入する

昔、CentOS 6の環境でLet’s Encryptを使おうとしたら割とハマってしまったんですが、今だと大分楽になっているようなので再チャレンジ。

格安のSSL証明書サービスもありますが、無料でスタートできるLet’s Encryptは便利に使えますね。

次回の契約更新の際にさくらのVPSのプランを更新して新しいバージョンのVPSを借りることにしたので、まずはミニマムな512MBプランで環境構築してみました。

Certbot のインストール

[root@os3-392-29368 yuuichi]# yum install certbot python-certbot-apache
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile

epel/x86_64/metalink                                     | 9.9 kB     00:00     
 * base: mirrors.cat.net
 * epel: www.ftp.ne.jp
 * extras: mirrors.cat.net
 * remi-safe: ftp.riken.jp
 * updates: mirrors.cat.net

base                                                     | 3.6 kB     00:00     
extras                                                   | 3.4 kB     00:00     
mariadb-main                                             | 2.9 kB     00:00     
mariadb-maxscale                                         | 2.4 kB     00:00     
mariadb-tools                                            | 2.9 kB     00:00     
remi-safe                                                | 3.0 kB     00:00     
updates                                                  | 3.4 kB     00:00     
remi-safe/primary_db                                       | 1.4 MB   00:00     
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ certbot.noarch 0:0.29.1-1.el7 を インストール
--> 依存性の処理をしています: python2-certbot = 0.29.1-1.el7 のパッケージ: certbot-0.29.1-1.el7.noarch
--> 依存性の処理をしています: /usr/sbin/semanage のパッケージ: certbot-0.29.1-1.el7.noarch
---> パッケージ python2-certbot-apache.noarch 0:0.29.1-1.el7 を インストール
--> 依存性の処理をしています: python2-acme >= 0.25.0 のパッケージ: python2-certbot-apache-0.29.1-1.el7.noarch
--> 依存性の処理をしています: mod_ssl のパッケージ: python2-certbot-apache-0.29.1-1.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ mod_ssl.x86_64 1:2.4.6-88.el7.centos を インストール
---> パッケージ policycoreutils-python.x86_64 0:2.5-29.el7 を インストール
--> 依存性の処理をしています: setools-libs >= 3.3.8-4 のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: libsemanage-python >= 2.5-14 のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: audit-libs-python >= 2.1.3-4 のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: python-IPy のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: libqpol.so.1(VERS_1.4)(64bit) のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: libqpol.so.1(VERS_1.2)(64bit) のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: libcgroup のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: libapol.so.4(VERS_4.0)(64bit) のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: checkpolicy のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: libqpol.so.1()(64bit) のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
--> 依存性の処理をしています: libapol.so.4()(64bit) のパッケージ: policycoreutils-python-2.5-29.el7.x86_64
---> パッケージ python2-acme.noarch 0:0.29.1-1.el7 を インストール
--> 依存性の処理をしています: pyOpenSSL >= 0.13 のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: pytz のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python2-six のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python2-requests のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python2-pyrfc3339 のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python2-pyasn1 のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python2-josepy のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python2-cryptography のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python-requests-toolbelt のパッケージ: python2-acme-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python-ndg_httpsclient のパッケージ: python2-acme-0.29.1-1.el7.noarch
---> パッケージ python2-certbot.noarch 0:0.29.1-1.el7 を インストール
--> 依存性の処理をしています: python2-mock のパッケージ: python2-certbot-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python2-future のパッケージ: python2-certbot-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python2-configargparse のパッケージ: python2-certbot-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python-zope-interface のパッケージ: python2-certbot-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python-zope-component のパッケージ: python2-certbot-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python-setuptools のパッケージ: python2-certbot-0.29.1-1.el7.noarch
--> 依存性の処理をしています: python-parsedatetime のパッケージ: python2-certbot-0.29.1-1.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ audit-libs-python.x86_64 0:2.8.4-4.el7 を インストール
---> パッケージ checkpolicy.x86_64 0:2.5-8.el7 を インストール
---> パッケージ libcgroup.x86_64 0:0.41-20.el7 を インストール
---> パッケージ libsemanage-python.x86_64 0:2.5-14.el7 を インストール
---> パッケージ pyOpenSSL.x86_64 0:0.13.1-4.el7 を インストール
---> パッケージ python-IPy.noarch 0:0.75-6.el7 を インストール
---> パッケージ python-ndg_httpsclient.noarch 0:0.3.2-1.el7 を インストール
---> パッケージ python-requests-toolbelt.noarch 0:0.8.0-1.el7 を インストール
--> 依存性の処理をしています: python-requests のパッケージ: python-requests-toolbelt-0.8.0-1.el7.noarch
---> パッケージ python-setuptools.noarch 0:0.9.8-7.el7 を インストール
--> 依存性の処理をしています: python-backports-ssl_match_hostname のパッケージ: python-setuptools-0.9.8-7.el7.noarch
---> パッケージ python-zope-component.noarch 1:4.1.0-3.el7 を インストール
--> 依存性の処理をしています: python-zope-event のパッケージ: 1:python-zope-component-4.1.0-3.el7.noarch
---> パッケージ python-zope-interface.x86_64 0:4.0.5-4.el7 を インストール
---> パッケージ python2-configargparse.noarch 0:0.11.0-1.el7 を インストール
---> パッケージ python2-cryptography.x86_64 0:1.7.2-2.el7 を インストール
--> 依存性の処理をしています: python-idna >= 2.0 のパッケージ: python2-cryptography-1.7.2-2.el7.x86_64
--> 依存性の処理をしています: python-cffi >= 1.4.1 のパッケージ: python2-cryptography-1.7.2-2.el7.x86_64
--> 依存性の処理をしています: python-ipaddress のパッケージ: python2-cryptography-1.7.2-2.el7.x86_64
--> 依存性の処理をしています: python-enum34 のパッケージ: python2-cryptography-1.7.2-2.el7.x86_64
---> パッケージ python2-future.noarch 0:0.16.0-6.el7 を インストール
---> パッケージ python2-josepy.noarch 0:1.1.0-1.el7 を インストール
---> パッケージ python2-mock.noarch 0:1.0.1-9.el7 を インストール
---> パッケージ python2-parsedatetime.noarch 0:2.4-5.el7 を インストール
---> パッケージ python2-pyasn1.noarch 0:0.1.9-7.el7 を インストール
---> パッケージ python2-pyrfc3339.noarch 0:1.0-2.el7 を インストール
---> パッケージ python2-requests.noarch 0:2.6.0-0.el7 を インストール
---> パッケージ python2-six.noarch 0:1.9.0-0.el7 を インストール
---> パッケージ pytz.noarch 0:2016.10-2.el7 を インストール
---> パッケージ setools-libs.x86_64 0:3.3.8-4.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7 を インストール
--> 依存性の処理をしています: python-backports のパッケージ: python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch
---> パッケージ python-cffi.x86_64 0:1.6.0-5.el7 を インストール
--> 依存性の処理をしています: python-pycparser のパッケージ: python-cffi-1.6.0-5.el7.x86_64
---> パッケージ python-enum34.noarch 0:1.0.4-1.el7 を インストール
---> パッケージ python-idna.noarch 0:2.4-1.el7 を インストール
---> パッケージ python-ipaddress.noarch 0:1.0.16-2.el7 を インストール
---> パッケージ python-requests.noarch 0:2.6.0-1.el7_1 を インストール
--> 依存性の処理をしています: python-urllib3 >= 1.10.2-1 のパッケージ: python-requests-2.6.0-1.el7_1.noarch
---> パッケージ python-zope-event.noarch 0:4.0.3-2.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ python-backports.x86_64 0:1.0-8.el7 を インストール
---> パッケージ python-pycparser.noarch 0:2.14-1.el7 を インストール
--> 依存性の処理をしています: python-ply のパッケージ: python-pycparser-2.14-1.el7.noarch
---> パッケージ python-urllib3.noarch 0:1.10.2-5.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ python-ply.noarch 0:3.4-11.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package                             アーキテクチャー
                                            バージョン               リポジトリー
                                                                           容量
================================================================================
インストール中:
 certbot                             noarch 0.29.1-1.el7             epel  36 k
 python2-certbot-apache              noarch 0.29.1-1.el7             epel 227 k
依存性関連でのインストールをします:
 audit-libs-python                   x86_64 2.8.4-4.el7              base  76 k
 checkpolicy                         x86_64 2.5-8.el7                base 295 k
 libcgroup                           x86_64 0.41-20.el7              base  66 k
 libsemanage-python                  x86_64 2.5-14.el7               base 113 k
 mod_ssl                             x86_64 1:2.4.6-88.el7.centos    base 112 k
 policycoreutils-python              x86_64 2.5-29.el7               base 456 k
 pyOpenSSL                           x86_64 0.13.1-4.el7             base 135 k
 python-IPy                          noarch 0.75-6.el7               base  32 k
 python-backports                    x86_64 1.0-8.el7                base 5.8 k
 python-backports-ssl_match_hostname noarch 3.5.0.1-1.el7            base  13 k
 python-cffi                         x86_64 1.6.0-5.el7              base 218 k
 python-enum34                       noarch 1.0.4-1.el7              base  52 k
 python-idna                         noarch 2.4-1.el7                base  94 k
 python-ipaddress                    noarch 1.0.16-2.el7             base  34 k
 python-ndg_httpsclient              noarch 0.3.2-1.el7              epel  43 k
 python-ply                          noarch 3.4-11.el7               base 123 k
 python-pycparser                    noarch 2.14-1.el7               base 104 k
 python-requests                     noarch 2.6.0-1.el7_1            base  94 k
 python-requests-toolbelt            noarch 0.8.0-1.el7              epel  77 k
 python-setuptools                   noarch 0.9.8-7.el7              base 397 k
 python-urllib3                      noarch 1.10.2-5.el7             base 102 k
 python-zope-component               noarch 1:4.1.0-3.el7            epel 227 k
 python-zope-event                   noarch 4.0.3-2.el7              epel  79 k
 python-zope-interface               x86_64 4.0.5-4.el7              base 138 k
 python2-acme                        noarch 0.29.1-1.el7             epel 146 k
 python2-certbot                     noarch 0.29.1-1.el7             epel 545 k
 python2-configargparse              noarch 0.11.0-1.el7             epel  30 k
 python2-cryptography                x86_64 1.7.2-2.el7              base 502 k
 python2-future                      noarch 0.16.0-6.el7             epel 799 k
 python2-josepy                      noarch 1.1.0-1.el7              epel  87 k
 python2-mock                        noarch 1.0.1-9.el7              epel  92 k
 python2-parsedatetime               noarch 2.4-5.el7                epel  78 k
 python2-pyasn1                      noarch 0.1.9-7.el7              base 100 k
 python2-pyrfc3339                   noarch 1.0-2.el7                epel  13 k
 python2-requests                    noarch 2.6.0-0.el7              epel 2.9 k
 python2-six                         noarch 1.9.0-0.el7              epel 2.9 k
 pytz                                noarch 2016.10-2.el7            base  46 k
 setools-libs                        x86_64 3.3.8-4.el7              base 620 k

トランザクションの要約
================================================================================
インストール  2 パッケージ (+38 個の依存関係のパッケージ)

総ダウンロード容量: 6.3 M
インストール容量: 27 M

証明書の作成

インストールしたcertbotコマンドを実行して、使用するドメイン用の証明書を作成します。

[root@os3-392-29368 html]# certbot certonly --webroot -w /var/www/html/ -d [サーバのドメイン]
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [メールアドレス]
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www2.u-1.net
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-v02.api.letsencrypt.org
IMPORTANT NOTES:
   Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www2.u-1.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www2.u-1.net/privkey.pem
   Your cert will expire on 2019-04-02. 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

Apacheで証明書を使用する設定

証明書各種はデフォルトの設定だと、/etc/letsencrypt/live/[サーバのドメイン]/ 以下に作成されました。
/etc/httpd/conf.d/ssl.conf に証明書のパスを記述してやります。

SSLCertificateFile /etc/letsencrypt/live/[サーバのドメイン]/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[サーバのドメイン]/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/[サーバのドメイン]/chain.pem

その後、Apacheを再起動してやるとHTTPSでアクセスできました。

Let's Encrypt 証明書有効化

証明書更新の手順

証明書は有効期限が90日と短めなので定期的に更新が必要です。
更新自体はシンプルで、

[root@os3-392-29368 yuuichi]# certbot renew

で完了します。導入したての今の時点では実施しても更新はされなかったので、–dry-run オプションを付けてシミュレーションを行ってみます。

[root@os3-392-29368 yuuichi]# certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/www2.u-1.net.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for www2.u-1.net
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/www2.u-1.net/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/www2.u-1.net/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - 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.

大丈夫そう。
あとは、常用するならcronなどに組み込んで定期的に更新させてやれば良さそうですね。

参考

以上、下記サイトを参考にして実施しました。

スポンサーリンク