Let's Encrypt (certbot) でワイルドカード証明書できた！



## はじめに

先日、

* [Let's Encrypt (certbot) を使ってワイルドカード証明書する！(あとちょっと)](https://qiita.com/chamaharun/items/9b8c00d14c05c025febd)

という記事を書きまして、Qiitaでの初投稿であったにも関わらず5000以上のアクセス、100いいねを頂きました。
投稿時点ではちゃんとワイルドカード証明書が発行できたと思っていたのですが、実際はまだステージングの段階で無効な証明書しか発行されないというツッコミを頂きまして、ドキュメントの読み込み不足・検証不足を痛感し記事に追記したところであります。

ところがやっと、

* [ACME v2 Production Environment & Wildcards](https://community.letsencrypt.org/t/acme-v2-production-environment-wildcards/55578)

「ACME v2エンドポイントがProductionEnvironmentとして利用可能になった」というアナウンスがあり、

* [ACME v2 Compatible Clients](https://letsencrypt.org/docs/client-options/#acme-v2-compatible-clients)

対応クライアント一覧にcertbotが入っていたので、もう一度検証してみることにしました。

## 結論

* 警告が出ない、ちゃんとしたワイルドカード証明書が発行される**←NEW**
* ~~yumで入るcertbotはまだ古い(2018/03/14 04:30 JSTごろ)~~
* **↑yumでインストールできる最新版0.23.0でワイルドカード証明書発行できました(2018/05/13現在)**
* ACME v2 のエンドポイントは明示的な指定が必要

## Let's Encryptでワイルドカード証明書を取得するまで

### 検証環境

* CentOS7.4

### yumでcertbot入れて試してみた
epelが必要だった気がする

```bash
[root@wildcard ~]# yum -y install certbot --enablerepo=epel
```
普通にDNS認証でやってみる→失敗

```bash
[root@wildcard certbot]# certbot certonly --manual \
-d *.charakoba.com -m <メールアドレス> --agree-tos --manual-public-ip-logging-ok \
--preferred-challenges dns-01
Wildcard domains are not supported: *.charakoba.com
```
嫌な予感がする

```bash
[root@wildcard ~]# yum list installed | grep certbot
certbot.noarch                          0.21.1-1.el7                    @epel   
python2-certbot.noarch                  0.21.1-1.el7                    @epel 
```
バージョンが古かった

**yumでインストールできる最新版0.23.0でワイルドカード証明書発行できました。gitでの操作は必要ありません。(2018/05/13追記)**

### gitで落としてくる

Release 0.22.0 ってコミットメッセージが入ってます。しかも6日前。
<img width="987" alt="スクリーンショット 2018-03-14 5.18.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/104051/ec5e0062-ba95-72c5-f08f-ca128282af3a.png">

クローンする

```bash
[root@wildcard ~]# yum install git
[root@wildcard ~]# git clone https://github.com/certbot/certbot.git
[root@wildcard ~]# cd certbot/
```
前回の記事のコマンドから不要な部分を削って実行してみます

```bash
[root@wildcard certbot]# ./certbot-auto certonly --manual \
-d *.charakoba.com -m <メールアドレス> --agree-tos --manual-public-ip-logging-ok \
--preferred-challenges dns-01
```
APIサーバのエンドポイントのデフォルトは古いままのようです。

```bash
Obtaining a new certificate
The currently selected ACME CA endpoint does not support issuing wildcard certificates.
```

ACMEv2本番用である` https://acme-v02.api.letsencrypt.org/directory ` をエンドポイントに指定して再度実行します。

```bash
[root@wildcard certbot]# ./certbot-auto certonly --manual \
-d *.charakoba.com -m <メールアドレス> --agree-tos --manual-public-ip-logging-ok \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory
```
ちゃんとTXTレコードが表示されました。

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

abCePnd_c652hTidebzC_UOtX-lkV2AjtG4YD8Xzp5k

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
```

これをDNSサーバに登録して、何かキーを押すと、証明書が発行されます。

```bash
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/charakoba.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/charakoba.com/privkey.pem
   Your cert will expire on 2018-06-11. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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
```

## 検証
nginxで適当にWEBサーバを建てて、証明書の検証をしてみました。

<img width="355" alt="スクリーンショット 2018-03-14 4.57.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/104051/136e5dee-ba0f-5e8c-8ca3-06af168e24e7.png">

特に警告が出ることもなく、緑色の鍵が表示されています。

<img width="612" alt="スクリーンショット 2018-03-14 4.58.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/104051/0edf0f7c-3c97-578e-e1a0-8dbc257e3f2b.png">

発行者の名称の部分も、ステージングAPIでは ` Fake LE Intermediate X1 ` となっていましたが、ちゃんと正規の ` Let's Encrypt Authority X3 ` となっています。

## さいごに

ねむいです。著書買ってくださると励みになります。

[イラスト図解でよくわかる ITインフラの基礎知識](https://www.amazon.co.jp/dp/4774196002)