Edited at

Let'sEncryptの取得&自動更新設定してみた(CentOS7.1&Apache2.4.6)

More than 1 year has passed since last update.

こんにちは!

ファーストサーバtmatsumotです。

今回は無料SSL証明書のLet'sEncryptの取得、

そして自動更新させる設定を入れてみたいと思います。

参考資料は↓です。


Let'sEncrypt公式ドキュメント_日本語版



Let'sEncryptって?


Let's Encrypt は、無料で利用できる自動化されていてオープンな認証局(CA)です。公共の利益を図る目的で Internet Security Research Group (ISRG) が運営しています。


つまり無料でSSL証明書が取得できちゃいます。

僕のサイト、安全なサイトですよ〜ってゆう証明ですね。

アリガタヤ〜〜( ´ ▽ ` )


検証環境について

今回利用するのはIDCFクラウドさんのVMです。

CentOS 7.1

Apache 2.4.6

証明書を取得するにはドメインの準備が必要です。

取得したドメインで検証サーバに接続できるよう、DNSサーバの設定をお忘れなく、、、

この記事の中ではexample.comを取得したと仮定します。

無料でドメインが取得できるサイトもありますよ〜

https://my.freenom.com


ブラウザでコンテンツ表示まで

さて、検証開始です。


Apacheの準備


インストール

[root@example ~]# yum -y install httpd

読み込んだプラグイン:fastestmirror, remove-with-leaves, show-leaves
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ httpd.x86_64 0:2.4.6-67.el7.centos.6 を インストール

{略}

インストール:
httpd.x86_64 0:2.4.6-67.el7.centos.6

依存性関連をインストールしました:
apr.x86_64 0:1.4.8-3.el7_4.1 apr-util.x86_64 0:1.5.2-6.el7 httpd-tools.x86_64 0:2.4.6-67.el7.centos.6 mailcap.noarch 0:2.1.41-2.el7

完了しました!
New leaves:
httpd.x86_64

何も考えずとりあえず起動しちゃいます


起動

[root@example ~]# systemctl start httpd.service


起動状態の確認

[root@example ~]# systemctl status httpd.service

● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 火 2017-12-05 15:23:07 JST; 7s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 34787 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
├─34787 /usr/sbin/httpd -DFOREGROUND
├─34788 /usr/sbin/httpd -DFOREGROUND
├─34789 /usr/sbin/httpd -DFOREGROUND
├─34790 /usr/sbin/httpd -DFOREGROUND
├─34791 /usr/sbin/httpd -DFOREGROUND
└─34792 /usr/sbin/httpd -DFOREGROUND

12月 05 15:23:07 example.com systemd[1]: Starting The Apache HTTP Server...
12月 05 15:23:07 example.com systemd[1]: Started The Apache HTTP Server.


コンテンツの設置

ブラウザからの確認用のコンテンツを設置します

[root@example ~]# cat /var/www/html/index.html

<html>
<head>
<title>lets encrypt test</title>
</head>
<body>
いやーん
</body>
</html>


80番ポートの開放

ブラウザで確認できるよう、ファイアウォールの設定を確認してください。

(デフォルトでは)80番のポートに対し、外部から接続できる必要があります。

※ IDCFの環境ではコンフィグレータにてファイアウォールの設定ができます。


コンテンツ確認

ブラウザからhttp://example.com にアクセス

→ 「いやーん」が表示されます。 (少しイラッとしました)


証明書の設置

Lets'sEncryptを入れるには、Certbotクライアントのインストールが必要です。


Certbotクライアントのインストール

まずは

[root@example ~]# sudo yum install epel-release

読み込んだプラグイン:fastestmirror, remove-with-leaves, show-leaves
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。

{略}

インストール:
epel-release.noarch 0:7-9

完了しました!
New leaves:
epel-release.noarch

次に

[root@example ~]# sudo yum install certbot python-certbot-apache

読み込んだプラグイン:fastestmirror, remove-with-leaves, show-leaves
epel/x86_64/metalink | 6.5 kB 00:00:00
epel | 4.7 kB 00:00:00
(1/3): epel/x86_64/group_gz | 266 kB 00:00:00
(2/3): epel/x86_64/updateinfo | 851 kB 00:00:00
(3/3): epel/x86_64/primary_db | 6.1 MB 00:00:00
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.yz.yamagata-u.ac.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ certbot.noarch 0:0.19.0-1.el7 を インストール

{略}

インストール:
certbot.noarch 0:0.19.0-1.el7 python2-certbot-apache.noarch 0:0.19.0-1.el7

依存性関連をインストールしました:
audit-libs-python.x86_64 0:2.7.6-3.el7 augeas-libs.x86_64 0:1.4.0-2.el7_4.2
checkpolicy.x86_64 0:2.5-4.el7 dialog.x86_64 0:1.2-4.20130523.el7
libcgroup.x86_64 0:0.41-13.el7 libsemanage-python.x86_64 0:2.5-8.el7
mod_ssl.x86_64 1:2.4.6-67.el7.centos.6 policycoreutils-python.x86_64 0:2.5-17.1.el7
pyOpenSSL.x86_64 0:0.13.1-3.el7 python-IPy.noarch 0:0.75-6.el7
python-augeas.noarch 0:0.5.0-2.el7 python-backports.x86_64 0:1.0-8.el7
python-backports-ssl_match_hostname.noarch 0:3.4.0.2-4.el7 python-cffi.x86_64 0:1.6.0-5.el7
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-ndg_httpsclient.noarch 0:0.3.2-1.el7
python-parsedatetime.noarch 0:1.5-3.el7 python-ply.noarch 0:3.4-11.el7
python-pycparser.noarch 0:2.14-1.el7 python-requests.noarch 0:2.6.0-1.el7_1
python-setuptools.noarch 0:0.9.8-7.el7 python-six.noarch 0:1.9.0-2.el7
python-urllib3.noarch 0:1.10.2-3.el7 python-zope-component.noarch 1:4.1.0-3.el7
python-zope-event.noarch 0:4.0.3-2.el7 python-zope-interface.x86_64 0:4.0.5-4.el7
python2-acme.noarch 0:0.19.0-1.el7 python2-certbot.noarch 0:0.19.0-1.el7
python2-configargparse.noarch 0:0.11.0-1.el7 python2-cryptography.x86_64 0:1.7.2-1.el7_4.1
python2-dialog.noarch 0:3.3.0-6.el7 python2-future.noarch 0:0.16.0-2.el7
python2-mock.noarch 0:1.0.1-9.el7 python2-psutil.x86_64 0:2.2.1-3.el7
python2-pyasn1.noarch 0:0.1.9-7.el7 python2-pyrfc3339.noarch 0:1.0-2.el7
pytz.noarch 0:2016.10-2.el7 setools-libs.x86_64 0:3.3.8-1.1.el7

完了しました!
New leaves:
python2-certbot-apache.noarch

これでLet'sEncryptの操作には欠かせない、certbotコマンドが使えるようになります。



Certbotクライアントについて

今回実行する証明書発行のコマンド

certbot certonly --agree-tos --webroot -w /var/www/html/ -d example.com


~ オプションの説明 ~

certonly

SSL/TLS サーバ証明書の取得のみを行います。

証明書のインストール(サーバソフトウェアの設定)は行われません。

--agree-tos

ACME 利用規約に同意します。

このオプションを有効にした場合、過去に利用規約の同意を行ったことがない場合であっても、利用規約の同意を求める画面が表示されません。 (デフォルト: False)

-d DOMAIN もしくは --domains DOMAIN もしくは --domain DOMAIN

SSL/TLS サーバ証明書の取得を申請するドメイン名を指定します。

複数のドメイン名を指定する場合、-d example.jp -d www.example.jp のように -d フラグを複数回指定します。

また、-d example.jp,www.example.jp のようにカンマ( , )で区切ったリストをパラメータとして指定する方法もあります。

(デフォルト: [])

--webroot

Webrootプラグインを使用する


Webrootプラグインとは

apacheを起動した状態で取得したいときに指定するプラグインです。


Certbot クライアントを実行するコンピュータでウェブサーバ(httpd)が動作中であり、ウェブサーバを停止することなく SSL/TLS 証明書を発行したい場合には、Webroot プラグインをご利用ください。


apacheを止めてもいい場合はStandaloneプラグインなどを使った方法もあります。

※Webrootプラグインを使用する場合には、TCP Port80がフルオープン状態であることが必須条件です。

コンテンツの内容次第では、設定ファイル側でアクセス制限をかけた方がいいかもしれませんね。

https://letsencrypt.jp/faq/#IP


証明書取得の実行

では先ほどのコマンドを実行してみます。

[root@example ~]# certbot certonly --agree-tos --webroot -w /var/www/html/ -d example.com

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-v01.api.letsencrypt.org

\-------------------------------------------------------------------------------
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 EFF and
our work to encrypt the web, protect its users and defend digital rights.
\-------------------------------------------------------------------------------
(Y)es/(N)o: N
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
Using the webroot path /var/www/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/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-03-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"
- 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

入りました!


証明書の確認

証明書ファイルの実体はここにあります。

[root@example ~]# ls -l /etc/letsencrypt/archive/example.com/

-rw-r--r-- 1 root root 1789 12月 5 16:12 cert1.pem
-rw-r--r-- 1 root root 1647 12月 5 16:12 chain1.pem
-rw-r--r-- 1 root root 3436 12月 5 16:12 fullchain1.pem
-rw-r--r-- 1 root root 1704 12月 5 16:12 privkey1.pem


~ 設置ファイルの説明 ~

privkey.pem

SSL/TLS サーバ証明書の公開鍵に対応する 秘密鍵 です。

Apache 設定ファイルの SSLCertificateKeyFile や、nginx の ssl_certificate_key で指定します。

cert.pem

SSL/TLS サーバ証明書(公開鍵を含む)です。サーバの証明書のみで、中間証明書などは含みません。

これは、Apache 2.4.8 未満 で使用するファイルで SSLCertificateFile として指定します。

chain.pem

アクセス時にブラウザに提供する必要のある中間証明書です。

SSL/TLS サーバ証明書(cert.pem の内容)は含まれていません。

これは、Apache 2.4.8 未満 で使用するファイルで SSLCertificateChainFile として指定します。

fullchain.pem

SSL/TLS サーバ証明書(公開鍵を含む)と中間証明書の両方が含まれているファイルで、cert.pem と chain.pem の内容が結合されたものです。

これは、Apache 2.4.8 以上 や nginx で使用するファイルです。

Apache 2.4.8 以上の場合は SSLCertificateFile、nginx では ssl_certificate において、このファイルを指定します。

今回はapache-2.4.6の環境なのでfullchain.pemは使いません!

そして、apacheの設定で指定する証明書パスはこちら

[root@example example.com]# ls -l /etc/letsencrypt/live/example.com/

-rw-r--r-- 1 root root 543 12月 5 16:12 README
lrwxrwxrwx 1 root root 36 12月 5 16:12 cert.pem -> ../../archive/example.com/cert1.pem
lrwxrwxrwx 1 root root 37 12月 5 16:12 chain.pem -> ../../archive/example.com/chain1.pem
lrwxrwxrwx 1 root root 41 12月 5 16:12 fullchain.pem -> ../../archive/example.com/fullchain1.pem
lrwxrwxrwx 1 root root 39 12月 5 16:12 privkey.pem -> ../../archive/example.com/privkey1.pem

証明書が更新されるとシンボリックリンクの向き先が最新のものに変更されるようです~


apacheのSSL設定

とりあえず最低限の設定を入れます

[root@example example.com]# cat /etc/httpd/conf.d/vhost.conf

## httpアクセス時の設定 ##
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName example.com
ServerAdmin webmaster@example.com
</VirtualHost>

## httpsアクセス時の設定 ##
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName example.com
ServerAdmin webmaster@example.com

ErrorLog "logs/ssl_error_log"
CustomLog "logs/ssl_access_log" combined

# SSL証明書の設定
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>

apache再起動

[root@example ~]# systemctl restart httpd.service

これでhttps(443番ポート)にアクセスが来たとき、SSL証明書が適用されます。


443番ポートの開放

お忘れなくっ!


証明書の動作確認

opensslコマンドを使って確認します。

[root@example ~]# openssl s_client -connect localhost:443 -servername example.com -showcerts < /dev/null

CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = example.com
verify return:1
---
Certificate chain
0 s:/CN=example.com
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
MIIE+zCCA+OgAwIBAgISA0RiS/fDXHShfvBRwYjWZxvLMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD

{略}

Verify return code: 0 (ok)
---
DONE

エラーはありません。


ブラウザ確認

httpsでアクセスします。

https://example.com

→ 証明書あたってました!一安心!


証明書の更新

3か月に一回更新が必要です。更新をお忘れなく!


Let's Encrypt 認証局が発行する SSL/TLS サーバ証明書の有効期間は、短期間(90日間)です。

少なくとも、3か月に一回は、証明書を更新する必要があります。



更新用のコマンド


certbot renew


上記のコマンドを実行すると、過去に取得した証明書のうち、有効期間の残りが30日未満の証明書が更新されます。更新の際には、プラグインやオプションを明示的に指定した場合を除き、証明書を発行した際に使用したプラグインとオプションが使用されます。


実際の更新に実行するコマンド

証明書更新したあとにapacheの再読み込みも行います。この1行だけでOK!

certbot renew --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"

--post-hook POST_HOOK

証明書を取得・更新する試みが終わった後にシェルで実行するコマンドを指定します。

更新された証明書を配備する目的や、--pre-hook で終了したサービスを起動する目的で使用できます。

これは、証明書を取得・更新する試みが行われた場合のみ実行されます。

検証用で実行するコマンド

今回は検証用に少しオプションを追加します。

certbot renew --force-renew --dry-run --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"

--force-renew

証明書の有効期限の残りを無視して、過去に発行したすべての証明書を強制的に更新することができます。

ただし、すべての証明書の強制更新を毎日行うことは適切ではなく、Let's Encrypt 認証局のレート制限に引っかかってしまう恐れがあります。

--dry-run

テスト用オプション、実際に更新は行いません


更新テスト

検証用で準備したコマンドを実行します。

[root@example ~]# certbot renew --force-renew --dry-run --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"

Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/example.com.conf
-------------------------------------------------------------------------------
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-staging.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for example.com
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/example.com/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/example.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
-------------------------------------------------------------------------------
Running post-hook command: systemctl reload httpd

問題なさそうです。

dryrunなので実際に証明書更新は行いません。

apacheのreloadはちゃんと実行されてますね

[root@example ~]# tail -1 /var/log/messages

Dec 5 18:29:08 example systemd: Reloaded The Apache HTTP Server.


cronによる証明書の自動更新

ようやく終盤戦!

先ほど記載した通り、Let'sEncryptの有効期限は3か月です。

毎回手でコマンド実行してたらメンドクサイですよね~~

そもそも忘れてまうやろっっ!!怒

なので、cronを使って定期的に更新させましょう

ほったらかしてOKになります

ラクチンラクチン~~( ´ ▽ ` )


