QTS SSL Certificate 2.2.73:letsencrypt_agent_cliバイナリが期限切れのDST Root CA X3を証明書チェーンに追加し、厳格なTLSクライアント(Alexa、AWS Lambda)が動作しなくなる

環境

  • QTS SSL証明書: v2.2.73 (build 20260310, 最終更新 2026-07-09 — 最新)

  • ドメイン: カスタムDDNS(*.myqnapcloud.com

  • NginxがHome Assistantのフロントに配置

バグ

Let’s Encryptの更新後、毎回 QcloudSSLCertificateletsencrypt_agent_cli バイナリが 期限切れのDST Root CA X3証明書(2021年9月30日失効)を /etc/stunnel/uca.pem に追記してしまいます。これにより、リーフ証明書とチェーン自体は正常であっても、Alexa Smart HomeやAWS Lambda、 curl-kなし)などの厳密なTLS検証を行うクライアントでは正常に接続できなくなります。

原因

acme-tinyのステップは正しく YR1 中間CAのみを取得します:

cert/chain → YR1のみ(正常)

ですが letsencrypt_agent_cliintermediate.pemuca.pemにコピー)として、

cert/intermediate.pem → YR1 + DST Root CA X3(2021年失効)(問題!)

このDST証明書がバイナリ内部で証明書アセンブリ処理の際にハードコーディングされています。cert/chain(acme-tinyの生出力)は汚染されていません——破損はコンパイル済みバイナリ内部で発生しています。

これは2026年5月27日にLetsEncryptがCA階層構造を変更したために発生したと考えられます(出典1)

検証方法

# cert/chain — クリーン

openssl x509 -noout -subject -dates -in /mnt/ext/opt/QcloudSSLCertificate/cert/chain

# subject=C=US, O=Let’s Encrypt, CN=YR1 | notAfter=Sep 2 23:59:59 2028 GMT (正常)

# cert/intermediate.pem — 破損

awk ‘…’ /mnt/ext/opt/QcloudSSLCertificate/cert/intermediate.pem | openssl x509 -noout -subject -dates

# 証明書1: YR1 notAfter=2028年9月2日(正常)

# 証明書2: DST Root CA X3 notAfter=2021年9月30日(問題)

影響

ブラウザは追加証明書を無視し正常に検証できます。しかし、厳格なチェーン検証を行うクライアント(Alexa Smart Homeスキル、AWS Lambda、標準curlなど)は SSL: unable to get local issuer certificate エラーとなり失敗します。

暫定対応(修正まで)

クリーンなファイルから失効証明書を除去しクロス署名版ISRG Root YRを追加するnginx.pemを日次で再生成するcronスクリプト:

0 4 * * * /share/CACHEDEV1_DATA/build_nginx_pem.sh

必要な修正

letsencrypt_agent_cli からDST Root CA X3のハードコーディングを削除してください。バイナリは cert/chain 内の証明書のみを使って intermediate.pem/uca.pem を構築するべきです。

他のOSS解決例: