letsencryptの運用

#certbot設定
証明書発行失効更新などなどはcertbotを使って行います。便利。
設定ミスなんかでトライ回数が多いと1週間ペナルティを食らうので、注意。
too manyなんちゃらみたいなエラーがでたら、その時は素直に後日リトライしましょう。
エラーのとしては、nginxの設定ファイル証明書のパスを記述したまま実行したり、証明書の設定を記述しないままnginx起動とかです。（よくやる

### certbotのインストール

```
$ sudo wget https://dl.eff.org/certbot-auto -O /usr/local/certbot-auto
$ sudo chmod a+x /usr/sbin/certbot-auto
```
### nginxの停止
nginxの設定ファイルに余計なSSLの記述がないか確認する。
あればコメントアウト。

```
$ sudo service nginx stop
```

###証明書のインストール
letsencryptではSANを利用した複数ドメインへのインストールが可能。その場合は"-d ドメイン"を併記する。
e.g. hoge.com,www.hoge.com
コケるときはnginxの設定ファイルを確認。nginxを停止させた状態で実行する。
※ただし、SANなので後からドメイン追加する場合は証明書を都度再発行となる。
※ドキュメントルートが別サブドメインは都度発行。
e.g. blog.hoge.com

```
$ sudo certbot certonly --webroot-path /var/www/hoge.com/html -d hoge.com -d www.hogehoge.com -m hoge@gmail.com

Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
```

上手く行けばCongratulations!みたいなメッセージが出ます。
作成した証明書とパスを確認。

```
$sudo certbot certificates
-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: hoge.com
    Domains: hoge.com www.hoge.com
    Expiry Date: 2019-09-15 14:06:29+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/hoge.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/hoge.com/privkey.pem
```


###nginxの設定追記
こちらも各々の環境で。
vhostで運用してる場合はconf.dに入れてると思う。

```
$ sudo vi /etc/nginx/conf.d/hoge.com.conf
```
下記をserverディレクティブ内に追記
※必ずドメイン列記すること。".hoge.com"や"*.hoge.com"の表記はNG

```
server {
        server_name hoge.com www.hoge.com;
      （省略）
        listen 443　ssl;
        ssl_certificate     /etc/letsencrypt/live/hoge.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
}
```


###サービス再起動
起動でコケるときはnginxの設定ファイルを見直してください。

``` 
$ sudo service nginx restart
```

#自動化
90日で期限が切れてしまうので、週1程度自動更新を設定します。
letsencriptは残り30日以内になると更新される。
下記コマンドは事前に通るかチェックしておくが吉。

```
$ crontab -e
```

毎週月曜1時に実行します
※左から、「分」「時」「日」「月」「曜日」

```
0 1 * * 1 root /usr/local/certbot-auto renew --force-renewal && service nginx restart
```


#証明書とドメイン設定の削除
証明書の失効、設定削除は下記。
また、アーカイブに以前のドメイン設定が残ってたまま、証明書を再作成すると、"hoge.com-0001"みたいな名前の設定が作られて気持ち悪い。
そういうときは、下記のコマンドでドメイン設定ごと消してからやる。
ただし、追記したnginxのconfファイルは手動で消す。

```
$ sudo certbot delete -d hoge.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
 
Which certificate would you like to delete?
---------------------------------------------------------------------
1: hoge.com
2: hoge.com-0001
---------------------------------------------------------------------
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1
 
---------------------------------------------------------------------
Deleted all files relating to certificate example.com.
---------------------------------------------------------------------
```

#その他気をつけること
・letsencryptではワイルドカードドメイン指定はできない。明示的にドメイン指定する必要がある
e.g. *.hoge.com　→ wp.hoge.com

・うまくいかない場合は意図しない箇所にletsencryptがnginxの設定に追記していないか確認したり。
$ grep server_name /etc/nginx/conf.d/*