先日、テストサーバー向けのSSL自己証明書の発行手順をご紹介しましたが、実はGoogleChromeでは利用できないことがわかりました。
Chrome58で、HTTPSの自己証明書が NET::ERR_CERT_COMMON_NAME_INVALID になる場合の対応 – TORICO 技術開発ブログ
GoogleChrome バージョン58から、SSL証明書のCN(コモンネーム)欄ではなく、SANと呼ばれる記述内を参照するように仕様変更されました。
そのため、折角オレオレ証明書を発行しても、今までの方法ではChromeからアクセスすると無効なSSL証明書として扱われてしまいます。
対策については、上記のサイトで解説されていますが、見た感じかなり手間がかかりそうだったため、今回は別の方法を使いたいと思います。
以前から紹介している、無料でSSLを発行してくれるサービス、”Let’s Encrypt”ではSSL取得の際の自動認証の手順をプロトコルとしてまとめた”ACME”というものがあります。
Automated Certificate Management Environment – Wikipedia
このACME、現在バージョン2のベータ版が公開されており、正式版も間もなくリリースされる予定にになっています。
この新しいバージョンでは、ワイルドカード証明書の発行がサポートされる予定です。
本物のワイルドカード証明書が入手できるようになるのは正式版を待つ必要があるのですが、一般的に信頼されていないテスト用のCAを用いた”なんちゃって証明書”であれば既に発行することができます。
テスト用の証明書を信頼された証明書として使用するには自己証明書同様にCA証明書をOSにインストールする必要があるのですが、SANの設定などの面倒な部分についてはすべて自動で行ってくれるため、自力で自己証明書を作るよりはかなり楽です。
今回は、こちらの方法を使ってテスト用の証明書を発行してみます。
Let’s EncryptにてACME v2でワイルドカード証明書を発行 – Qiita
curl https://get.acme.sh | sh #本家からacmeインストーラーをダウンロードして実行
インストールに成功すると、実行したユーザーのホームフォルダ内に新しく.acme.shフォルダが生成されます。
cd ~/.acme.sh
で.acme.shフォルダ内に移動します。
この状態で、次のコマンドを実行します。
acme.sh --test --dns --issue -d .example.com #example.comのワイルド証明書発行のテスト
発行テストを行うと、DNSチャレンジレスポンス用のキーが発行されます。
[root@hoge .acme.sh]# ./acme.sh --test --dns --issue -d *.example.com ...省略... [Thu Mar 15 21:25:28 JST 2018] Add the following TXT record: [Thu Mar 15 21:25:28 JST 2018] Domain: '_acme-challenge.example.com' [Thu Mar 15 21:25:28 JST 2018] TXT value: '[チャレンジレスポンス用のキー]' [Thu Mar 15 21:25:28 JST 2018] Please be aware that you prepend _acme-challenge. before your domain [Thu Mar 15 21:25:28 JST 2018] so the resulting subdomain will be: _acme-challenge.example.com [Thu Mar 15 21:25:28 JST 2018] Please add the TXT records to the domains, and retry again. ...省略...
結果の指示通りに、下記のようなレコードを対象のドメインを管理しているDNSサーバーに設定します。
_acme-challenge.example.com IN TXT "[チャレンジレスポンス用のキー]"
これで準備完了です。
実際に証明書を発行してみます
acme.sh --renew -d *.example.com
DNSの設定に誤りがなければ認証に成功し、証明書がインストールされ、証明書のパスが表示されると思います。
現在はテスト発行のみなので、現時点で信頼済みの証明書として利用するにはrootCAのインストールが必要です。
先日ご紹介した手順で、こちらのrootCAをインストールします。
あとは本物の証明書同様にWebサーバーに証明書を設定し、https://でアクセスすればSSL経由でのアクセスができるようになっているかと思います。
なお、今回はドメイン所有権の確認方法にDNSチャレンジレスポンス認証を利用していますが、更新のたびにキーが変わるようで、更新時にDNSへ再設定が必要になります。(Amazon Route53のようなAPI経由でのレコード書き換えに対応したDNSであれば自動化できます。)
ちょっとめんどくさい…という人はwebrootなどの他の認証方式を使うことをお勧めします。
最近はセキュリティの問題などで、SSL周りもかなり複雑になってしまっていますが、ACMEのような仕組みがあると、だれでも簡単に発行ができるので、価格だけでなく使いやすさの面でも役立ちそうですね。
今後本物のワイルドカード証明書の発行が始まっても(おそらく)同じ手順で設定できると思いますので、気になる方は是非試してみてください。