h2oでHTTP/2通信を行うために、サーバ証明書が必要です。
Let’s Encrypt で無料のサーバ証明書を作成しておきます。
https://certbot.eff.org
ここの説明どおりにやればできました。
git コマンドが必要なので事前に入れておきましょう。
python も必要ですが、Amazon EC2 の AmazonLinux であれば、最初から入っているので安心です。
発表当初は「letsencrypt-auto」というコマンドでしたが、最近「certbot-auto」に名前が変わっています。
※2020年12月で certbot-auto のサポートは終了したので、こちらの記事を参照ください。
適当なディレクトリで以下のコマンドを実行します。
1 2 |
wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto |
もしくはgitでcloneしてもいけます。
1 2 |
git clone https://github.com/certbot/certbot /usr/local/certbot cd /usr/local/certbot |
この「certbot-auto」を実行すると、初回に必要なパッケージなど取ってきてくれます。
1 |
./certbot-auto |
証明書を作成するために、pythonが仮想環境を作り出してhttp通信を行います。
そのため、すでにapahceやnginx、h2oなどウェブサーバが動いているようなら一時的に停止しておきます。
certbot-autoコマンドで証明書を作成します。
1 |
./certbot-auto certonly --webroot -w /var/www/html -m mail@example.com -d example.com --agree-tos |
サブコマンドは以下のものが使えます。
1 2 3 4 5 6 7 8 9 |
(default) run Obtain & install a cert in your current webserver certonly Obtain cert, but do not install it (aka "auth") install Install a previously obtained cert in a server renew Renew previously obtained certs that are near expiry revoke Revoke a previously obtained certificate register Perform tasks related to registering with the CA rollback Rollback server configuration changes made during install config_changes Show changes made to server config during installation plugins Display information about installed plugins |
また、サーバープラグインを指定します。
1 2 3 4 |
--apache Use the Apache plugin for authentication & installation --standalone Run a standalone webserver for authentication --nginx Use the Nginx plugin for authentication & installation --webroot Place files in a server's webroot folder for authentication |
デフォルトのサブコマンドは「run」で、apacheやnginxだと、インストールと設定までやってくれるようですが、今回はh2oを入れる予定なので「certonly」にしました。
サーバープラグインは「–webroot」で指定しました。
ちなみに証明書を更新するときのサブコマンドは「renew」です。
他に以下の指定をしました。
1 2 3 4 |
-w ドキュメントルート -m 自分のメールアドレス、更新のお知らせもここに来ます -d 自分のサイトのドメイン名 --agree-tos 利用規約に同意します |
うまくいくと、/etc/letsencrypt/live/example.com/ 以下に証明書や鍵ができます。
実体は /etc/letsencrypt/archive/example.com/ 以下に作成され、更新するとここに履歴として溜まっていきます。そして最新のものがliveの中にリンクされるようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# ls -lt /etc/letsencrypt/archive/example.com total 24 -rw-r--r-- 1 root root 1781 Sep 16 13:18 cert1.pem -rw-r--r-- 1 root root 1781 Dec 15 10:56 cert2.pem -rw-r--r-- 1 root root 1647 Sep 16 13:18 chain1.pem -rw-r--r-- 1 root root 1647 Dec 15 10:56 chain2.pem -rw-r--r-- 1 root root 3428 Sep 16 13:18 fullchain1.pem -rw-r--r-- 1 root root 3428 Dec 15 10:56 fullchain2.pem -rw-r--r-- 1 root root 1708 Sep 16 13:18 privkey1.pem -rw-r--r-- 1 root root 1704 Dec 15 10:56 privkey2.pem # ls -lt /etc/letsencrypt/live/example.com total 0 lrwxrwxrwx 1 root root 33 Dec 15 10:56 cert.pem -> ../../archive/example.com/cert2.pem lrwxrwxrwx 1 root root 34 Dec 15 10:56 chain.pem -> ../../archive/example.com/chain2.pem lrwxrwxrwx 1 root root 38 Dec 15 10:56 fullchain.pem -> ../../archive/example.com/fullchain2.pem lrwxrwxrwx 1 root root 36 Dec 15 10:56 privkey.pem -> ../../archive/example.com/privkey2.pem |
ウェブサーバを止めていた場合は再開します。
ここで作成した証明書の有効期限は3か月なので、注意が必要です。
これまで何度も失効してしまいました。