QTS SSL Certificate 2.2.73: aplikasi letsecnrypt_agent_cli menambahkan DST Root CA X3 yang sudah kedaluwarsa ke rantai sertifikat, menyebabkan masalah pada klien TLS ketat (Alexa, AWS Lambda)

Lingkungan

  • Sertifikat SSL QTS: v2.2.73 (build 20260310, diperbarui 2026-07-09 — terbaru)

  • Domain: DDNS kustom (*.myqnapcloud.com)

  • Nginx sebagai frontend Home Assistant

Bug

Setiap kali Let’s Encrypt melakukan pembaruan, aplikasi biner letsencrypt_agent_cli milik QcloudSSLCertificate menambahkan sertifikat DST Root CA X3 yang sudah kedaluwarsa (kedaluwarsa 30 September 2021) ke /etc/stunnel/uca.pem. Hal ini merusak verifikasi TLS untuk klien yang ketat seperti Alexa Smart Home, AWS Lambda, curl tanpa -k, dll., meskipun sertifikat daun dan rantai sudah benar.

Penyebab utama

Langkah acme-tiny benar-benar hanya mengambil intermediate YR1:

cert/chain → hanya YR1 (bagus)

Tapi kemudian letsencrypt_agent_cli menulis intermediate.pem (yang disalin ke uca.pem) sebagai:

cert/intermediate.pem → YR1 + DST Root CA X3 (kedaluwarsa 2021) (buruk)

Sertifikat DST di-hardcode ke dalam proses perakitan sertifikat pada biner tersebut. cert/chain (output asli acme-tiny) bersih — korupsi terjadi di dalam biner yang dikompilasi.

Ini kemungkinan terjadi karena LetsEncrypt mengubah hierarki CA pada 27 Mei 2026 (sumber1)

Verifikasi

# cert/chain — bersih

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 (bagus)

# cert/intermediate.pem — rusak

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

# Cert 1: YR1 notAfter=Sep 2 2028 (bagus)

# Cert 2: DST Root CA X3 notAfter=Sep 30 14:01:15 2021 (buruk)

Dampak

Browser mengabaikan sertifikat tambahan ini dan tetap bisa melakukan verifikasi. Namun, klien apapun yang melakukan validasi rantai secara ketat (Alexa Smart Home skill, AWS Lambda, curl standar) akan mengalami error SSL: unable to get local issuer certificate dan gagal.

Solusi sementara (sampai diperbaiki)

Skrip cron harian yang membangun ulang nginx.pem dari file bersih, men-strip sertifikat kedaluwarsa, dan menambahkan cross-signed ISRG Root YR:

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

Perbaikan dibutuhkan

Hapus hardcode DST Root CA X3 dari letsencrypt_agent_cli. Biner harus hanya menggunakan sertifikat dalam cert/chain saat membangun intermediate.pem/uca.pem.

Solusi OSS lain yang sudah diperbaiki:

Terima kasih atas laporannya! Kami telah mengonfirmasi secara internal bahwa ini adalah bug dan saat ini sedang mengerjakannya. Masalah ini akan kami perbaiki di rilis mendatang. Terima kasih atas pengertiannya!

Saya sudah melaporkan bug ini di akhir Juli. Sampai sekarang masih belum selesai. Bisakah Anda memberi update kapan masalah ini akan diselesaikan?