Node.js で走らせている《テクミュ》は,Let’s Encrypt で SSL 化しています。
>Let’s Encrypt はフリーで自動化されたオープンな認証局です。
(有料の SSL の証明書は高いですね。EV SSL とか,安くても 38,280円/年ですね。)
サーバーは Cent OS です。Certbot を yum でインストールして更新させていたのですが,あるときから,更新時にエラーが出るようになってしまいました。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
An unexpected error occurred:
SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
Please see the logfiles in /var/log/letsencrypt for more details.
そのため,Web サイトにアクセスすると,下のようなエラーが出ます。
これは困る。
ここがネックですが,このエラーでググっても,解決作が見つかりません。
今一度,Let’s Encrypt の公式ページや Certbot に関する情報を見直してみました。
すると解決。エラーの原因はこちらでした。
2021年にLet’s Encryptのルート証明書が変更!影響や備えておくべきこととは?
Let’s Encrypt のルート証明書の仕様が変わっていたためです。
(「DST Root X3」が certbot で更新できなくなっていた,らしい。)
今,ググってみると,同様の問題が発生しているサイトが多くあったようですね。
Let’s EncryptのルートCA証明書期限切れ、多数のサイトで問題発生
CentOS7 に Certbot をインストールする手順は,ググったらいくつも出ますが,それらでインストールされる Certbot が古いことが原因でした(多分)。
例えば,多くのサイトでの Certbot のインストール手順は次のとおりです。
(1)EPEL のインストール
$ sudo yum install -y epel-release
(2) certbot のインストール
$ sudo yum install -y certbot python-certbot-apache
(3) 証明書の作成
ここから後は Apache で動かすのか Standalone で取得するのかなどで分岐するため,詳細は略。下はコマンド例。
# certbot certonly --webroot -w /var/www/html/ -d example.com
上で取得した証明書を使うとエラーになります。
もしくは,証明書自体取得できません。
ダメな手順では EPEL リポジトリから certbot を引っ張ってきましたが,そうではなく,snapd を用います。
こちらを参照。
(1) snapd をインストール
epel をとおして,yum でインストールできます。下を参照。
(2) core を snap コマンドでインストール
$ sudo snap install core; sudo snap refresh core
core が何を指しているのか分かりませんが(ダメですね),公式サイトに沿って,愚直にインストール。
(3) snap で certbot をインストール
$ sudo snap install --classic certbot
(4) シンボリックリンクを作成
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
これで certbot が叩けます。
ここから後は,環境(Apacheかどうか)によって分岐します。
Apache なら,下のコマンドを打つと証明書を取得して,Virtual Host のファイルを conf.d に作ってくれます。
$ sudo certbot --apache
手動更新時は下のコマンドらしいですね。
$ sudo certbot renew --dry-run
ただ,自動的に,最新の証明書を拾ってくるように設定してくれているようです。
すごい。
上の手順で,Let’s Encrypt の証明書も無事再取得できました。
CentOS が開発終了したので,次にサーバー立てるときは,CentOS 以外のものを選択すると思います。
CentOS をフォークした OS(「Rocky Linux」とか) か,Ubuntu か。
そのときには,certbot を引っ張ってくるリポジトリも変わっているでしょうから,このような問題は起きないと思います。
Let’s Encrypt 側に仕様変更があっても,無料の証明局なので,文句はいえません。
今後も,ありがたく使わせていただきます。
投稿記事のカテゴリやタグと同じ記事をランダム表示します。