cronの設定

そもそもcronちゃんと動いてるの?

[root@example ~]# systemctl status crond

● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 火 2017-12-05 13:47:41 JST; 3h 16min ago
Main PID: 9621 (crond)
CGroup: /system.slice/crond.service
└─9621 /usr/sbin/crond -n

12月 05 13:47:41 example.com systemd[1]: Started Command Scheduler.
12月 05 13:47:41 example.com systemd[1]: Starting Command Scheduler...
12月 05 13:47:41 example.com crond[9621]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 28% if used.)
12月 05 13:47:41 example.com crond[9621]: (CRON) INFO (running with inotify support)
12月 05 13:47:41 example.com crond[9621]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

大丈夫でした。

実際の実行スクリプト

毎月の1日、04時00分に実行

00 04 01 * * root /bin/certbot renew --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"

これで毎月証明書の更新確認を行います。

そしてその月に更新期限を迎える場合のみ、実際に証明書を更新します。

これで安心して使い続けられますね!!


検証

一応検証しましょう。

しかし、この記事投稿にも期限があります・・・

cronは2日後に実行させました、お許しください。


現在の時刻確認

[root@example ~]# date

2017年 12月 5日 火曜日 17:10:00 JST


検証用スクリプト

毎月の7日、04時00分に実行

