Sửa lỗi ERR_SSL_PROTOCOL_ERROR trên Chrome khi truy cập trang HTTPS

intermediate🔒 SSL/TLS2026-05-15| Google Chrome (tất cả phiên bản), Windows 10/11, macOS, Linux, Ubuntu 20.04/22.04, Nginx 1.18+, Apache 2.4+

Error Message

ERR_SSL_PROTOCOL_ERROR
#chrome#ssl#https#nginx#apache#trình duyệt

Những Gì Bạn Đang Thấy

Bạn mở Chrome và cố tải một trang HTTPS. Thay vì hiển thị trang web, bạn nhận được màn hình trắng:

ERR_SSL_PROTOCOL_ERROR

Đôi khi thông báo hiển thị là This site can't provide a secure connection. Không có cảnh báo chứng chỉ, không tải được một phần — chỉ là dừng hoàn toàn.

Quá trình bắt tay đã bắt đầu nhưng không hoàn thành được. Chrome đã cố giao thương kết nối TLS bảo mật nhưng máy chủ (hoặc thứ gì đó ở giữa) không phản hồi đúng như mong đợi. Nguyên nhân có thể đến từ trình duyệt, mạng của bạn, hoặc chính máy chủ.

Nguyên Nhân Gốc Rễ

  • Cổng 443 đang lắng nghe nhưng SSL chưa được cấu hình — máy chủ đang phục vụ HTTP thuần trên cổng HTTPS
  • Chứng chỉ SSL cấu hình sai trên Nginx hoặc Apache
  • Phiên bản TLS cũ bị ép buộc trên máy chủ (SSLv3, TLS 1.0 — Chrome 84+ từ chối các phiên bản này)
  • Đồng hồ hệ thống sai — Chrome từ chối chứng chỉ nếu timestamp lệch hơn vài phút
  • Bộ nhớ cache trạng thái SSL của Chrome đã cũ
  • Tường lửa, proxy, hoặc phần mềm diệt virus đang chặn lưu lượng HTTPS và làm hỏng quá trình bắt tay
  • Chứng chỉ tự ký mà Chrome chưa được cấu hình để tin tưởng

Phân Tích Nhanh: Lỗi Ở Máy Bạn hay Máy Chủ?

Đừng vội vào cấu hình máy chủ. Trước tiên, hãy xác định vấn đề thực sự nằm ở đâu:

  • Thử URL đó trên Firefox hoặc Edge — nếu tải được bình thường, vấn đề nằm riêng ở Chrome
  • Chuyển sang hotspot điện thoại và thử lại — nếu hoạt động, mạng của bạn (tường lửa hoặc proxy) là nghi can
  • Kiểm tra quá trình bắt tay SSL từ terminal:
curl -vI https://yourdomain.com 2>&1 | grep -E "SSL|TLS|error|certificate"

Hoặc dùng thẳng OpenSSL:

openssl s_client -connect yourdomain.com:443 -tls1_2

OpenSSL cũng thất bại? Vấn đề nằm ở máy chủ. OpenSSL thành công nhưng Chrome vẫn báo lỗi? Hãy xem xét cài đặt Chrome và các yếu tố cục bộ trước.

Cách Sửa 1: Xóa Bộ Cache Trạng Thái SSL của Chrome

Chrome lưu dữ liệu phiên SSL để tăng tốc độ khi truy cập lại. Bộ cache cũ hoặc bị hỏng có thể kích hoạt ERR_SSL_PROTOCOL_ERROR ngay cả với chứng chỉ hoàn toàn hợp lệ.

  • Truy cập chrome://settings/
  • Tìm kiếm Clear browsing data → tab Advanced
  • Tích vào Cached images and filesCookies and other site data
  • Nhấn Clear data

Trên Windows, cũng xóa trạng thái SSL ở cấp hệ điều hành:

# Windows: Internet Options → tab Content → Clear SSL state
Start → Run → inetcpl.cpl → Content → Clear SSL state

Một nơi nữa cần kiểm tra — bộ cache HSTS của Chrome. Truy cập:

chrome://net-internals/#hsts

Nhập tên miền của bạn dưới mục Delete domain security policies và nhấn Delete.

Cách Sửa 2: Đồng Bộ Đồng Hồ Hệ Thống

Chứng chỉ SSL có ngày "not before" và "not after". Nếu đồng hồ hệ thống lệch dù chỉ 10–15 phút, Chrome sẽ từ chối quá trình bắt tay ngay lập tức.

# Linux / Ubuntu
timedatectl status
sudo timedatectl set-ntp true

# Hoặc đồng bộ thủ công
sudo ntpdate -u pool.ntp.org

