Let’s Encryptでワイルドカード証明書を運用するときのメモ

久々に小ネタでも投稿してみようと思ふ

ここ最近、社内の様子は頻繁にご紹介しておりましたが、「そういえば技術ネタってしばらく投稿していなかったな」とふと思いまして……。

お昼休みの時間を使って、ここ最近個人的にハマった小ネタをテーマに書いてみようかと思います。

誰でもいつでも自由にSSLサーバ証明書がゲットできる!Let’s Encrypt!

さて、Let’s Encryptというサイト/サービスはご存じでしょうか?

Let’s Encrypt – Free SSL/TLS Certificates

Let’s Encrypt is a free, automated, and open certificate authority brought to you by the non-profit Internet Security Research Group (ISRG).

過去には有料でしか手に入らなかったSSLサーバ証明書を、無料でお手軽に誰でも自由に手に入るようゴニョゴニョしてくださっている非営利団体ですね1)ドメイン認証なSSLサーバ証明書だけですが

2016年4月にサービスがスタートしてから、大手企業や団体などのスポンサードを受けつつ、多くの人たちを救ってきた(?)このサービス!非公式ではあるものの日本語のサポートサイトなどもあるので、多くの方がご利用中のことと思います。

つい最近、ワイルドカード証明書に対応したのもあり、どんどん便利になってきましたね〜。

導入も簡単!

Let’s Encryptからサーバ証明書を取得するのも非常に簡単!

  • certbot-autoをダウンロード2)OSによってはパッケージが用意されていることもあるよ!
  • Webサーバを適切に設定3)この時点ではhttp onlyでOKし、certbot-autoを適切なオプションで実行
  • 画面の指示に従ってゴニョゴニョ
  • 無事取得できたらWebサーバに設定し再起動などをおこなう
  • cronとかで自動的に更新されるよう設定4)90日間の有効期限しかないので

……って感じでやればOKと、非常にお手軽ですよね〜。

あ、もうちょっと細かい手順が知りたい方は、下記をご参照ください。

Getting Started – Let’s Encrypt – Free SSL/TLS Certificates

To enable HTTPS on your website, you need to get a certificate (a type of file) from a Certificate Authority (CA). Let’s Encrypt is a CA. In order to get a certificate for your website’s domain from Let’s Encrypt, you have to demonstrate control over the domain.

Let’s Encrypt の使い方 – Let’s Encrypt 総合ポータル

当サイトは、無料 SSL/TLS 証明書発行サービス Let’s Encrypt の非公式解説サイトです。 This is an unofficial website about Let’s Encrypt.

ワイルドカード証明書もお手軽にゲットできる!

先に述べた通り、ワイルドカード証明書——ホスト/サブドメイン部分がなんであってもOKなサーバ証明書にも対応したので、同一サーバ内で複数サブドメインを運用するときなんか、だいぶ楽になりましたよね。

導入方法は(少なくとも現時点では and/or ボクが知る限りにおいては)ちょっと特殊な操作が必要ですが、コマンドひとつタイプするだけでOKです。

ボクは下記のQiitaなエントリを参考にさせていただきました。

Let’s Encrypt (certbot) でワイルドカード証明書できた! – Qiita

先日、 という記事を書きまして、Qiitaでの初投稿であったにも関わらず5000以上のアクセス、100いいねを頂きました。 投稿時点ではちゃんとワイルドカード証明書が発行できたと思っていたのですが、実際はまだステージングの段階で無効な証明書しか発行されないというツッコミを頂きまして、ドキュメントの読み込み不足・検証不足を痛感し記事に追記したところであります。 ところがやっと、 「ACME v2エンドポイントがProductionEnvironmentとして利用可能になった」というアナウンスがあり、 対応クライアント一覧にcertbotが入っていたので、もう一度検証してみることにしました。 警告が出ない、ちゃんとしたワイルドカード証明書が発行される←NEW yumで入るcertbotはまだ古い(2018/03/14 04:30 JSTごろ) ACME v2 のエンドポイントは明示的な指定が必要 epelが必要だった気がする 普通にDNS認証でやってみる→失敗 嫌な予感がする バージョンが古かった Release 0.22.0 ってコミットメッセージが入ってます。しかも6日前。 クローンする 前回の記事のコマンドから不要な部分を削って実行してみます APIサーバのエンドポイントのデフォルトは古いままのようです。 ACMEv2本番用である https://acme-v02.api.letsencrypt.org/directory をエンドポイントに指定して再度実行します。 ちゃんとTXTレコードが表示されました。 これをDNSサーバに登録して、何かキーを押すと、証明書が発行されます。 nginxで適当にWEBサーバを建てて、証明書の検証をしてみました。 特に警告が出ることもなく、緑色の鍵が表示されています。 発行者の名称の部分も、ステージングAPIでは Fake LE Intermediate X1 となっていましたが、ちゃんと正規の Let’s Encrypt Authority X3 となっています。 ねむいです。著書買ってくださると励みになります。 イラスト図解でよくわかる ITインフラの基礎知識

一応、コマンドを載せておきますと……

