Lỗi Gặp Phải
Firefox hiển thị trang trắng với thông báo:
SSL_ERROR_NO_CYPHER_OVERLAP
Giải thích: Firefox đã cố giao tiếp với server, nhưng hai bên không thể thống nhất được cipher suite nào. Server đang sử dụng các cipher mà Firefox đã loại bỏ từ nhiều năm trước, hoặc danh sách cipher của server bị lỗi hoàn toàn.
Nguyên Nhân Gốc Rễ
Có bốn nguyên nhân gây ra lỗi này, trong đó nguyên nhân đầu tiên chiếm đến 80% các trường hợp:
- Server chỉ chấp nhận TLS 1.0 hoặc TLS 1.1 — Firefox 78+ (phát hành tháng 6/2020) đã loại bỏ hoàn toàn hỗ trợ cho cả hai phiên bản này.
- Chỉ thị
ssl_ciphers(Nginx) hoặcSSLCipherSuite(Apache) chỉ liệt kê các cipher RC4, DES hoặc export-grade mà Firefox đã xóa từ lâu. - Ai đó copy-paste cấu hình SSL từ một câu trả lời Stack Overflow năm 2014 mà không kiểm tra xem các cipher đó còn tồn tại hay không.
- Một chuỗi cipher tùy chỉnh trông có vẻ ổn nhưng vô tình loại trừ tất cả những gì Firefox hiện đại hỗ trợ.
Chrome vẫn tải được trang đó bình thường vì nó vẫn chấp nhận một số cipher cũ. Firefox thì không. Đây là tính năng bảo mật, không phải lỗi.
Chẩn Đoán Trước
Chưa cần chạm vào cấu hình. Hãy kiểm tra xem server đang quảng bá những gì:
# Kiểm tra từng phiên bản TLS riêng biệt
openssl s_client -connect yourdomain.com:443 -tls1
openssl s_client -connect yourdomain.com:443 -tls1_1
openssl s_client -connect yourdomain.com:443 -tls1_2
openssl s_client -connect yourdomain.com:443 -tls1_3
# Danh sách cipher đầy đủ kèm xếp hạng
nmap --script ssl-enum-ciphers -p 443 yourdomain.com
TLS 1.0/1.1 kết nối được nhưng TLS 1.2 thất bại? Đó chính là thủ phạm. Danh sách cipher chỉ hiển thị các biến thể RC4 hoặc DES? Cùng vấn đề, nhưng ở góc độ khác.
Fix 1: Cập Nhật Cấu Hình SSL Nginx
Giải quyết được 90% các trường hợp. Mở server block của bạn:
sudo nano /etc/nginx/sites-available/yourdomain.conf
# hoặc
sudo nano /etc/nginx/conf.d/yourdomain.conf
Thay thế phần SSL bằng cấu hình sau:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# TLS 1.0 và 1.1 đã lỗi thời — không phục vụ nữa
ssl_protocols TLSv1.2 TLSv1.3;
# Bộ cipher hiện đại — được Firefox 78+ hỗ trợ đầy đủ
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Session cache — giảm overhead handshake cho khách truy cập lần sau
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
}
Kiểm tra và tải lại:
sudo nginx -t
sudo systemctl reload nginx
Fix 2: Cập Nhật Cấu Hình SSL Apache
Tìm virtualhost SSL của bạn — thường nằm trong /etc/apache2/sites-available/ hoặc /etc/httpd/conf.d/ssl.conf:
sudo nano /etc/apache2/sites-available/yourdomain-ssl.conf
Cập nhật các chỉ thị sau:
<VirtualHost *:443>
ServerName yourdomain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/yourdomain.com/chain.pem
# Loại bỏ các phiên bản protocol cũ
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
# Chỉ dùng cipher hiện đại
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
</VirtualHost>
Kiểm tra và khởi động lại:
sudo apachectl configtest
sudo systemctl reload apache2
# RHEL/CentOS:
sudo systemctl reload httpd
Fix 3: Client Cũ Chỉ Hỗ Trợ TLS 1.0
Trường hợp hiếm gặp, nhưng vẫn xảy ra — các thiết bị IoT cũ, hệ thống nhúng, hoặc công cụ nội bộ bị khóa ở TLS 1.0. Bạn có thể tạm thời bật lại TLS 1.0 trong Firefox trong khi xử lý phía server:
- Nhập
about:configvào thanh địa chỉ - Chấp nhận cảnh báo
- Tìm kiếm
security.tls.version.min - Đổi giá trị từ
3(TLS 1.2) thành1(TLS 1.0)
Đây chỉ là giải pháp tạm thời — không phải giải pháp thực sự. TLS 1.0 có các lỗ hổng bảo mật đã được khai thác thực tế (BEAST, POODLE). Hãy sửa phía server. Nhớ hoàn tác cài đặt này khi xong.
Fix 4: Xung Đột ssl_ciphers Trong nginx.conf
Một lỗi khó phát hiện. Một chỉ thị ssl_ciphers toàn cục trong /etc/nginx/nginx.conf có thể âm thầm ghi đè những gì bạn đặt trong server block. Quét để tìm xung đột:
grep -rn "ssl_ciphers\|ssl_protocols" /etc/nginx/
Nhiều file có giá trị khác nhau? Hãy hợp nhất lại. Đưa tất cả vào một snippet dùng chung:
# /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...;
ssl_prefer_server_ciphers off;
Sau đó mỗi server block chỉ cần khai báo:
include snippets/ssl-params.conf;
Một nguồn cấu hình duy nhất, không còn bất ngờ nào nữa.
Xác Nhận Fix Đã Hoạt Động
Sau khi tải lại, chạy các lệnh sau để xác nhận:
# TLS 1.2 phải kết nối thành công
openssl s_client -connect yourdomain.com:443 -tls1_2 2>&1 | grep -E "Protocol|Cipher"
# Kết quả mong đợi:
# Protocol : TLSv1.2
# Cipher : ECDHE-RSA-AES256-GCM-SHA384
# TLS 1.3 cũng phải hoạt động
openssl s_client -connect yourdomain.com:443 -tls1_3 2>&1 | grep -E "Protocol|Cipher"
# TLS 1.1 phải bị từ chối
openssl s_client -connect yourdomain.com:443 -tls1_1 2>&1 | grep -i "error\|alert"
Hãy kiểm tra qua SSL Labs nữa — cấu hình đúng sẽ đạt điểm A. Vẫn thấy SSL_ERROR_NO_CYPHER_OVERLAP sau tất cả các bước trên? Xóa cache SSL state của Firefox: about:preferences#privacy → Xóa dữ liệu → Nội dung web đã lưu trong bộ nhớ đệm.
Phòng Ngừa
- SSL Configuration Generator của Mozilla (ssl-config.mozilla.org) tạo ra cấu hình Nginx/Apache sẵn sàng để dán vào. Công cụ này tự động cập nhật theo khuyến nghị hiện hành — hãy dùng thay vì tự viết chuỗi cipher bằng tay.
- Chạy SSL Labs như một phần trong quy trình deploy. Năm phút mỗi lần phát hành còn hơn phải giải thích với người dùng tại sao Firefox không tải được trang của bạn.
- Kiểm tra cấu hình SSL mỗi năm một lần. Khuyến nghị về cipher đã thay đổi đáng kể từ 2018 đến 2024 — những gì đạt chuẩn lúc đó có thể không còn đạt chuẩn nữa.
- Đang dùng Let's Encrypt với Certbot? Chạy
sudo certbot renew --dry-runvà kiểm tra lại cấu hình Nginx/Apache sau đó. Certbot đôi khi thay đổi các chỉ thị ssl trong quá trình gia hạn.

