概要
WebサーバーでのHTTPS通信を実現するためにLet’s Encryptの証明書の取得方法を記します。
WebサーバーでのHTTPS通信を実現するには、Webサーバーの公開鍵証明書 (証明書) と秘密鍵を用意する必要があります。秘密鍵は自分で用意できるとしても、公開鍵証明書は第三者の認証局 (CA: Certificate Authority) に発行してもらう必要があります。一般的には、証明書の発行は有料であるため、ネックでした。
これを回避するために、自己署名証明書という自分で発行した証明書を開発環境で使うことがあります。ただ、当然ながら自分で発行している以上信頼性に乏しく、自己署名証明書で運用されているWebサイトは、Webブラウザーが警告を出します。そのため、本番環境での運用には使えません。
こういう事情もあり、WebサイトのHTTPS化はなかなかやっかいな問題でした。
そんな中、2015年頃からHTTPSによる安全なWebを普及させるためにLet’s Encryptという無償で証明書を発行するプロジェクトが始まりました。
Let’s Encryptを使うことで個人でもお金をかけずに証明書を発行でき、WebサイトのHTTPSを低コストで実現できます。そこで、Let’s Encryptでの証明書の発行方法を調べて成功したので手順を記します。
条件
Let’s Encryptによる証明書の発行はACMEというプロトコルに沿って実施されます。基本的にはACME対応クライアントソフトを使ったコマンド実行で行います。
その他、「Challenge Types – Let’s Encrypt – Free SSL/TLS Certificates」に書かれている通り、Let’s Encryptのサーバーから通信を行います。
そこで、以下の2点が前提として必要になります。
これを念頭においておきます。
導入
ACMEクライアントとして、公式で推奨されているCertbotを使用します。
まず、Certbotをインストールします。CertbotはPython3で実装されており、基本的に管理者権限での実行を前提として作られています。
Certbotのインストール手順は「Get Certbot — Certbot 2.4.0.dev0 documentation」に記されています。
公式手順では、Snap/Docker/pipが推奨されています。pip以外はストレージ容量を無駄に消費してしまいます。今回はDebian系OSでインストールするため、Debianの手順書の「10.2. X.509 certificates」を参考にインストールします。
以下のコマンドでクライアントをインストールします。
sudo apt install -y python3-certbot-apache
Apache HTTP Serverを使っている場合、以下のコマンドで証明書を取得します。DOMAINとEMAIL変数に、それぞれ証明書取得対象のドメインと、更新失敗時などの通知の受信電子メールを指定します。
DOMAIN=gs.senooken.jp
EMAIL=contact@example.com
sudo certbot --apache -m $EMAIL --agree-tos --no-eff-email -d $DOMAIN --redirect
certbot --apache
コマンドだけを実行すると、電子メールの登録、利用規約の承諾、メーリングリストの参加可否、ドメイン、リダイレクト設定の問い合わせがあるので、オプションで指定しています。
Apacheの設定も自動でしてくれるようです。Apache以外のサーバーは、必要になっタイミングで調査して追記します。
更新
証明書の有効期限は90日になっていますので、90日以内に更新する必要があります。
証明書の更新は「Renewing certificates – User Guide — Certbot 1.6.0.dev0 documentation」にあるとおり、renew
サブコマンドを使う。コマンドがcertonly
からrenew
に変わることと-d
オプションが不要な点以外は同じです。
手動でcronの定時タスクに登録する必要があります。が、APTからインストールした場合、自動更新が有効になっており、/etc/cron.d/certbotに登録されています。特に何もしなくて大丈夫です。
結論
Let’s Encryptによる公開鍵証明書の発行方法を記しました。
2年前にユーザー権限で手動でインストールしていましたが、OSのパッケージマネージャーを使うと驚くほど簡単にできました。
これでサイトをHTTPSで安心して公開できます。
詳細プロフィール。SNS: Twitter/GS=gnusocialjp@gnusocial.jp/WP=gnusocialjp@web.gnusocial.jp。2022-07-17からgnusocial.jpとweb.gnusocial.jpのサイトを運営しています。WordPressで分散SNSに参加しています。このアカウントの投稿に返信すると、サイトのコメント欄にも反映されます。
コメント