33 Let's Encript 備忘録 (WWWサーバーのSSL対応)

阿部寛もすなる https:// 対応を、わたしもしてみんとす (https://www.itmedia.co.jp/news/articles/2508/27/news086.html)。


最近は、URL が https:// でない (http:// である) WWWサイト (つまり SSL を使わないもの) は、 WWWブラウザに「安全ではありません」といわれる。 iPhone の Safari でもすんなり接続してもらえなくなって、ストレスがたまる (時間割を iPhone で確認しているので、教室番号がすぐ見えないと困る)。

私は、大学の研究室に置いてあるマシン以外に、 さくらインターネットのマシンをWWWサーバーとして利用していて、 後者だけ https:// にしてある。 以前調べたとき、 大学に置いてあるサーバーを https:// にするのはちょっと面倒な感じがして (証明書をどうやって取るか、もし有料の場合どうやって支払うか)、 そちらは放置してあった。

今回、WWWサーバーの見直し作業をしていて、https:// 対応は、 Certbot を使って割と簡単に実現できそうに思えたので (研究室のWWWサーバーそのものは実際にインターネットに接続されて、 すでに http:// でアクセスできるようになっている、 そういう場合は簡単にできるらしい)、試しにやってみることにした。

MacPorts で Cerbot をインストール
sudo port install certbot

証明書を入手する
sudo certbot certonly \
  --webroot \
  -w WWWのrootディレクトリィ \
  -d WWWサーバーのドメイン名

ここで WWWの root ディレクトリィというのは、WWWサイトのデータを置く場所の、 一番上のディレクトリィの絶対パス名 (というのかな) である。 macOS に付属する Apache の設定のデフォールトでは /Library/WebServer/Documents になっているもののこと。 WWWサーバーのドメイン名は、 今回の場合では nalab.mind.meiji.ac.jp となる。


簡単な質問をされる (規約に同意するかとか、メールアドレスを教えてとか)。 意外とあっさりと受け付けてもらえる。 /opt/local/etc/letsencrypt/archive/ドメイン名/cert1.pem (証明書(公開鍵)), chain1.pem (中間証明書), privkey1.pem (秘密鍵), fullchain1.pem (証明書+中間証明書) が保存される。

/opt/local/etc/letsencrypt/live/ドメイン名 に、 保存されたファイルへのリンクが張られる。


Apache の方では httpd.conf を少し直す必要がある。
httpd.conf の変更点 (2つ)
LoadModule ssl_module lib/apache2/modules/mod_ssl.so

Include etc/apache2/extra/httpd-ssl.conf

httpd-ssl.conf は例えば次のような感じ
/opt/local/etc/apache2/extra/httpd-ssl.conf
Listen 443
<VirtualHost *:443>
    ServerName nalab.mind.meiji.ac.jp

    DocumentRoot "WWWのrootディレクトリィ"

    SSLEngine on
    SSLCertificateFile "/opt/local/etc/letsencrypt/live/ドメイン名/fullchain.pem"
    SSLCertificateKeyFile "/opt/local/etc/letsencrypt/live/ドメイン名/privkey.pem"

    <Directory "WWWのrootディレクトリィ">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog "/opt/local/var/log/apache2/error_log"
    CustomLog "/opt/local/var/log/apache2/access_log" common
</VirtualHost>

発行される証明書の有効期間は90日である。いつでも更新のお願いをして良いが、 期限まで30日を切らないと実際には更新されない。 ChatGPT のお勧めにしたがって、 証明書を自動的に更新するために、crontab に
MAILTO="私のメールアドレス"
0 5 * * 1 /opt/local/bin/certbot renew --quiet --deploy-hook "/opt/local/sbin/apachectl -k graceful"
というコマンドを登録した。 週に1回、証明書更新を試みる。失敗したらメールが届く。 実際に証明書が更新されたら、Apache を再起動する (つもり)。

(2025/11/26) 研究室のルーターの設定を SSL が通るように直して、試してみた。 無事 https:// での接続に成功した (あっけない)。URL書いておこう。

https://nalab.mind.meiji.ac.jp/~mk/knowhow-2025/node41.html
今後は http:// でのアクセスをやめるかどうか、 考えるのかな。それはあわてなくてよいか。

WWWブラウザに http:// がー、と言われないのは気持ちが良い。


