Edited at

Let's Encrypt (certbot) を使ってワイルドカード証明書する!(あとちょっと)

More than 1 year has passed since last update.


はじめに

最近技術書を書いて、沢山の方に読んで頂いていて大変感謝しております。

その書籍の中でも、無料で手軽に使える証明書として紹介したLet's Encrypt (certbot) ですが、唯一ワイルドカード証明書が発行できないという欠点がありました。

しかしながら以前から予告されていたように、先日やっとワイルドカードに対応したというアナウンス

が出ましたので、早速ワイルドカード証明書を取得してみました。

ところがフツーにやろうとするとエラーになになってしまいます。

[root@localhost ~]# certbot certonly --manual -d *.charakoba.com  --preferred-challenges dns-01

Wildcard domains are not supported: *.charakoba.com

半日に及ぶ試行錯誤の結果、無事取得することができたので、その手順をまとめておきます。


結論


  • PyPIのacme,certbotが古い

  • virtualenvして、pip install、python setup.py installする

  • certbotコマンドでワイルドカード証明書が取得できる。(ただしルート証明書のインストールが必要)


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


検証環境


  • CentOS7.4

  • certbot 0.22.0.dev0


必要なものをインストールする

[root@localhost ~]# yum -y install epel-release git

[root@localhost ~]# yum -y install gcc augeas-libs openssl openssl-devel libffi-devel redhat-rpm-config ca-certificates
[root@localhost ~]# yum -y install --enablerepo=epel python-virtualenv python-tools python-devel


最新版のcertbotを落としてくる

[root@localhost ~]# git clone https://github.com/certbot/certbot.git

[root@localhost ~]# cd certbot


適当にvirtualenvする

[root@localhost certbot]# virtualenv certbottest

[root@localhost certbot]# source certbottest/bin/activate


certbotコマンドを整える

pip install または、python setup.py installで必要なpythonモジュールを入れます。

(certbottest)[root@localhost certbot]# cd ./acme/

(certbottest)[root@localhost acme]# python setup.py install
(certbottest)[root@localhost acme]# cd ../
(certbottest)[root@localhost certbot]# python setup.py install

途中、setuptoolsが古いと怒られたら、アップデートしてあげてください。


(certbottest)[root@localhost certbot]# pip install setuptools --upgrade


証明書発行の準備をする

gitで落としてきたcertbot-auto は、変な場所にvirtualenvしてワイルドカード未対応のモジュールをインストールしようとするので使いません。

以前はwebrootを使っていましたが、ワイルドカードではDNSによる認証しかサポートしないとどっかで聞いたので、--manual--preferred-challenges dns-01 を指定指定してます。

また、デフォルトではAPIサーバのURLが古いので、公式ドキュメントを参考に、ACME2のステージングのサーバURLを指定してみました。

(certbottest)[root@localhost certbot]# certbot certonly --manual -d *.<ドメイン> -m <メールアドレス> --agree-tos \ 

--manual-public-ip-logging-ok --preferred-challenges dns-01 \
--server https://acme-staging-v02.api.letsencrypt.org/directory

3/5昼追記:

ステージングサーバを利用して発行された証明書では Fake LE Root X1というルート証明書のインストールが必要でした。(https://letsencrypt.org/docs/staging-environment/)

やはりACMEv2本番サーバが公開されるまで待つ必要があるようです。

(その頃にはcertbotが対応してそう)


TXTレコードで認証する

うまくいくと以下の用にトークンが表示されますので、DNSサーバにTXTレコードを追加してください。

-------------------------------------------------------------------------------

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

rl7Tm_n2QmwIQ7Lr7vrdQrI03pLK4vfBdhsnLs5C4x8

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


証明書が発行される

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-02. 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


 証明書を検証してみる


適当にNginxでサーバを建てて証明書を検証してみました。



確かにワイルドカードで証明書が発行されています。

ただし、まだ正式な証明書ではないので、警告が表示されてしまいました。



比較のため従来のLet's Encrypt証明書も貼っておきます。


おまけ


GehirnDNSにAPIでTXTレコードを追加する

APIも充実しておりGehirnDNSを愛用しているので、GehirnDNSにTXTレコードを追加する手順も書いておきます。


(certbottest)[root@localhost certbot]# curl --user <Token>:<Secret> --request POST \
https://api.gis.gehirn.jp/dns/v1/zones/<ZoneID>/versions/<VersionID>/records \
--data '{"name":"_acme-challenge","type":"TXT","ttl":30,"enable_alias":false,"records":[{"data”:”<TXTRecord>"}]}'


最後に

証明書の検証が足りてなくてすみませんでした!

疲れました。

本買ってください!!!!


Special thx.