certbot-auto certonly --manual -d *.example.com -m mailaddr@example.com --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

……って感じです。

これだけで「*.example.com」なサーバ証明書がゲットできるので、「www.example.com」でも「service.example.com」でも「ramentabetai.example.com」でもなんでもHTTPSで立ち上げられるようになるわけです。

地味な落とし穴が……

で、喜んでいたんですけど、ひとつ重大な問題が……。

それは「example.com」——ホスト/サブドメインが指定されていない「ドメイン名 Only」な場合には使えない証明書となっているということ。

実際に設定してみて、「https://example.com/」にアクセスしてみると……下記のようになってしまいます。

MacなChromeの場合

MacなFirefoxの場合

MacなSafariの場合

……え?ああ、そうなんだ……へぇ…… _ノ乙(、ン、)_

普通のサイト5)ところで、普通ってなんなんでしょうねぇ……(遠い目)だったら、例えば「www.example.com」のようなHTTPSなサイトにリダイレクトかけちゃえば問題ないんでしょうけど、HSTS (HTTP Strict Transport Security) の設定とかしてるとリダイレクト前にエラーになっちゃったりするので……6)ボクが設定ミスっていたり勘違いしている可能性もあるけど

ちょっとマズイですよね。うん。

解決策は単純

まあ、これは深刻な問題では全くないんで、シンプルに解決することができます。

「*.example.com」で指定して発行されたサーバ証明書が「example.com」には対応していない……って話なので、「example.com」に対応するように指定してあげればOK。

具体的なコマンドで言えば、下記のような感じでしょうか。

certbot-auto certonly --manual -d example.com -d *.example.com -m mailaddr@example.com --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

元々、certbot-autoは「-d」オプションで複数のドメインを指定できたので……。その要領で追加してあげればいい……って感じっぽいです。

将来の自分のためにメモを残しておきます

……と、きっと将来の自分がおんなじところでミスる気がしてならないので、自分用のメモって意味も込めてブログに書き記しておきます。

あ、「もっと良い方法あるよ〜」とか「そこ間違ってるよ〜」とかあれば、ぜひぜひツッコんでくださいm(_ _)m

注訳はこちら   [ + ]

1. ドメイン認証なSSLサーバ証明書だけですが
2. OSによってはパッケージが用意されていることもあるよ!
3. この時点ではhttp onlyでOK
4. 90日間の有効期限しかないので
5. ところで、普通ってなんなんでしょうねぇ……(遠い目)
6. ボクが設定ミスっていたり勘違いしている可能性もあるけど
Yuta Hayakawa

Yuta Hayakawa執行役員

投稿者プロフィール

2016年6月入社。社内システムチームの全体統括担当として、東京本社にて本社業務を行っている。第5期(2019年12月1日)より執行役員に就任。日本語の能力を活かし、さまざまな分野の業務に携わる。

エンジニアとしての専門分野はGNU/LinuxやPHPのあたり。セキュリティにも興味を持っており、某IT系ニュースサイトにて連載経験があるのが密かな自慢。

プライベートではDTMを嗜んでおり、セール時を中心にプラグインを買いあさるのが日課。ハムスターと生活しており、愛らしい姿に日々癒されている。下手ではあるものの、ゲームもそこそこ楽しむ方。

この著者の最新の記事

関連記事

コメントは利用できません。

募集中!(o゜▽゜)o

エンジャパン
求む、社長!
follow us in feedly

コッチもヨロシク!



最近のネタ!

  1. 2019-12-7

    お小遣いを握りしめてガチャガチャをしにいく話【Agent Grow Advent Calendar 2019:7日目】

    (さらに…)…
  2. 2019-12-6

    2019年度エージェントグロー全社員総会の様子+二次会

    2019年度エージェントグロー全社員総会 さる2019年11月15日 (金) に行われました全社員…
  3. 2019-12-6

    ゲーム性があれば飽き性でも運動できた!【Agent Grow Advent Calendar 2019:6日目】

    この記事はAgent Grow Advent Calendar 2019 6日目の記事です。 はじ…
  4. 2019-12-5

    現代社会を生きる人々に贈るスッキリ映画5選【Agent Grow Advent Calendar 2019:5日目】

    この記事は Agent Grow Advent Calendar 2019 :5日目の記事です。…
  5. 2019-12-4

    来年の干支にちなんで世界の珍しいネズミと動物園をご紹介【Agent Grow Advent Calendar 2019:4日目】

    来年はネズミ年です。 この記事は Agent Grow Advent Calendar 2019 …
ページ上部へ戻る

当サイトに掲載されているコンテンツ(文書、画像等)は、許可なく複製・転用等する事を禁じます。

「フェアネス方式®」(登録6150741)は、日本国内における株式会社エージェントグローの登録商標です。

当サイトでは最低限必要と考えられる場合において、会社名/サービス名/商品名などを記載している場合があります。
これらはあくまでも説明の必要性に応じて用いているものであり、各社の権利等を侵害を目的とするものではございません。
不適切と考えられる場合には、当社お問い合わせフォームよりご連絡ください。

当サイトでは®や™などの表記を省略させていただいております。