(順番が逆になったけれど Cerbot, Let's Encrypt とは一体何? 怪しいものではないと思ってやったけれど、正体は知っておくべきですよね。)

まず “About Certbot” の What is Cerbot? から

Certbot is a free, open source software tool for automatically using Let's Encrypt certificates on manually-administrated websites to enable HTTPS.

Certbot is made by the Electronic Frontier Foundation (EFF), a 501(c)3 nonprofit based in San Francisco, CA, that defends digital privacy, free speech, and innovation.

つまり、Let's Encrypt 証明書を利用して、 ウェブサイトで HTTPS を実現するためのソフトウェア・ツールであると。 確かにインストールしたのは Cerbot だったね。


一方、 Let's Encrypt は、

Encryption for Everybody
A nonprofit providing free TLS certificates to more than 700M websites.
みんなのための暗号化。 (700M とは7億?すごいですね。) 7億以上のウェブサイトに無料の TLS 証明書を無償で提供する。

Let's Encrypt は、 Web全体のHTTPS化を目指して、10年以上 (2024年が10年目であった) サービスを続けている、 無料かつ自動化された証明書発行基盤である。 証明書が失効した場合の対応も自動化された。 証明書の有効期間を短く6日とする (そうするとセキュリティが向上する) 仕組みも準備が進められている。 助成金 (40%), 企業スポンサー (47%), 個人寄付 (10%) によりまかなわれている、 とのこと。


(2026/1/17 追記) そろそろ更新されたかな?と思って /opt/local/etc/letsencrypt/{live,archive}/nalab.mind.meiji.ac.jp をのぞいてみたがまだだった。 (ファイルは 2025/11/24 に作成したものなので、90日後の30日前というと、 今月下旬になる。もう少し。)


(2026/5/4 追記) すっかり忘れていた。WWWサーバーはちゃんと動いているようなので、 うまく行っているのでしょう。確認しに行く。
% ls -l /opt/local/etc/letsencrypt/archive/nalab.mind.meiji.ac.jp
total 96
-rw-r--r--@ 1 root  wheel    1310 11月 24 14:24 cert1.pem
-rw-r--r--@ 1 root  wheel    1318  1月 26 05:08 cert2.pem
-rw-r--r--@ 1 root  wheel    1306  3月 30 05:07 cert3.pem
-rw-r--r--@ 1 root  wheel    1566 11月 24 14:24 chain1.pem
-rw-r--r--@ 1 root  wheel    1566  1月 26 05:08 chain2.pem
-rw-r--r--@ 1 root  wheel    1566  3月 30 05:07 chain3.pem
-rw-r--r--@ 1 root  certgrp  2876 11月 24 14:24 fullchain1.pem
-rw-r--r--@ 1 root  wheel    2884  1月 26 05:08 fullchain2.pem
-rw-r--r--@ 1 root  wheel    2872  3月 30 05:07 fullchain3.pem
-rw-r-----  1 root  certgrp   241 11月 24 14:24 privkey1.pem
-rw-r-----  1 root  certgrp   241  1月 26 05:08 privkey2.pem
-rw-r-----  1 root  certgrp   241  3月 30 05:07 privkey3.pem
% ls -l /opt/local/etc/letsencrypt/live/nalab.mind.meiji.ac.jp
total 8
lrwxr-xr-x@ 1 root  wheel   46  3月 30 05:07 cert.pem@ -> ../../archive/nalab.mind.meiji.ac.jp/cert3.pem
lrwxr-xr-x@ 1 root  wheel   47  3月 30 05:07 chain.pem@ -> ../../archive/nalab.mind.meiji.ac.jp/chain3.pem
lrwxr-xr-x@ 1 root  wheel   51  3月 30 05:07 fullchain.pem@ -> ../../archive/nalab.mind.meiji.ac.jp/fullchain3.pem
lrwxr-xr-x@ 1 root  wheel   49  3月 30 05:07 privkey.pem@ -> ../../archive/nalab.mind.meiji.ac.jp/privkey3.pem
-rw-r--r--@ 1 root  wheel  692 11月 24 14:24 README
%
archive/ドメイン名 というディレクトリィに保存されていき、 live/ドメイン名 というディレクトリィに最新のファイルへの シンボリック・リンクがはられる。

桂田 祐史