116
104

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-04

はじめに

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

その書籍の中でも、無料で手軽に使える証明書として紹介した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](https://qiita-image-store.s3.amazonaws.com/0/104051/ebe74386-2d33-59da-bccf-5e3fe6aad308.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.

116
104
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
116
104

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?