Let’s Encrypt の証明書の更新エラー(CentOS7, Certbot)

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 サイトにアクセスすると,下のようなエラーが出ます。

これは困る。

SSLError: (“bad handshake: Error([(‘SSL routines’, ‘ssl3_get_server_certificate’, ‘certificate verify failed’)],)”,)

ここがネックですが,このエラーでググっても,解決作が見つかりません。

今一度,Let’s Encrypt の公式ページや Certbot に関する情報を見直してみました。

すると解決。エラーの原因はこちらでした。

2021年にLet’s Encryptのルート証明書が変更!影響や備えておくべきこととは?

Let’s Encrypt のルート証明書の仕様が変わっていたためです。

(「DST Root X3」が certbot で更新できなくなっていた,らしい。)

今,ググってみると,同様の問題が発生しているサイトが多くあったようですね。

Let’s EncryptのルートCA証明書期限切れ、多数のサイトで問題発生

snapd をインストールする

ダメな手順

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 を用います。

こちらを参照。

certbot instructions

(1) snapd をインストール

epel をとおして,yum でインストールできます。下を参照。

Installing snap on CentOS

(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 側に仕様変更があっても,無料の証明局なので,文句はいえません。

今後も,ありがたく使わせていただきます。


投稿に関連する記事抜粋

投稿記事のカテゴリやタグと同じ記事をランダム表示します。

 直近の記事一覧

 Apple Intelligence (24年10月29日)
 1011 (24年10月11日)
 診療(10月8日) (24年10月8日)

 カテゴリ一覧

 雑談(182)
アニメ(19)/ゲーム(12)/ドラマ(3)/パソコン(38)/小説(3)/広島東洋カープ(17)/映画(11)/漫画(33)/音楽(62)
 製作記(89)
AI(5)/CakePHP(3)/CentOS(4)/JavaScript(JS)(9)/Nuxt.js(4)/Vue.js(18)/WordPress(23)/料理(10)