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)

Đăng 06/11/2026

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

  1. 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
  2. Trỏ ssl_certificate tới tệp ghép, giữ nguyên ssl_certificate_key.
  3. 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 SSLCertificateChainFile trỏ tới ca-bundle.crt mớ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.

  1. 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.
  2. Mở certlm.msc. Nhập tệp R46 do AAA ký chéo (bảng dưới) vào Intermediate Certification Authorities.
  3. 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.
  4. Chạy iisreset rồ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:

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

Cần tư vấn?

Kỹ thuật viên MuaSSL hỗ trợ 24/7.