無料で使えるSSLで有名な、Let's Encryptいつの間にかワイルドカード証明書が利用できるようになったので、その手順を載せました!! 今回の手順は、対象のWEBサーバで直接certbotを利用して、インストールしたわけではなく、amazon linuxで証明書作成専用のサーバを構築してcertbotを実行した手順書になります。おそらくワイルドカード証明書を選択するくらいなので、わざわざ、それごとに、certbotは入れないだろうと思いつつw
ご参考になれば。。

Let's Encrypt ワイルドカード証明書サポート
2018年1月にワイルドカード証明書の発行を開始 - Let's Encrypt 総合ポータル
2018年03月13日に、「ACME v2 プロトコル」と「ワイルドカード証明書」が利用可能になりました。詳しくは ワイルドカード証明書と ACME v2 へ対応 および ACME v2 とワイルドカード証明書の技術情報をご覧ください。
。。とのことなので早速実験!!
前準備作業
まあ、すでに入っているとは思うのですが、念のため、事前設定も書いておきます。また、certbotは最新のものをインストールしたほうが良いので、gitから取得しております
gitのインストール
# yum install git
certbotのインストール
# git clone https://github.com/certbot/certbot.git
実行時、以下のようなエラーになった場合
# git clone https://github.com/certbot/certbot.git Cloning into 'certbot'... error: SSL connect error while accessing https://github.com/certbot/certbot.git/info/refs?service=git-upload-pack fatal: HTTP request failed
上記のようなエラーが発生した場合、nss curl libcurlをアップデートしてみてください
# yum update -y nss curl libcurl
を実行し、git cloneを。。
certbot実行
それでは、本題のcertbotを実行します。ドメインの部分は任意の設定に直してください。また今回は、amazon linuxでのcertbot実行なので、 --debug オプションを追加しておりますが、centos,redhatなどは、このオプションは(たぶん)必要ありません
ワイルドカードの指定は、-d *.test-test-123-123-domain.com で指定している箇所です
# cd certbot/ # ./certbot-auto certonly --manual -d *.test-test-123-123-domain.com -m jdkajaskdjiasiodou@gmail.com --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --debug
実行時、以下のような画面で止まります。 certbotを開発する組織ですか?とか、emailを共有したいですか?ってきているので(私は) Nを選択しました(すんません
Plugins selected: Authenticator manual, Installer None ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: N Obtaining a new certificate Performing the following challenges: dns-01 challenge for test-test-123-123-domain.com
txtレコードを追加
おのおの環境、管轄のDNSの設定にtxt recordを追加します
------------------------------------------------------------------------------- Please deploy a DNS TXT record under the name _acme-challenge.test-test-123-123-domain.com with the following value: EDCXjapW2I68W0qMGA6Ktl16s-iB5Ue5eUwbReJgRbw Before continuing, verify the record is deployed. -------------------------------------------------------------------------------
うまくいけば、こんな画面がでます
Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/test-test-123-123-domain.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/test-test-123-123-domain.com/privkey.pem Your cert will expire on 2018-06-13. 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" - 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
ssl設定後のディレクトリ構成
設定が完了すると、以下のようなディレクトリができあがっているはずです
# tree
/etc/letsencrypt
├── accounts
│ └── acme-v02.api.letsencrypt.org
│ └── directory
│ └── aab4e53dc9373abde967482032badbb1
│ ├── meta.json
│ ├── private_key.json
│ └── regr.json
├── archive
│ └── test-test-123-123-domain.com
│ ├── cert1.pem
│ ├── chain1.pem
│ ├── fullchain1.pem
│ └── privkey1.pem
├── csr
│ ├── 0000_csr-certbot.pem
│ └── 0001_csr-certbot.pem
├── keys
│ ├── 0000_key-certbot.pem
│ └── 0001_key-certbot.pem
├── live
│ └── test-test-123-123-domain.com
│ ├── README
│ ├── cert.pem -> ../../archive/test-test-123-123-domain.com/cert1.pem
│ ├── chain.pem -> ../../archive/test-test-123-123-domain.com/chain1.pem
│ ├── fullchain.pem -> ../../archive/test-test-123-123-domain.com/fullchain1.pem
│ └── privkey.pem -> ../../archive/test-test-123-123-domain.com/privkey1.pem
├── renewal
│ └── test-test-123-123-domain.com.conf
└── renewal-hooks
├── deploy
├── post
└── pre
上記にて利用するファイルは、
├── archive │ └── test-test-123-123-domain.com │ ├── cert1.pem │ ├── chain1.pem │ ├── fullchain1.pem │ └── privkey1.pem
なので、このファイルを対象のhttpサーバに転送する
webサーバ側の設定
httpd(apache)側での設定
上記で転送が完了したサーバに以下のディレクトリを設定し、そこに放り込みました
# mkdir -p /etc/ssl # cd /etc/ssl # cp -a /tmp/*.pem . # pwd ; ls /etc/ssl cert1.pem chain1.pem fullchain1.pem privkey1.pem
ssl.confに上記ファイルを設定
# vi /etc/httpd/conf.d/ssl.conf ------------------------- SSLCertificateFile /etc/ssl/cert1.pem SSLCertificateKeyFile /etc/ssl/privkey1.pem SSLCertificateChainFile /etc/ssl/chain1.pem
httpdを再起動
# /etc/init.d/httpd restart
nginx の設定
これがちょっとよくわからなかったのですが、以下の設定をすることによって出来ました
DH(Diffie-Hellman)鍵生成
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
ssl.conf
serverセクションに以下を記述
cd /etc/nginx/conf.d/
vi ssl.conf
-----------------------------------------
server {
listen 443;
server_name host1.test-test-123-123-domain.com;
ssl on;
charset UTF-8;
ssl_certificate /etc/nginx/ssl/fullchain1.pem;
ssl_trusted_certificate /etc/nginx/ssl/chain1.pem;
ssl_certificate_key /etc/nginx/ssl/privkey1.pem;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_session_timeout 1d;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
再起動
apache同様、設定が終わったら再起動してください
sslが有効になっているか確認
上記にて、httpsが正常に再起動されましたら、ブラウザからhttps:// でアクセスし、証明書が有効になっているか確認します。

いかがでしょうか?意外と簡単にワイルドカード証明書ができあがったのではないかと思います。 なお、写真の通り、3ヶ月で有効期限がきてしまいますので、こちら更新しないといけないのが手間ですが、それでも、無償でSSL利用できるってのは魅力だと思います!!
でわでわ