00 04 07 * * root /bin/certbot renew --force-renew --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"


  • 2日後である12月7日に実行させます


  • 本当は更新期限がまだなので--force-renewオプションをつけて無理矢理更新します



設置

cron.d以下にスクリプトを置いておけば実行してくれます。viなどで作りましょう。

[root@example ~]# cat /etc/cron.d/letsencrypt

00 04 07 * * root /bin/certbot renew --force-renew --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"


有効期限確認

更新できたかわかるように現行の有効期限を確認します。

証明書ファイルで直接確認

[root@example example.com]# openssl x509 -noout -dates -in cert1.pem

notBefore=Dec 5 06:12:47 2017 GMT
notAfter=Mar 5 06:12:47 2018 GMT

実際に動いている情報で確認

[root@example example.com]# openssl s_client -connect localhost:443 -servername example.com </dev/null 2>/dev/null |awk '/-----BEGIN CERTIFICATE-----/ , /-----END CERTIFICATE-----/ {print $0;}' |openssl x509 -noout -dates

notBefore=Dec 5 06:12:47 2017 GMT
notAfter=Mar 5 06:12:47 2018 GMT

これで準備万端、2日間待ちます…

~ 2日後 ~


cron実行ログ

動いてます!

[root@example ~]# cat /var/log/cron |grep certbot

