Let's Encrypt acme-v02 でワイルドカード証明書を作る

環境は
CentOS7.4

# certbot
## インストール

事前にリポジトリを追加する。

```
sudo yum install epel-release
```
実際のインストール

```
sudo yum install certbot
```

## 証明書作成
マニュアルモードで dns-01を指定。 サーバもv02を指定します。

```
sudo certbot certonly --manual --domain *.example.com --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
```
1つ聞かれますが。Yesしておきましょう。

```
Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: y
```

```
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

xxxxxxxxxxxxx

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
```
こんなのが出て来たら、_acme-challenge.example.com というDNSレコードをTXTタイプで作成します。
レコードの作成は、利用するDNSサービスによって異なりますので、各自でなんとかしましょう。
certbot

作成後

```
dig -t TXT _acme-challenge.example.com
```
など、DNSリクエストを行い、設定した内容がきちんと表示されるのを確認しましょう。

確認後、エンターキーを押して待つと、証明書が作成されます。

```
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-06-12. 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
```
こんなメッセージが出て完了しているはず。

秘密鍵は`/etc/letsencrypt/live/example.com/privkey.pem`
証明書(full-chain)は`/etc/letsencrypt/live/example.com/fullchain.pem`
にありますので、利用するサーバなどに応じて配置、シンボリックリンク作成などを行いましょう。

更新は

```
sudo certbot renew
```
で行えます。(証明書期限が近づくと更新してくれます)

これを`/etc/cron.daily/` などに置いて、毎日自動実行させると良いでしょう。

# acme.sh
## インストール

```
curl https://get.acme.sh | sh
source ~/.bashrc
```

インストール先は `~/.acme.sh/` です。





## 証明書作成

```
acme.sh  --issue --dns -d *.example.com
```
とやると、

```
[Wed Mar 14 12:39:44 JST 2018] Add the following TXT record:
[Wed Mar 14 12:39:44 JST 2018] Domain: '_acme-challenge.example.com'
[Wed Mar 14 12:39:44 JST 2018] TXT value: 'xxxxxxxxxxxxxxxxxxxxx'
[Wed Mar 14 12:39:44 JST 2018] Please be aware that you prepend _acme-challenge. before your domain
[Wed Mar 14 12:39:44 JST 2018] so the resulting subdomain will be: _acme-challenge.example.com
[Wed Mar 14 12:39:44 JST 2018] Please add the TXT records to the domains, and retry again.
[Wed Mar 14 12:39:44 JST 2018] Please add '--debug' or '--log' to check more details.
[Wed Mar 14 12:39:44 JST 2018] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
```
のようなメッセージが出て止まりますので、
上から２行目、３行目を見て、
_acme-challenge.example.com というDNSレコードをTXTタイプで作成します。

追加し終わったら

```
dig -t TXT _acme-challenge.example.com
```
など、DNSリクエストを行い、設定した内容がきちんと表示されるのを確認しましょう。

その後、改めて

```
acme.sh  --issue --dns -d *.example.com --renew
```
を実行します。(--renewを追加します、初回でも)

完了すると

```
[Wed Mar 14 12:46:51 JST 2018] Your cert is in  /home/username/.acme.sh/*.example.com/*.example.com.cer
[Wed Mar 14 12:46:51 JST 2018] Your cert key is in  /home/username/.acme.sh/*.example.com/*.example.com.key
[Wed Mar 14 12:46:51 JST 2018] The intermediate CA cert is in  /home/username/.acme.sh/*.example.com/ca.cer
[Wed Mar 14 12:46:51 JST 2018] And the full chain certs is there:  /home/username/.acme.sh/*.example.com/fullchain.cer
```
のようなものが表示されます。
*.example.com.cer が証明書単体、
*.example.com.key が秘密鍵
fullchain.cer がfull-chain証明書です。
利用するサーバなどに応じて配置、シンボリックリンク作成などを行いましょう。

更新は

```
/home/username/.acme.sh/acme.sh  --issue --dns -d *.example.com --renew
```
で行えます。(証明書期限が近づくと更新してくれます)

これを`/etc/cron.daily/` などに置いて、毎日自動実行させると良いでしょう。