Windows: nhấp chuột phải vào đồng hồ → Adjust date/time → Sync now.

Cách Sửa 3: Sửa Cấu Hình SSL của Nginx

Bạn tự quản lý máy chủ? Đây là nguyên nhân phổ biến nhất. Quên từ khóa ssl trong directive listen — hoặc trỏ đến đường dẫn chứng chỉ sai — sẽ gây ra chính xác lỗi này.

Kiểm tra cấu hình trước:

sudo nginx -t

Một server block HTTPS đúng trông như thế này:

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;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        root /var/www/html;
        index index.html;
    }
}

Ba lỗi thường gặp luôn gây ra ERR_SSL_PROTOCOL_ERROR:

  • listen 443 không có từ khóa ssl — Nginx phục vụ HTTP thuần trên cổng 443, Chrome không thể thương lượng TLS
  • Đường dẫn chứng chỉ sai — Nginx khởi động không có lỗi nhưng quá trình bắt tay thất bại âm thầm
  • Chỉ có TLSv1 hoặc TLSv1.1 trong ssl_protocols — Chrome 84+ đã bỏ hỗ trợ cả hai

Reload sau khi sửa:

sudo nginx -t && sudo systemctl reload nginx

Cách Sửa 4: Sửa Cấu Hình SSL của Apache

Apache cần bật mod_ssl và có VirtualHost được cấu trúc đúng. Bắt đầu từ đó:

# Bật module SSL nếu chưa được kích hoạt
sudo a2enmod ssl
sudo systemctl restart apache2

Một VirtualHost SSL hoạt động đúng:

<VirtualHost *:443>
    ServerName yourdomain.com
    DocumentRoot /var/www/html

    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

    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite          HIGH:!aNULL:!MD5
</VirtualHost>
sudo apachectl configtest && sudo systemctl reload apache2

Cách Sửa 5: Gia Hạn Chứng Chỉ Đã Hết Hạn

Chứng chỉ Let's Encrypt hết hạn sau mỗi 90 ngày. Kiểm tra trạng thái hiện tại:

sudo certbot certificates

Đã hết hạn hoặc còn chưa đến một tuần là hết? Ép buộc gia hạn:

sudo certbot renew --force-renewal
sudo systemctl reload nginx   # hoặc apache2

Cách Sửa 6: Tắt Tính Năng Quét HTTPS của Phần Mềm Diệt Virus

Avast, Kaspersky, ESET và các công cụ tương tự có thể chặn kết nối HTTPS và thay thế bằng chứng chỉ của riêng chúng. Chrome phát hiện chứng chỉ không mong đợi và ngắt quá trình bắt tay.

Tạm thời tắt tính năng quét HTTPS và tải lại trang. Đã sửa được? Bật lại và thêm tên miền vào danh sách ngoại lệ — đừng để tắt vĩnh viễn tính năng kiểm tra HTTPS.

Cách Sửa 7: Xóa HSTS Cho Tên Miền

Các trang web có thể yêu cầu Chrome luôn dùng HTTPS thông qua header HSTS. Nếu chứng chỉ hiện bị hỏng trên một trang đã áp dụng HSTS trước đó, Chrome sẽ không thử quay lại HTTP. Hãy xóa chính sách đã lưu:

  • Truy cập chrome://net-internals/#hsts
  • Dưới mục Delete domain security policies, nhập tên miền
  • Nhấn Delete

Xác Minh

Sau khi áp dụng cách sửa, hãy xác nhận quá trình bắt tay thực sự hoạt động:

# Kiểm tra quá trình bắt tay TLS
openssl s_client -connect yourdomain.com:443 -tls1_2

# Kiểm tra ngày hợp lệ của chứng chỉ
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

# Kiểm tra SSL toàn diện
curl -vI https://yourdomain.com 2>&1 | head -40

Trong Chrome, nhấn vào biểu tượng khóa → Connection is secureCertificate is valid. Nếu thấy thông báo đó, bạn đã hoàn thành.

Vẫn Không Hoạt Động?

Đã thử hết các cách phổ biến? Một vài nguyên nhân ít rõ ràng hơn:

  • Cổng 443 bị chặn tại tường lửa: sudo ufw status hoặc sudo firewall-cmd --list-ports
  • Tên miền phân giải sai IP: dig yourdomain.com +short
  • Chứng chỉ được cấp cho tên miền khác — các trường hợp không khớp giữa wildcard và subdomain rất dễ bỏ sót
  • Debug SSL chuyên sâu: khởi động Chrome với chrome --ssl-key-log-file=/tmp/ssl.log và phân tích bản ghi trong Wireshark

Related Error Notes