Let's encrypt SSL証明書更新 Debian nginx

# 概要
Let's encrypt で取得したSSL証明書を更新する。
Debian 9.3(strech) + nginx + certbot

<2019/4/15追加>
最後に「ワイルドカード証明書の更新」を追加

# エグゼクティブサマリー
```shell
sudo certbot renew --nginx
```
その後、Apache2サーバ再起動で完了。めっちゃ心配な方は別の方の記事をご参照。

# ブラウザから証明書を確認
Google Chromeの場合。


1. 鍵マークらへんをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/242137/60b0186c-0525-6236-3576-a8e4fcb18719.png)


2. 「証明書」の「有効」をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/242137/2d00a7b5-8d68-c86e-77e4-d6317fb419ee.png)


3. ウィンドウが開くので、そのウィンドウの「詳細」タブをクリック
下記画像は加工してあります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/242137/7afafc15-f2a4-8c38-379e-e63ad89489b6.png)


4. 有効期限が伸びてたらOK
Let's encryptは3カ月有効期限なので、1ヵ月以上あれば問題なし。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/242137/909570a4-65d1-2111-3d7e-f9857562403e.png)


# ログ

1.Debian の Version 情報を表示（不要）

```shell
forte@nsx:~% cat /etc/debian_version
9.3
```

2.入ってるcertbotパッケージの情報　

```shell
forte@nsx:~% dpkg --list | grep certbot
ii  certbot                          0.10.2-1                       all          automatically configure HTTPS using Let's Encrypt
ii  python-certbot                   0.10.2-1                       all          main library for certbot
ii  python-certbot-nginx             0.10.2-1                       all          Nginx plugin for Certbot
```

3.certbotヘルプ

```shell
forte@nsx:~% certbot --version
certbot 0.10.2

forte@nsx:~% certbot --help

  certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
cert. The most common SUBCOMMANDS and flags are:

obtain, install, and renew certificates:
    (default) run   Obtain & install a cert in your current webserver
    certonly        Obtain or renew a cert, but do not install it
    renew           Renew all previously obtained certs that are near expiry
   -d DOMAINS       Comma-separated list of domains to obtain a cert for

  (the cerbot apache plugin is not installed)
  --standalone      Run a standalone webserver for authentication
  --nginx           Use the Nginx plugin for authentication & installation
  --webroot         Place files in a server's webroot folder for authentication
  --manual          Obtain certs interactively, or using shell script hooks

   -n               Run non-interactively
  --test-cert       Obtain a test cert from a staging server
  --dry-run         Test "renew" or "certonly" without saving any certs to disk

manage certificates:
    certificates    Display information about certs you have from Certbot
    revoke          Revoke a certificate (supply --cert-path)
    delete          Delete a certificate

manage your account with Let's Encrypt:
    register        Create a Let's Encrypt ACME account
  --agree-tos       Agree to the ACME server's Subscriber Agreement
   -m EMAIL         Email address for important account notifications

More detailed help:

  -h, --help [TOPIC]    print this message, or detailed help on a topic;
                        the available TOPICS are:

   all, automation, commands, paths, security, testing, or any of the
   subcommands or plugins (certonly, renew, install, register, nginx,
   apache, standalone, webroot, etc.)
```

4.既に入ってる証明書の情報を表示（たぶん）
下はすでに更新済みなので、注意。
ほとんどの場合、root権限が必要です（証明書へアクセスできる権限）。

`Expiry Date`が有効期限を表す。

```shell
forte@nsx:~% certbot certificates
The following error was encountered:
[Errno 13] Permission denied: '/var/log/letsencrypt/letsencrypt.log'
If running as non-root, set --config-dir, --logs-dir, and --work-dir to writeable paths.

forte@nsx:~% sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: nsx.jibunno-domain.example.com
    Domains: nsx.jibunno-domain.example.com
    Expiry Date: 2018-06-03 12:21:59+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/nsx.jibunno-domain.example.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/nsx.jibunno-domain.example.com/privkey.pem
-------------------------------------------------------------------------------
```

5.更新する
nginxの場合。
Apacheの場合はオプションなし(--nginx不要）。

下記はすでに更新してしまったので、処理がスキップされてます。
再来月に張り替え予定。

```shell
forte@nsx:~% sudo certbot renew --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/nsx.jibunno-domain.example.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/nsx.jibunno-domain.example.com/fullchain.pem (skipped)
No renewals were attempted.
```


## ワイルドカード証明書の更新
ワイルドカード証明書の場合、取得時と同じく、パラメータを細かく渡す必要あり。DNSチャレンジを通過させる必要がある。
自分の場合、以下のような感じで更新する。

1. 更新コマンドを投入

```
% sudo certbot certonly --manual \
--server https://acme-v02.api.letsencrypt.org/directory \
--preferred-challenges dns \
-d example.com -d \*.example.copm \
-m your-mailaddress@example.com --agree-tos --manual-public-ip-logging-ok
```

2.DNSチャレンジを求められるので、その通りにDNSのレコードを設定する
ログは次回。
私の場合、 ```_acme-challenge``` というサブドメインのTXTレコードの設定を求められます。
注意事項として、チャレンジの文字列表示画面で「DNSレコードの設定が終わったらENTER押してね」と言われますが、このときENTER以外の文字列が混じるとチャレンジの別文字列が表示されます。しかし、初回のチャレンジが有効なようで、次の新しいチャレンジは意味ありません。
　※要はTeraterm等からコピペすると思いますが、ENTER以外の文字をうちこんじゃったら最初からやり直したほうがよいです

3.Apache2設定
certbot certonlyなので、証明書の更新のみになります。更新なので、ほとんどの方は次のステップへ。証明書取得ごとにファイル名・ディレクトリ名変えるなどしている場合はここで設定変更。

4.Apache reload

```
% sudo /etc/init.d/apache2 reload
```

5.ブラウザで証明書の更新を確認

重要。少なくとも、期限が伸びていることを。



以上