Database JUNKY

MySQL,MariaDBを中心としたブログです

Let's Encryptでなんと!?ワイルドカード証明書がサポート!!

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

ご参考になれば。。

f:id:hit10231023:20180316002008j:plain

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:// でアクセスし、証明書が有効になっているか確認します。

f:id:hit10231023:20180316001759j:plain

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

でわでわ

hit.hateblo.jp