Let's Encryptでなんと!?ワイルドカード証明書がサポート!!
無料で使える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利用できるってのは魅力だと思います!!
でわでわ