Sửa lỗi SSL_ERROR_NO_CYPHER_OVERLAP trong Firefox: Không có Cipher Suite chung giữa Server và Client

intermediate🔒 SSL/TLS2026-05-21| Firefox (tất cả phiên bản), Nginx 1.x / Apache 2.x, Ubuntu/Debian/CentOS, TLS 1.0–1.3

Error Message

SSL_ERROR_NO_CYPHER_OVERLAP
#ssl#tls#firefox#cipher-suite#nginx#apache

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ặc SSLCipherSuite (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:config và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ành 1 (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-run và 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.

Related Error Notes