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

**こんにちは！**

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

今回は無料SSL証明書のLet'sEncryptの取得、
そして自動更新させる設定を入れてみたいと思います。

参考資料は↓です。
>*[Let'sEncrypt公式ドキュメント_日本語版](https://letsencrypt.jp)*

#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
→ 証明書あたってました！一安心！

#証明書の更新
３か月に一回更新が必要です。更新をお忘れなく！
>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の有効期限は３か月です。
毎回手でコマンド実行してたらメンドクサイですよね～～

**そもそも忘れてまうやろっっ！！怒**

なので、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"
```
- ２日後である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
```

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

**～ ２日後 ～**

###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化しちゃいましょう!
長くなってしまいましたが、お読みいただきありがとうございました！