Linodeでcertbotを使ってLet'sEncrypt証明書を発行する
殆どのWebサーバーはまだRSA証明書を使っていますが、今回はより安全だとされているECDSA証明書で発行してみます。
LinodeでUbuntu 20.04のVMを利用
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"
certbotの利用
Let'sEncryptの証明書を取得するために、certbotを利用します。
ubuntuのパッケージから Apache用のcertbotをインストールしてみます。
apt install certbot python3-certbot-apache
今回はecdsa証明書を用意したいので、 "--key-type ecdsa" のオプションを使いましたが、
実行したら、errorが返ってきました。
# certbot certonly --key-type ecdsa -d YOUR_DOMAIN_NAME --dry-run
usage:
certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...
Certbot can obtain and install HTTPS/TLS/SSL certificates. By default,
it will attempt to use a webserver both for obtaining and installing the
certificate.
certbot: error: unrecognized arguments: --key-type ecdsa
エラーの原因はcertbotのバージョンが古いからでした。パッケージからインストールしたcertbotのバージョンは 0.40.0です。
# certbot --version
certbot 0.40.0
--key-type オプションは certbot 1.10.0 以上で使えるようです。以下を参照し、手動でcertbot 1.30.0 をインストールしなおしました。
https://certbot.eff.org/
(パッケージからインストールしたcertbotを削除し、snapを使って再インストールする)
# certbot --version
certbot 1.30.0
これで準備が整ったので、 key-typeオプションで無事にLet's EncryptのECDSA証明書が発行されました。
certbot --key-type ecdsa -d YOUR_DOMAIN_NAME
WebサイトでECDSA証明書を確認
発行されたECDSA証明書を使ってWebサイトをHTTPSで公開したあと、opensslでインターネットを経由してECDSA証明証を確認してみました。
ECDSAは"公開鍵の暗号化と署名アルゴリズム"なので、
"Public Key Algorithm: id-ecPublicKey" になっていればECDSA証明書であることがわかります。
openssl s_client -connect YOUR_DIMAIN_NAME:443 -servername YOUR_DOMAIN_NAME | openssl x509 -text
Issuer: C=US, O=Let's Encrypt, CN=R3
Validity
Not Before: Sep 9 02:31:21 2022 GMT
Not After : Dec 8 02:31:20 2022 GMT
Subject: CN=im.linode.akamai.tech
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:ae:d8:44:19:a2:68:33:a8:d7:83:94:6c:15:50:
37:74:8c:04:46:b3:3d:f1:48:83:5b:33:a0:1c:dd:
76:8a:d4:fc:00:cb:1c:98:27:62:0e:5a:17:1a:6b:
d9:e8:d3:ec:26:1e:55:16:f2:3d:31:5c:f1:52:55:
af:32:fe:12:ae
ASN1 OID: prime256v1
NIST CURVE: P-256
最後にECDSA用の暗号スイートを使って暗号化と復号化ができているかを確認してみました。
-sigalgs オプションを使ってアルゴリズム(ECDSA+SHA256)を指定します。
openssl s_client -connect YOUR_DIMAIN_NAME:443 -servername YOUR_DIMAIN_NAME -sigalgs ECDSA+SHA256 < /dev/null
※-sigalgs オプションはLinuxの最新バージョンのopensslでは利用できますが、macOS(monterey)のopnsslでは利用できませんでした。
Linuxのopenssl:
$ openssl version
OpenSSL 1.1.1f 31 Mar 2020
MacOSのopenssl:
$ openssl version
LibreSSL 2.8.3
MacOSではLibreSSLになっていました。
Homebrewでopensslを確認
$ brew info openssl
==> openssl@3: stable 3.0.5 (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/openssl@3/3.0.5 (6,444 files, 28.2MB)
Poured from bottle on 2022-09-15 at 22:15:02
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openssl@3.rb
License: Apache-2.0
==> Dependencies
Required: ca-certificates
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl@3/certs
and run
/usr/local/opt/openssl@3/bin/c_rehash
openssl@3 is keg-only, which means it was not symlinked into /usr/local,
because macOS provides LibreSSL.
If you need to have openssl@3 first in your PATH, run:
echo 'export PATH="/usr/local/opt/openssl@3/bin:$PATH"' >> /Users/bahn/.bash_profile
Homebrewではopenssl@3をアップデートしているものの、使っているopensslは別のパスのLibreSSLのopensslだったことがわかりました。
$ which openssl
/usr/bin/openssl
/usr/local/opt/openssl@3/bin/openssl を使ったら -sigalgs オプションが使えるようになったので、$PATHを変えることにします。
(ちなみに /usr/local/opt/openssl@1.1/bin/openssl も-sigalgs が使えます)
opensslのホームページ(https://www.openssl.org/)を確認すると、openssl3.0.5 とopenssl1.1.1qが最新でした。
なお、LibreSSL(https://www.libressl.org/)の最新バージョンはLibreSSL 3.5.3 (May 18th, 2022)のようでしたが、LibreSSLをやめて本家のopensslにすることにしたので、まだ試していません。
まとめ
Let's Encrypt証明書が簡単に発行できて驚きました。MacOSのopensslをLibreSSLから本家のopensslに変更しLinuxと同様の検証ができました。
Linodeとは
Linode (https://www.linode.com/) は Akamaiが提供するIaaS (Infrastructure as a Service) プラットフォームプロバイダーのサービスです。リノードと発音します。
Akamaiは2022年2月にLinode社の買収を発表しました。
https://www.akamai.com/ja/newsroom/press-release/akamai-to-acquire-linode
クラウドコンピューティングをよりシンプルに、手頃な価格で、誰もが利用できるようにすることで、イノベーションを加速することができます。
https://www.linode.com/ja/alternative-cloud-provider/
関連記事
アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。