Dec 7 04:00:01 example CROND[1877]: (root) CMD (/bin/certbot renew --force-renew --webroot-path /var/www/html/ --post-hook "systemctl reload httpd")


apacheのreload

できてます!

[root@example example.com]# cat /var/log/messages |grep Apache |grep 04:

Dec 7 04:00:09 example systemd: Reloaded The Apache HTTP Server.


証明書ファイル

最新の証明書が入ってます!(新しいものは~2.pemで入ります)

[root@example ~]# ls -l /etc/letsencrypt/archive/example.com/

-rw-r--r-- 1 root root 1789 12月 5 16:12 cert1.pem
-rw-r--r-- 1 root root 1789 12月 7 04:00 cert2.pem
-rw-r--r-- 1 root root 1647 12月 5 16:12 chain1.pem
-rw-r--r-- 1 root root 1647 12月 7 04:00 chain2.pem
-rw-r--r-- 1 root root 3436 12月 5 16:12 fullchain1.pem
-rw-r--r-- 1 root root 3436 12月 7 04:00 fullchain2.pem
-rw-r--r-- 1 root root 1704 12月 5 16:12 privkey1.pem
-rw-r--r-- 1 root root 1708 12月 7 04:00 privkey2.pem


シンボリックリンク

向き先が新しい方に変わってます!

