Help us understand the problem. What is going on with this article?

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でサーバを建てて証明書を検証してみました。

スクリーンショット 2018-03-05 12.05.25.png
確かにワイルドカードで証明書が発行されています。
スクリーンショット 2018-03-05 12.14.49.png

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

スクリーンショット 2018-03-05 12.16.07.png
比較のため従来の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.

chamaharun
とあるインフラ会社でホスティングサービスの運用などをしてます。 自宅ラック / Zabbix / Ansible などが好き。k8sに入門してる。 「イラスト図解でよくわかる ITインフラの基礎知識」 http://amzn.asia/6uzjAor
http://chamaharun.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした