Lỗi NET::ERR_CERT_AUTHORITY_INVALID trên điện thoại Android cũ: thiếu chứng chỉ ký chéo (cross-sign)
Triệu chứng
Website mở bình thường trên máy tính và điện thoại đời mới. Trên điện thoại Android đời cũ (kể cả máy chạy Android 12) và thiết bị nhúng, trình duyệt lại báo NET::ERR_CERT_AUTHORITY_INVALID, "Kết nối của bạn không phải là kết nối riêng tư" hoặc "Chứng chỉ không đáng tin cậy". Ứng dụng di động gọi API tới máy chủ cũng có thể báo lỗi SSL handshake.
Nguyên nhân
Các hãng đã chuyển sang phát hành chứng chỉ từ chứng chỉ gốc (root) mới:
- Sectigo: Sectigo Public Server Authentication Root R46 (RSA) và E46 (ECC).
- SSL.com: SSL.com TLS RSA Root CA 2022 và SSL.com TLS ECC Root CA 2022.
Máy mới đã có sẵn các root này. Máy cũ không được cập nhật kho chứng chỉ gốc nên chưa có, và chỉ tin các root lâu đời như AAA Certificate Services hoặc USERTrust. Muốn máy cũ vẫn tin, máy chủ phải gửi kèm bản ký chéo (cross-sign): chính root mới nhưng được root cũ ký. Nhờ bản này, máy cũ đi được chuỗi: chứng chỉ website → CA trung gian → root mới (bản ký chéo) → root cũ mà máy đã tin.
Lỗi xảy ra khi máy chủ chỉ gửi chứng chỉ website và CA trung gian, hoặc gửi kèm root mới tự ký, mà không có bản ký chéo.
Cách kiểm tra
1. SSL Labs
Vào https://www.ssllabs.com/ssltest/ và nhập tên miền. Xem mục Certification Paths, phần Android cũ và Mozilla. Nếu đường đi kết thúc ở Sectigo Public Server Authentication Root R46 (hoặc SSL.com TLS RSA Root CA 2022) với dòng "In trust store" chỉ có ở máy mới, nghĩa là máy cũ sẽ lỗi. Đường đi đúng có thêm một mắt xích "R46 do AAA Certificate Services (hoặc USERTrust) ký".
2. openssl
Xem chuỗi máy chủ thật sự gửi:
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null | grep -E "^ *[0-9] s:|^ *i:"
Chuỗi đúng cho chứng chỉ Sectigo RSA thường có dạng:
0 s:CN = example.com i:... Sectigo Public Server Authentication CA DV R36 1 s:... Sectigo Public Server Authentication CA DV R36 i:... Sectigo Public Server Authentication Root R46 2 s:... Sectigo Public Server Authentication Root R46 i:... CN = AAA Certificate Services <-- bản ký chéo
Nếu dòng cuối có i: cũng là chính Root R46 (tự ký), hoặc chuỗi dừng ở R36, thì cần sửa.
Cách sửa
Tải lại CA bundle mới trên MuaSSL (đủ cho nginx, Apache, cPanel, Plesk)
CA bundle tải trên MuaSSL (trang chi tiết đơn, tệp zip hoặc định dạng nginx) đã có sẵn bản ký chéo theo đúng hãng. Với nginx và Apache, bạn chỉ cần tải lại bundle rồi cài lại, không cần tự tải tệp ký chéo. Không cần cấp lại chứng chỉ, không cần đổi private key.
nginx
- Ghép chứng chỉ website và CA bundle mới thành một tệp, chứng chỉ website đứng đầu:
cat example.com.crt ca-bundle.crt > example.com.fullchain.crt
- Trỏ
ssl_certificatetới tệp ghép, giữ nguyênssl_certificate_key. - Kiểm tra cấu hình rồi nạp lại:
nginx -t && systemctl reload nginx
Apache
- Apache 2.4.8 trở lên: dùng tệp ghép như trên cho
SSLCertificateFile. - Bản cũ hơn: đặt
SSLCertificateChainFiletrỏ tớica-bundle.crtmới. - Kiểm tra rồi nạp lại:
apachectl configtest && apachectl graceful
cPanel / Plesk
- cPanel: SSL/TLS → Manage SSL sites, chọn tên miền, dán nội dung CA bundle mới vào ô Certificate Authority Bundle (CABUNDLE), rồi bấm Install Certificate.
- Plesk: Websites & Domains → SSL/TLS Certificates, mở chứng chỉ đang dùng, dán CA bundle mới vào ô CA certificate, rồi lưu.
Windows Server / IIS
IIS không cho chọn chuỗi gửi đi. Windows tự dựng chuỗi theo kho chứng chỉ của chính máy chủ, nên dán bundle là chưa đủ. Nếu máy chủ có root R46 tự ký trong Trusted Root Certification Authorities, Windows sẽ dừng chuỗi ở đó và không gửi bản ký chéo.
Cách dưới đây đã thử thành công trên một máy chủ IIS thực tế: máy chủ, máy ngoài và điện thoại cũ đều truy cập được. Hãy làm theo đúng thứ tự, sao lưu trước, và nếu không chắc thì liên hệ bộ phận hỗ trợ MuaSSL.
- Trước tiên, tắt tự cập nhật root của Windows, nếu không Windows sẽ tự thêm lại root R46 tự ký: gpedit.msc → Computer Configuration → Administrative Templates → System → Internet Communication Management → Internet Communication settings → Turn off Automatic Root Certificates Update = Enabled.
- Mở certlm.msc. Nhập tệp R46 do AAA ký chéo (bảng dưới) vào Intermediate Certification Authorities.
- Xóa Sectigo Public Server Authentication Root R46 tự ký (Issued To = Issued By) khỏi Trusted Root Certification Authorities. Nếu có, xóa luôn khỏi Untrusted Certificates. Đừng đưa R46 vào Untrusted: Chrome trên chính máy chủ sẽ báo lỗi với mọi website dùng root này.
- Chạy
iisresetrồi kiểm tra lại bằng SSL Labs hoặc lệnh openssl ở trên.
Ghi chú:
- Windows có thể chọn bản R46 do USERTrust RSA ký thay vì bản do AAA ký. Bản này cũng có trong kho của máy cũ và cũng đạt.
- Đánh đổi: khi đã tắt Automatic Root Certificates Update, máy chủ sẽ không tự nhận root mới nữa. Bạn cần định kỳ cập nhật kho root bằng tay (xem bài Windows: Bản vá bổ sung Trusted Root Certificates) hoặc bật lại khi không còn cần bản ký chéo.
- Hoàn tác: nhập lại root R46 tự ký vào Trusted Root, xóa bản ký chéo khỏi Intermediate, đặt chính sách về Not Configured, rồi chạy
iisreset.
Tệp ký chéo chính thức (để đối chiếu)
Chỉ dùng tệp tải từ hãng và so khớp SHA-256 trước khi cài:
- Sectigo Public Server Authentication Root R46, do AAA Certificate Services ký, hết hạn 31/12/2028
SHA-256:CE:75:58:0B:C6:79:6D:3B:3E:A2:C3:E7:42:59:D0:D4:03:07:24:08:E9:60:C7:71:39:C2:FB:5A:3D:94:19:E4
Tải: crt.sectigo.com/SectigoPublicServerAuthenticationRootR46_AAA.crt - Sectigo Public Server Authentication Root R46, do USERTrust RSA Certification Authority ký, hết hạn 18/01/2038
SHA-256:92:F3:51:BF:3D:54:16:4D:FA:8D:D8:F9:E1:13:9D:31:50:34:97:86:48:5D:2B:9E:EC:D0:0E:29:71:C1:E6:C5
Tải: crt.sectigo.com/SectigoPublicServerAuthenticationRootR46_USERTrust.crt - Sectigo Public Server Authentication Root E46, do USERTrust ECC Certification Authority ký, hết hạn 18/01/2038
SHA-256:EA:6B:89:ED:69:07:A2:09:FF:91:88:67:6F:B1:64:E7:AC:ED:89:4B:89:96:DF:BE:5C:E5:BB:CC:22:DE:4D:DD
Tải: crt.sectigo.com/SectigoPublicServerAuthenticationRootE46_USERTrust.crt - USERTrust RSA Certification Authority, do AAA Certificate Services ký, hết hạn 31/12/2028
SHA-256:68:B9:C7:61:21:9A:5B:1F:01:31:78:44:74:66:5D:B6:1B:BD:B1:09:E0:0F:05:CA:9F:74:24:4E:E5:F5:F5:2B
Tải: crt.sectigo.com/USERTrustRSAAAACA.crt - USERTrust ECC Certification Authority, do AAA Certificate Services ký, hết hạn 31/12/2028
SHA-256:A6:CF:64:DB:B4:C8:D5:FD:19:CE:48:89:60:68:DB:03:B5:33:A8:D1:33:6C:62:56:A8:7D:00:CB:B3:DE:F3:EA
Tải: crt.sectigo.com/USERTrustECCAAACA.crt - SSL.com TLS RSA Root CA 2022, do AAA Certificate Services ký, hết hạn 31/12/2028
SHA-256:D6:DF:00:26:E5:93:9E:F0:8B:ED:AC:8C:58:38:F1:F0:A6:EF:A7:CA:D5:F6:B8:BB:80:AE:B2:55:DA:96:EB:B3
Tải: crt.sh/?id=20053136109 (có sẵn trong CA bundle MuaSSL) - SSL.com TLS ECC Root CA 2022, do AAA Certificate Services ký, hết hạn 31/12/2028
SHA-256:BA:06:D3:D3:E3:48:FC:E7:47:8C:C8:4B:42:2D:0E:63:8E:9E:22:1E:F1:A0:B5:3A:DC:14:CC:70:E0:4B:8A:B8
Tải: crt.sh/?id=20053135970 (có sẵn trong CA bundle MuaSSL)
SSL.com còn công bố các bản ký chéo khác của root 2022 tại ssl.com/repository (do SecureTrust CA ký, hết hạn 30/12/2029; do SSL.com EV Root ký, hết hạn 03/11/2038). Bạn chỉ cần dùng CA bundle tải từ MuaSSL; không trộn nhiều bản ký chéo nếu không rõ thiết bị cần.
Kiểm tra SHA-256 của tệp đã tải: openssl x509 -in tep.crt -inform DER -noout -fingerprint -sha256 (Linux/macOS) hoặc certutil -hashfile tep.crt SHA256 (Windows; kết quả viết liền không dấu hai chấm).
Tự động cài và gia hạn
Nếu máy chủ Linux của bạn dùng nginx, Apache hoặc các bảng điều khiển phổ biến, công cụ tự động của MuaSSL tải đúng CA bundle (đã có bản ký chéo) và cài giúp bạn: xem Hướng dẫn công cụ tự động.
Bài liên quan:
- Lỗi Microsoft IIS: Chứng chỉ không được tin cậy rộng rãi do thiếu đường dẫn chứng chỉ (Certificate Path) hợp lệ
- Cần làm gì khi một Root CA hết hạn hoặc cập nhật
- Windows: Bản vá bổ sung Trusted Root Certificates
Cần hỗ trợ? Gửi yêu cầu cho MuaSSL kèm tên miền và kết quả lệnh openssl ở trên.
Xử lý sự cố khác
Lỗi Microsoft IIS: Chứng chỉ không được tin cậy rộng rãi do thiếu đường dẫn chứng chỉ (Certificate Path) hợp lệ
Cần làm gì khi một Root CA hết hạn hoặc cập nhật
Yubikey: Ký mã ClickOnce bằng chứng chỉ được lưu trữ trên Yubikey
Gemalto Safenet eToken 5110CC (940): Làm thế nào để mở khóa (đặt lại mật khẩu)
Lỗi: Verify return code: 21 (unable to verify the first certificate)
Zimbra: Lỗi chdir(/root) failed: Permission denied
Signtool: Lỗi No certificates were found that met all the given criteria
Cài đặt SSL thành công nhưng Google hoặc Facebook báo lỗi
Windows: Bản vá bổ sung Trusted Root Certificates
Windows: Tự động cập nhật Chứng chỉ gốc - Trusted Root Certificates
Chrome lỗi ERR_CERT_AUTHORITY_INVALID trên Windows 7
Zimbra: Xử lý lỗi Root CA Certificate Expiration
Cpanel: Root CA Certificate Expiration
Comodo/Sectigo: Lỗi Root certificate has expired
Hướng dẫn cập nhật Root / Intermediate CA trên Linux Server
Comodo/Sectigo: Lỗi Root certificate has expired
Lỗi: Windows does not have enough information to verify this certificate
Windows Server 2012: Hướng dẫn cập nhật máy chủ hỗ trợ TLS 1.2
Windows Server 2008: Hướng dẫn cập nhật máy chủ hỗ trợ TLS 1.2
Exchange Server: Khắc phục lỗi didnt found starttls in server response, try anyway khi kết nối STARTTLS