[root@example ~]# ls -l /etc/letsencrypt/live/example.com/

-rw-r--r-- 1 root root 543 12月 5 16:12 README
lrwxrwxrwx 1 root root 36 12月 7 04:00 cert.pem -> ../../archive/example.com/cert2.pem
lrwxrwxrwx 1 root root 37 12月 7 04:00 chain.pem -> ../../archive/example.com/chain2.pem
lrwxrwxrwx 1 root root 41 12月 7 04:00 fullchain.pem -> ../../archive/example.com/fullchain2.pem
lrwxrwxrwx 1 root root 39 12月 7 04:00 privkey.pem -> ../../archive/example.com/privkey2.pem


有効期限

これが肝心です・・・

[root@example example.com]# openssl x509 -noout -dates -in cert2.pem

notBefore=Dec 6 18:00:09 2017 GMT
notAfter=Mar 6 18:00:09 2018 GMT

[root@example example.com]# openssl s_client -connect localhost:443 -servername example.com </dev/null 2>/dev/null |awk '/-----BEGIN CERTIFICATE-----/ , /-----END CERTIFICATE-----/ {print $0;}' |openssl x509 -noout -dates

notBefore=Dec 6 18:00:09 2017 GMT
notAfter=Mar 6 18:00:09 2018 GMT

更新されてますね!

ヤッターーー!!


動作確認

[root@example example.com]# openssl s_client -connect localhost:443 -servername example.com -showcerts < /dev/null

CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = example.com
verify return:1
---
Certificate chain

{略}

Start Time: 1512728207
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
DONE

もちらんブラウザでも反映されてました。

これでcronでの実行も問題ないかと思われます!


結論

とりあえずこれ実行しましょう


証明書取得コマンド

[root@example ~]# certbot certonly --agree-tos --webroot -w /var/www/html/ -d example.com


証明書更新スクリプト

[root@example ~]# cat /etc/cron.d/letsencrypt

00 04 01 * * root /bin/certbot renew --webroot-path /var/www/html/ --post-hook "systemctl reload httpd"


世の中では常時SSL化が進んでおります!!

なるべくお金をかけたくないアナタ!更新するのもめんどくさがっちゃうアナタ!

そんなあなたでもSSL化できます!その後はほったらかしです!

(設置が面倒なんて言わないでくださいね)

ぜひ自分のサイトをSSL化しちゃいましょう!

長くなってしまいましたが、お読みいただきありがとうございました!