Sửa lỗi ERR_SSL_PROTOCOL_ERROR trên Chrome, Edge, localhost

Điểm chính

ERR_SSL_PROTOCOL_ERROR nghĩa là quá trình bắt tay bảo mật (TLS) bị hỏng trước khi trang kịp tải. Trên localhost, gần như luôn là do bạn mở https:// trên một máy chủ phát triển chỉ nói HTTP: hãy dùng http:// hoặc bật HTTPS. Với trang web công khai, hãy thử ở chế độ ẩn danh và trên mạng khác: nếu chỉ thiết bị của bạn bị lỗi, thủ phạm thường là tính năng quét HTTPS của phần mềm diệt virus, VPN hoặc proxy, hay một mạng đang lọc trang đó; nếu ai cũng bị lỗi, thì lỗi nằm ở cấu hình TLS của máy chủ.

Kiểm tra ngay

Hướng dẫn sửa lỗi ERR_SSL_PROTOCOL_ERROR với mô tả lỗi bắt tay SSL và các bước khắc phục cho Chrome, Edge và tất cả trình duyệt
Hướng dẫn sửa lỗi ERR_SSL_PROTOCOL_ERROR với mô tả lỗi bắt tay SSL và các bước khắc phục cho Chrome, Edge và tất cả trình duyệt
Bắt đầu đọc
  1. ERR_SSL_PROTOCOL_ERROR là gì?
  2. ERR_SSL_PROTOCOL_ERROR trông như thế nào
  3. Nguyên nhân gây ra ERR_SSL_PROTOCOL_ERROR?
  4. ERR_SSL_PROTOCOL_ERROR trên localhost (lập trình viên)
  5. Cách sửa ERR_SSL_PROTOCOL_ERROR (dành cho người dùng)
  6. Cách 1: thử chế độ ẩn danh và mạng khác
  7. Cách 2: tắt quét SSL/HTTPS của phần mềm diệt virus
  8. Cách 3: tắt VPN hoặc proxy
  9. Cách 4: tắt tiện ích mở rộng của trình duyệt
  10. Cách 5: xóa bộ nhớ đệm và cookie của trình duyệt
  11. Cách 6: loại trừ QUIC (HTTP/3)
  12. Cách 7: cập nhật trình duyệt
  13. Cách 8: xóa bộ nhớ đệm DNS
  14. Cách 9: kiểm tra ngày và giờ hệ thống
  15. Cách 10: xóa trạng thái SSL (Windows)
  16. Cách 11: đặt lại cài đặt mạng (biện pháp cuối cùng)
  17. Cách sửa ERR_SSL_PROTOCOL_ERROR (dành cho chủ website)
  18. Kiểm tra chứng chỉ SSL
  19. Bật TLS 1.2 và TLS 1.3
  20. Cài đặt chuỗi chứng chỉ đầy đủ
  21. Kiểm tra cấu hình HSTS
  22. Xác minh cấu hình máy chủ
  23. ERR_SSL_PROTOCOL_ERROR trên Android
  24. ERR_SSL_PROTOCOL_ERROR trên iPhone và iPad
  25. ERR_SSL_PROTOCOL_ERROR trên các trình duyệt khác
  26. Các mã lỗi SSL/TLS liên quan
  27. Câu hỏi thường gặp

ERR_SSL_PROTOCOL_ERROR là gì?

ERR_SSL_PROTOCOL_ERROR nghĩa là kết nối bảo mật bị hỏng ngay trong lúc bắt tay TLS, trước khi trình duyệt kịp tải bất cứ thứ gì. Chrome và Edge hiển thị lỗi này là "Trang web này không thể cung cấp kết nối an toàn. example.com đã gửi ý kiến phản hồi không hợp lệ." Nếu địa chỉ là localhost, máy chủ phát triển của bạn gần như chắc chắn đang nói HTTP thuần: hãy mở http://localhost (xem phần dành cho lập trình viên bên dưới).

Mọi kết nối HTTPS đều bắt đầu bằng một lần bắt tay TLS, trong đó trình duyệt và máy chủ thống nhất phiên bản giao thức (TLS 1.2 hoặc 1.3) cùng bộ mã hóa rồi trao đổi chứng chỉ. ERR_SSL_PROTOCOL_ERROR nghĩa là cuộc đàm phán này đổ vỡ: phía bên kia trả lời bằng thứ không phải TLS hợp lệ, hoặc từ chối lần bắt tay theo cách mà trình duyệt không phân loại được.

Lỗi xảy ra trước khi bất kỳ yêu cầu HTTP nào được gửi đi, nên đây không phải mã trạng thái HTTP. Danh sách lỗi của Chromium định nghĩa nó là lỗi -107 với đúng một dòng, "An SSL protocol error occurred": một lỗi chung cho mọi lần bắt tay hỏng, khác với lỗi -113 cụ thể là "không có phiên bản giao thức hoặc bộ mã hóa chung".

Kiểm tra thiết lập TLS của trang web ngay

ERR_SSL_PROTOCOL_ERROR trông như thế nào

Chrome và các trình duyệt nền Chromium hiển thị lỗi này dưới dạng cảnh báo toàn trang với thông báo "Trang web này không thể cung cấp kết nối an toàn." Bên dưới là mã lỗi cụ thể. Dưới đây là những biến thể bạn có thể gặp.

  • localhost sent an invalid response — phiên bản mà lập trình viên hay gặp: https:// được mở trên một máy chủ cục bộ chỉ nói HTTP thuần
  • ERR_SSL_PROTOCOL_ERROR — mã lỗi Chrome in chữ nhỏ bên dưới thông báo
  • net::ERR_SSL_PROTOCOL_ERROR — mã lỗi nội bộ đầy đủ hiển thị trong bảng điều khiển Chrome DevTools
  • Trang web này không thể cung cấp kết nối an toàn — thông báo tiêu đề mà người dùng thấy trong Chrome
  • [tên miền] đã gửi ý kiến phản hồi không hợp lệ — dòng giải thích chi tiết Chrome hiển thị bên dưới tiêu đề
  • ERR_SSL_PROTOCOL_ERROR trên tất cả trình duyệt — khi lỗi xuất hiện đồng thời trên Chrome, Edge, Brave và Opera (cho thấy vấn đề nằm ở máy chủ hoặc toàn hệ thống, không phải lỗi riêng của một trình duyệt)

Nguyên nhân gây ra ERR_SSL_PROTOCOL_ERROR?

Lỗi này có cả nguyên nhân phía máy khách (thiết bị của bạn) lẫn phía máy chủ (trang web). Xác định lỗi nằm ở phía nào là bước đầu tiên để sửa. Nếu lỗi xuất hiện trên mọi trang web, vấn đề nằm ở phía bạn. Nếu chỉ xuất hiện trên một trang cụ thể, nhiều khả năng lỗi nằm ở máy chủ.

  • HTTPS gửi đến máy chủ chỉ nói HTTP — trường hợp được tìm nhiều nhất: https://localhost trên máy chủ phát triển, hoặc một trang có cổng 443 chưa được thiết lập TLS. Trình duyệt bắt đầu bắt tay và nhận lại văn bản thuần, và Chrome báo đó là "đã gửi ý kiến phản hồi không hợp lệ".
  • Phần mềm diệt virus quét SSL/HTTPS — phần mềm bảo mật chặn HTTPS (Avast, Kaspersky, Bitdefender, ESET) tự chen vào lần bắt tay và có thể làm nó hỏng, trên mọi trang cùng lúc.
  • VPN hoặc proxy gây nhiễu — VPN và proxy doanh nghiệp kiểm tra lưu lượng HTTPS có thể làm hỏng lần bắt tay, nhất là ngay sau khi đổi mạng.
  • Mạng đang lọc trang đó — bộ lọc của nhà cung cấp mạng, trường học, cơ quan, quốc gia và các trình chặn dựa trên DNS cố ý làm hỏng lần bắt tay với những trang bị chặn. Dấu hiệu nhận biết: trang tải được bằng dữ liệu di động hoặc Wi-Fi khác.
  • Thiết lập TLS trên máy chủ bị hỏng — cổng 443 trả lời bằng HTTP thuần (khối server trên cổng 443 chưa bật TLS), hoặc một chương trình khác đang lắng nghe trên cổng 443.
  • Tiện ích mở rộng của trình duyệt — các tiện ích bảo vệ quyền riêng tư, chặn quảng cáo và bảo mật có viết lại yêu cầu HTTPS có thể gây trở ngại cho lần bắt tay.
  • Trạng thái trình duyệt đã cũ — dữ liệu phiên lưu trong bộ nhớ đệm không còn khớp với máy chủ.
  • Thường bị nhầm với lỗi này — máy chủ kẹt ở TLS 1.0 hoặc 1.1 hiện ERR_SSL_VERSION_OR_CIPHER_MISMATCH ("sử dụng giao thức không được hỗ trợ"); chứng chỉ hết hạn, sai tên hoặc tự ký, hay đồng hồ sai, hiện lỗi chứng chỉ (NET::ERR_CERT_…); còn sự cố QUIC (HTTP/3) hiện ERR_QUIC_PROTOCOL_ERROR. Xem ERR_SSL_VERSION_OR_CIPHER_MISMATCH và "Kết nối của bạn không phải là kết nối riêng tư".

ERR_SSL_PROTOCOL_ERROR trên localhost (lập trình viên)

localhost sent an invalid response. ERR_SSL_PROTOCOL_ERROR gần như luôn nghĩa là bạn đã mở https://localhost trên một máy chủ phát triển chỉ nói HTTP thuần. Trình duyệt bắt đầu bắt tay TLS, máy chủ trả lời bằng văn bản HTTP bình thường, và Chrome báo câu trả lời đó là không hợp lệ. Firefox báo cùng một lỗi này là SSL_ERROR_RX_RECORD_TOO_LONG.

  • Dùng đúng địa chỉ máy chủ in ra — đổi https://localhost:3000 thành http://localhost:3000. Máy chủ phát triển của Next.js, Vite, React, Django, Rails và Flask phục vụ HTTP trừ khi bạn bật HTTPS
  • Kiểm tra cổng — https://localhost không kèm cổng nghĩa là cổng 443. Nếu ứng dụng của bạn chạy ở cổng 3000 hoặc 5173, yêu cầu sẽ đến một chương trình khác, hoặc không đến đâu cả
  • Chrome cứ tự chuyển sang https:// — một chuyển hướng được lưu từ ứng dụng cũ trên cùng cổng có thể gây ra điều này: hãy xóa hình ảnh và tệp được lưu trong bộ nhớ đệm hoặc thử trong cửa sổ ẩn danh. (Chrome trước phiên bản 132 còn có thể giữ mục HSTS cho localhost; bạn xóa nó ở Delete domain security policies tại chrome://net-internals/#hsts)
  • Bạn cần HTTPS khi chạy cục bộ (callback OAuth, cookie bảo mật) — next dev --experimental-https tạo chứng chỉ được tin cậy cục bộ bằng mkcert; Vite nhận tùy chọn chứng chỉ trong server.https, hoặc dùng @vitejs/plugin-basic-ssl để có nhanh một chứng chỉ tự ký; ở các nơi khác, mkcert -install && mkcert localhost 127.0.0.1 tạo ra tệp mà máy chủ của bạn có thể nạp
  • Chứng chỉ tự ký cho ra lỗi khác — NET::ERR_CERT_AUTHORITY_INVALID, không phải lỗi này. Nhấp Nâng cao → Tiếp tục truy cập localhost (không an toàn), hoặc tốt hơn là dùng chứng chỉ mkcert (cờ allow-insecure-localhost cũ đã hết hạn)

Cách sửa ERR_SSL_PROTOCOL_ERROR (dành cho người dùng)

Hãy bắt đầu với Cách 1: chỉ hai phút là bạn biết vấn đề nằm ở trình duyệt, ở thiết bị hoặc mạng của bạn, hay ở trang web. Sau đó làm lần lượt xuống danh sách.

Cách 1: thử chế độ ẩn danh và mạng khác

Chế độ ẩn danh khởi động không có cookie, không có bộ nhớ đệm và không có tiện ích mở rộng (trừ khi bạn cho phép chúng chạy ở đó). Hãy mở trang trong cửa sổ ẩn danh (Ctrl+Shift+N trong Chrome và Edge, Ctrl+Shift+P trong Firefox), rồi thử trên một mạng khác, chẳng hạn dữ liệu di động của điện thoại.

Nếu trang tải được ở chế độ ẩn danh, nguyên nhân nằm trong trình duyệt của bạn: một tiện ích mở rộng hoặc dữ liệu cũ (Cách 4 và 5). Nếu chỉ tải được trên mạng khác, thì mạng của bạn hoặc một VPN hay proxy đang lọc hoặc chặn nó (Cách 3). Nếu ở đâu cũng lỗi, hãy kiểm tra trang bằng một công cụ Kiểm tra SSL: nếu nó cũng lỗi, chỉ chủ trang mới sửa được.

Cách 2: tắt quét SSL/HTTPS của phần mềm diệt virus

Nhiều phần mềm diệt virus (Avast, Kaspersky, Bitdefender, ESET, Norton) có tính năng "Quét HTTPS" hoặc "Kiểm tra SSL" chặn các kết nối được mã hóa bằng cách hoạt động như một proxy trung gian (man-in-the-middle). Khi nó xử lý sai lần bắt tay của một trang, mọi trình duyệt trên máy đều lỗi với trang đó.

Hãy tìm trong phần mềm diệt virus các cài đặt có tên Web Shield, Quét HTTPS, Quét SSL hoặc Quét kết nối mã hóa và tạm thời tắt chúng. Nếu lỗi biến mất, bạn có thể thêm tên miền bị ảnh hưởng vào danh sách ngoại lệ của phần mềm diệt virus.

Cách 3: tắt VPN hoặc proxy

VPN và proxy HTTP nằm giữa trình duyệt và máy chủ web. Một số VPN kiểm tra lưu lượng HTTPS hoặc định tuyến kết nối qua máy chủ có TLS hỏng. Proxy doanh nghiệp thường dùng cơ chế chặn SSL (tương tự quét HTTPS của phần mềm diệt virus) có thể làm hỏng lần bắt tay TLS.

Hãy tạm ngắt VPN rồi thử tải lại trang. Nếu không có VPN thì trang chạy được, vấn đề nằm ở cách VPN xử lý kết nối SSL. Hãy thử máy chủ VPN khác hoặc liên hệ nhà cung cấp VPN.

Cách 4: tắt tiện ích mở rộng của trình duyệt

Các tiện ích lọc hoặc định tuyến lại lưu lượng, chẳng hạn tiện ích VPN, proxy và tiện ích bảo mật, có thể làm hỏng kết nối an toàn.

Vào chrome://extensions/, tắt toàn bộ tiện ích rồi tải lại trang. Nếu lỗi biến mất, hãy bật lại từng tiện ích một để tìm ra thủ phạm.

Cách 5: xóa bộ nhớ đệm và cookie của trình duyệt

Cookie hoặc dữ liệu bộ nhớ đệm cũ đôi khi gây vướng, và xóa chúng chỉ mất một phút.

  • Bước 1: Nhấn Ctrl+Shift+Delete (Mac: Cmd+Shift+Delete) để mở Xoá dữ liệu duyệt web
  • Bước 2: Chọn More → Từ trước đến nay cho phạm vi thời gian
  • Bước 3: Đánh dấu Cookie và các dữ liệu khác của trang web và Tệp và hình ảnh được lưu trong bộ nhớ đệm
  • Bước 4: Nhấp Xoá dữ liệu (Xoá khỏi thiết bị này nếu bạn chưa đăng nhập) rồi khởi động lại Chrome

Với một trang cụ thể, hãy vào chrome://settings/content/all, tìm tên miền và xóa dữ liệu của nó.

Cách 6: loại trừ QUIC (HTTP/3)

Chrome thử QUIC (HTTP/3 qua UDP) song song với kết nối TCP thông thường và quay về TCP khi QUIC lỗi, nên QUIC hiếm khi gây ra ERR_SSL_PROTOCOL_ERROR. Nếu trang hoặc DevTools hiện ERR_QUIC_PROTOCOL_ERROR, thì tắt QUIC chính là cách sửa (xem ERR_QUIC_PROTOCOL_ERROR):

  • Bước 1: Gõ chrome://flags/#enable-quic vào thanh địa chỉ
  • Bước 2: Tìm Experimental QUIC protocol
  • Bước 3: Đổi từ Default sang Disabled
  • Bước 4: Nhấp Relaunch để khởi động lại Chrome

Các trang vẫn tải bình thường khi tắt QUIC, qua HTTP/2 trên TCP; hãy bật lại sau khi mạng hoặc trang đã được sửa.

Cách 7: cập nhật trình duyệt

Trình duyệt phiên bản cũ có thể thiếu các tính năng TLS và bộ mã hóa mà trang web hiện đại mong đợi, và các bản cập nhật sửa lỗi TLS.

Cập nhật Chrome: vào chrome://settings/help hoặc Menu → Trợ giúp → Giới thiệu về Google Chrome. Chrome tự tải bản cập nhật nhưng cần khởi động lại để áp dụng. Với Edge: edge://settings/help. Với Firefox: Menu → Trợ giúp → Giới thiệu về Firefox.

Cách 8: xóa bộ nhớ đệm DNS

DNS cũ có thể đưa trình duyệt đến một máy chủ cũ không còn phục vụ trang qua TLS. Xóa bộ nhớ đệm DNS buộc hệ thống tra cứu lại từ đầu.

bash
# Windows (Command Prompt as Admin)
ipconfig /flushdns

# macOS
sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder

# Linux
sudo resolvectl flush-caches

# Chrome internal DNS cache
# Visit chrome://net-internals/#dns → Click "Clear host cache"

Sau khi xóa, hãy xác minh tên miền phân giải đến đúng IP bằng công cụ Tra Cứu DNS của DNS Robot. Nếu địa chỉ IP trông sai, trang web có thể đã chuyển nhà cung cấp hosting và DNS chưa lan truyền hết.

Cách 9: kiểm tra ngày và giờ hệ thống

Đồng hồ sai thường hiện thành một lỗi khác, NET::ERR_CERT_DATE_INVALID ("Đồng hồ của bạn bị nhanh" hoặc "chậm"), vì chứng chỉ chỉ có hiệu lực giữa hai ngày. Dù vậy, loại trừ nó chỉ mất mười giây:

  • Windows: Cài đặt → Thời gian & ngôn ngữ → Ngày & giờ → Bật "Đặt thời gian tự động" và "Đặt múi giờ tự động"
  • Mac: Cài đặt hệ thống → Cài đặt chung → Ngày & Giờ → Bật "Đặt ngày và giờ tự động"
  • Linux: Chạy lệnh sudo timedatectl set-ntp true để bật đồng bộ NTP

Cách 10: xóa trạng thái SSL (Windows)

Nhiều hướng dẫn gợi ý Xóa trạng thái SSL trong Internet Options của Windows (inetcpl.cpl → Content → Clear SSL state). Thao tác này xóa bộ nhớ đệm phiên của thư viện TLS riêng của Windows, thư viện mà các ứng dụng dùng mạng của Windows sử dụng. Chrome và Edge chạy thư viện TLS riêng, nên hiếm khi nó thay đổi được gì cho chúng.

Cách tương đương cho trình duyệt đơn giản hơn: đóng mọi cửa sổ trình duyệt (kiểm tra khay hệ thống xem Chrome có đang chạy nền không) rồi mở lại. Việc đó bỏ toàn bộ phiên TLS đã lưu. Nếu lỗi vẫn còn sau khi khởi động lại hoàn toàn, hãy chuyển sang cách tiếp theo.

Cách 11: đặt lại cài đặt mạng (biện pháp cuối cùng)

Nếu mọi cách khác đều không được, hãy đặt lại ngăn xếp mạng. Trên Windows, các lệnh này đặt lại Winsock và TCP/IP, bao gồm cả địa chỉ IP tĩnh và máy chủ DNS bạn đã đặt thủ công; trên macOS và Linux chúng chỉ xóa bộ nhớ đệm DNS hoặc khởi động lại dịch vụ mạng.

bash
# Windows (Command Prompt as Admin)
netsh winsock reset
netsh int ip reset
ipconfig /release
ipconfig /renew
ipconfig /flushdns

# Then restart your computer

# macOS — flush the DNS cache
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# Linux — restart NetworkManager
sudo systemctl restart NetworkManager

Cách sửa ERR_SSL_PROTOCOL_ERROR (dành cho chủ website)

Nếu nhiều khách truy cập báo ERR_SSL_PROTOCOL_ERROR, vấn đề nằm ở máy chủ: thường là cổng 443 trả lời bằng HTTP thuần, hoặc một chương trình khác chiếm cổng đó. Lỗi chứng chỉ hiện lỗi riêng của chúng, nhưng hãy kiểm tra luôn cho chắc. (Chứng chỉ và khóa không khớp nhau sẽ khiến máy chủ không nạp được cấu hình mới: hãy kiểm tra bằng nginx -t hoặc apachectl configtest sau mỗi lần thay đổi.)

Kiểm tra chứng chỉ SSL

Bước đầu tiên là xác minh chứng chỉ SSL hợp lệ, được cài đúng cách và chưa hết hạn. Hãy dùng công cụ Kiểm tra SSL của DNS Robot để xem ngay trạng thái chứng chỉ, ngày hết hạn, tổ chức phát hành và chuỗi chứng chỉ.

Những vấn đề chứng chỉ sau hiện lỗi riêng chứ không phải ERR_SSL_PROTOCOL_ERROR, nhưng hãy sửa luôn khi đang ở đó:

  • Chứng chỉ hết hạn (NET::ERR_CERT_DATE_INVALID) — Chứng chỉ Let's Encrypt có hiệu lực 90 ngày (64 ngày từ tháng 2/2027), nên việc gia hạn phải chạy tự động; nếu nó lỗi (bộ hẹn giờ certbot không chạy, thử thách DNS hỏng), chứng chỉ sẽ âm thầm hết hạn.
  • Sai tên miền (NET::ERR_CERT_COMMON_NAME_INVALID) — Chứng chỉ được cấp cho example.com nhưng trang được phục vụ tại www.example.com (hoặc ngược lại). Chứng chỉ phải khớp chính xác tên miền hoặc có wildcard (*.example.com).
  • Chứng chỉ tự ký (NET::ERR_CERT_AUTHORITY_INVALID) — dùng cho phát triển thì được, nhưng trình duyệt không bao giờ tin cậy trong môi trường thật.
  • Chứng chỉ bị thu hồi (NET::ERR_CERT_REVOKED) — tổ chức cấp chứng chỉ đã thu hồi nó sau khi khóa bị lộ hoặc cấp sai.
  • Sai chứng chỉ cho tên miền (NET::ERR_CERT_COMMON_NAME_INVALID) — nhiều trang dùng chung một địa chỉ IP và máy chủ không dùng SNI (Server Name Indication) để chọn chứng chỉ cho từng trang.
bash
# Check certificate from command line
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null | openssl x509 -noout -dates -subject -issuer

# Check certificate chain completeness
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>&1 | grep -E "depth|Verify"

# Renew Let's Encrypt certificate
sudo certbot renew --dry-run   # test first
sudo certbot renew

Bật TLS 1.2 và TLS 1.3

Mọi trình duyệt hiện đại đều yêu cầu tối thiểu TLS 1.2: TLS 1.0 và 1.1 đã chính thức bị loại bỏ bởi RFC 8996 năm 2021. Khi một bên từ chối phiên bản của bên kia, lần bắt tay kết thúc bằng cảnh báo TLS số 70, protocol_version (RFC 8446 §6.2). Máy chủ chỉ hỗ trợ TLS 1.0 hoặc 1.1 sẽ hiện ERR_SSL_VERSION_OR_CIPHER_MISMATCH thay vì lỗi này, nhưng dù sao kết nối cũng thất bại. TLS 1.3 kết nối trong một vòng trao đổi thay vì hai vòng như TLS 1.2: hãy bật cả hai.

bash
# Nginx — ssl_protocols in nginx.conf or site config
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;

# Apache — in httpd.conf or ssl.conf
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder off

Sau khi cập nhật cấu hình TLS, hãy khởi động lại máy chủ web (sudo systemctl restart nginx hoặc sudo systemctl restart apache2) và kiểm tra bằng công cụ Kiểm tra SSL của DNS Robot để xác nhận các giao thức đang hoạt động.

Cài đặt chuỗi chứng chỉ đầy đủ

Chuỗi chứng chỉ không đầy đủ hiện thành lỗi chứng chỉ (NET::ERR_CERT_AUTHORITY_INVALID) trên những trình duyệt và ứng dụng không tự bổ sung được chứng chỉ trung gian còn thiếu, nên hãy cài đủ chuỗi khi bạn đang kiểm tra. Máy chủ phải gửi chứng chỉ của bạn cùng các chứng chỉ trung gian nối nó với một gốc đáng tin cậy.

Hầu hết tổ chức cấp chứng chỉ đều cung cấp tệp "CA bundle" hoặc "full chain". Với Let's Encrypt, hãy dùng fullchain.pem (không chỉ cert.pem). Với các CA khác, hãy tải chứng chỉ trung gian từ tài liệu của họ và nối vào chứng chỉ của bạn.

bash
# Nginx — use fullchain, not just cert
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

# Apache
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem

Kiểm tra cấu hình HSTS

HSTS (HTTP Strict Transport Security) yêu cầu trình duyệt luôn luôn dùng HTTPS cho tên miền của bạn. Nếu chính sách HSTS có max-age dài và thiết lập TLS của bạn sau đó bị hỏng, trình duyệt không thể quay về HTTP: khách truy cập nhận trang lỗi mà không có cách nào nhấp để đi tiếp.

Hãy kiểm tra header HSTS bằng công cụ Kiểm tra HTTP Header của DNS Robot. Nếu bạn đặt max-age rất dài (như 2 năm) và chứng chỉ hết hạn, những người từng truy cập trang của bạn sẽ bị khóa vào HTTPS mà không có đường lui. Để khắc phục, trước tiên hãy sửa chứng chỉ SSL, sau đó trình duyệt sẽ kết nối bình thường trở lại.

Xác minh cấu hình máy chủ

Lỗi máy chủ này làm hỏng lần bắt tay ngay cả khi chứng chỉ hợp lệ, và còn một lỗi nữa hiện thành lỗi khác:

  • Cổng 443 phục vụ HTTP thuần — nguyên nhân kinh điển phía chủ trang: trong nginx, listen 443; thiếu ssl (phải là listen 443 ssl;), hoặc một dịch vụ khác đang chiếm cổng 443.
  • Bộ mã hóa không tương thích — máy chủ chỉ đưa ra các bộ mã hóa mà trình duyệt từ chối sẽ hiện ERR_SSL_VERSION_OR_CIPHER_MISMATCH. Hãy dùng các bộ mã hóa AEAD hiện đại (AES-GCM, ChaCha20).

Hãy kiểm tra từ bên ngoài bằng openssl s_client -connect example.com:443 -servername example.com </dev/null: "wrong version number" (OpenSSL) hoặc "tlsv1 alert protocol version" (openssl có sẵn trên macOS) nghĩa là cổng 443 không nói TLS, còn nếu in ra chứng chỉ thì lần bắt tay đang hoạt động.

ERR_SSL_PROTOCOL_ERROR trên Android

Người dùng Android gặp ERR_SSL_PROTOCOL_ERROR cả trong Chrome cho Android lẫn các ứng dụng dựa trên WebView. Cách sửa hơi khác so với máy tính vì Android quản lý chứng chỉ và cài đặt mạng theo cách riêng.

  • Đổi mạng — tắt Wi-Fi và thử dữ liệu di động (hoặc ngược lại). Nếu trang tải được, mạng đang lọc hoặc chặn nó
  • Tắt DNS riêng để kiểm tra — Cài đặt → Mạng và Internet → DNS riêng → Tắt (và trong Chrome: Cài đặt → Quyền riêng tư và bảo mật → Sử dụng DNS bảo mật). Một dịch vụ DNS có lọc (chặn quảng cáo, kiểm soát của phụ huynh) đưa những trang nó chặn đến một máy chủ không hoàn tất được lần bắt tay
  • Xóa dữ liệu Chrome — Cài đặt → Ứng dụng → Chrome → Bộ nhớ → Xóa bộ nhớ đệm (nếu chưa hiệu quả thì "Quản lý bộ nhớ")
  • Cập nhật Chrome — Cửa hàng Play → ảnh hồ sơ của bạn → Quản lý ứng dụng và thiết bị → cập nhật Chrome
  • Xóa thông tin xác thực mạng — Cài đặt → Bảo mật (trên điện thoại mới hơn: Chế độ cài đặt bảo mật khác → Mã hóa và thông tin xác thực) → Xóa thông tin xác thực. Thao tác này xóa tất cả chứng chỉ do người dùng cài đặt
  • Kiểm tra ngày và giờ — Cài đặt → Hệ thống → Ngày và giờ → tự động. Đồng hồ sai hiện lỗi chứng chỉ, nhưng loại trừ nó rất nhanh
  • Đặt lại cài đặt mạng — Cài đặt → Hệ thống → Tùy chọn đặt lại, rồi chọn mục đặt lại Wi-Fi và mạng di động (tên mục thay đổi theo phiên bản Android)

ERR_SSL_PROTOCOL_ERROR trên iPhone và iPad

Trên iPhone, Chrome hiện ERR_SSL_PROTOCOL_ERROR còn Safari báo "can't establish a secure connection to the server" (không thể thiết lập kết nối an toàn đến máy chủ). Nguyên nhân giống như trên máy tính; chỉ có các công tắc nằm ở chỗ khác:

  • Đổi mạng — tắt Wi-Fi và thử dữ liệu di động. Nếu trang tải được, mạng Wi-Fi đang lọc hoặc chặn nó
  • Gỡ VPN và hồ sơ bạn không nhận ra — Cài đặt → Cài đặt chung → Quản lý VPN & thiết bị. Một hồ sơ tự cài chứng chỉ hoặc VPN riêng có thể chặn HTTPS
  • Thử khi tắt Chuyển tiếp bảo mật iCloud — Cài đặt → [tên của bạn] → iCloud → Chuyển tiếp bảo mật iCloud → tắt, rồi thử lại
  • Kiểm tra giới hạn Thời gian sử dụng — Cài đặt → Thời gian sử dụng → Giới hạn nội dung & quyền riêng tư, rồi đến mục nội dung web. Một trang bị chặn sẽ lỗi thay vì tải
  • Đặt đồng hồ tự động — Cài đặt → Cài đặt chung → Ngày & Giờ → Đặt tự động

ERR_SSL_PROTOCOL_ERROR trên các trình duyệt khác

ERR_SSL_PROTOCOL_ERROR là mã lỗi riêng của Chromium. Các trình duyệt khác hiển thị thông báo lỗi khác nhau cho cùng một sự cố bắt tay SSL.

Trình duyệtThông báo lỗiMã lỗi
Chrome / Edge / Brave / OperaTrang web này không thể cung cấp kết nối an toàn · đã gửi ý kiến phản hồi không hợp lệERR_SSL_PROTOCOL_ERROR
FirefoxKhông thể kết nối an toànSSL_ERROR_RX_RECORD_TOO_LONG khi máy chủ trả lời bằng HTTP thuần; các mã SSL_ERROR_ khác cho những lỗi bắt tay khác
Safari (Mac, iPhone)"Safari can't establish a secure connection to the server"Không hiển thị mã

Nếu lỗi xuất hiện trên tất cả trình duyệt cùng lúc, vấn đề hoặc nằm ở hệ thống của bạn (phần mềm diệt virus quét HTTPS, VPN hoặc proxy, mạng của bạn) hoặc ở máy chủ (cổng 443 không phục vụ TLS đúng cách). Nếu chỉ một trình duyệt bị lỗi, hãy kiểm tra tiện ích mở rộng và dữ liệu bộ nhớ đệm của trình duyệt đó.

Chrome có nhiều mã lỗi liên quan đến SSL. Mỗi mã cho biết một vấn đề khác nhau về bắt tay TLS hoặc chứng chỉ.

Mã lỗiÝ nghĩaNguyên nhân phổ biến
ERR_SSL_PROTOCOL_ERRORBắt tay TLS thất bại hoàn toànHTTP thuần trên cổng 443, phần mềm diệt virus hoặc proxy quét HTTPS, mạng đang lọc
ERR_SSL_VERSION_OR_CIPHER_MISMATCH"Giao thức không được hỗ trợ: máy khách và máy chủ không hỗ trợ chung một phiên bản giao thức SSL hoặc bộ mã hóa"Máy chủ dùng TLS 1.0/1.1 lỗi thời, mã hóa yếu
ERR_CERT_AUTHORITY_INVALIDChứng chỉ không được CA đáng tin cậy kýChứng chỉ tự ký, thiếu chứng chỉ trung gian, root hết hạn
ERR_CERT_DATE_INVALIDChứng chỉ hết hạn hoặc chưa có hiệu lựcChứng chỉ hết hạn, đồng hồ hệ thống sai
ERR_CERT_COMMON_NAME_INVALIDTên miền trong chứng chỉ không khớp với URLChứng chỉ cho example.com, trang ở www.example.com
ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAINXác thực ghim chứng chỉ thất bạiChứng chỉ không khớp với khóa mà trình duyệt tích hợp sẵn cho trang đó (Chrome đã bỏ header HPKP từ phiên bản 72, tháng 1/2019)

Với mọi lỗi SSL, bạn có thể chẩn đoán nhanh bằng công cụ Kiểm tra SSL của DNS Robot — công cụ hiển thị trạng thái chứng chỉ, độ đầy đủ của chuỗi, các phiên bản TLS được hỗ trợ và ngày hết hạn chỉ trong một lần quét.

Nếu trang của bạn báo trang web "sử dụng giao thức không được hỗ trợ", đó là ERR_SSL_VERSION_OR_CIPHER_MISMATCH chứ không phải lỗi này: xem cách sửa ERR_SSL_VERSION_OR_CIPHER_MISMATCH.

Nếu trang báo "example.com đã bất ngờ đóng kết nối" (ERR_CONNECTION_CLOSED), kết nối đã bị cắt chứ không phải bị hỏng khi bắt tay. Xem ERR_CONNECTION_CLOSED cho trường hợp đó.

Kiểm tra chứng chỉ SSL ngay

Dán trang web vào công cụ Kiểm tra SSL miễn phí của DNS Robot: công cụ cho biết các phiên bản TLS và bộ mã hóa mà máy chủ chấp nhận, chuỗi chứng chỉ, ngày hết hạn và tình trạng thu hồi, chấm điểm từ A+ đến F. Nếu mọi mục đều đạt, vấn đề nằm ở thiết bị hoặc mạng của bạn.

Nguồn

  1. net_error_list.h (SSL_PROTOCOL_ERROR -107, SSL_VERSION_OR_CIPHER_MISMATCH -113, CERT_DATE_INVALID -201), Chromium
  2. RFC 8996: Deprecating TLS 1.0 and TLS 1.1, IETF
  3. RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3 (§6.2 alerts), IETF
  4. next CLI: using HTTPS during development, Next.js

Câu hỏi thường gặp

ERR_SSL_PROTOCOL_ERROR có nghĩa là gì?

Nghĩa là lần bắt tay TLS mở đầu mọi kết nối HTTPS đã hỏng trước khi trang kịp tải: máy chủ gửi về thứ không phải TLS hợp lệ. Chromium gọi nó là lỗi -107, "An SSL protocol error occurred". Đây không phải mã trạng thái HTTP.

Làm sao sửa ERR_SSL_PROTOCOL_ERROR trong Chrome?

Hãy mở trang trong cửa sổ ẩn danh và trên một mạng khác. Nếu tải được ở đó, hãy tắt tiện ích mở rộng, tắt tính năng quét HTTPS của phần mềm diệt virus và mọi VPN hoặc proxy, rồi thử lại. Nếu ở đâu cũng lỗi và với ai cũng lỗi, máy chủ của trang bị cấu hình sai và chỉ chủ trang mới sửa được.

"localhost sent an invalid response" nghĩa là gì?

Bạn đã mở https:// trên một máy chủ phát triển cục bộ chỉ nói HTTP, nên nó trả lời lần bắt tay TLS bằng văn bản thuần. Hãy dùng http://localhost cùng cổng mà máy chủ in ra, hoặc bật HTTPS trong máy chủ phát triển (ví dụ next dev --experimental-https, dùng mkcert).

Tại sao ERR_SSL_PROTOCOL_ERROR xuất hiện trên mọi trang web?

Khi mọi trang đều lỗi, nguyên nhân nằm ở thiết bị hoặc mạng của bạn chứ không phải các trang web: phần mềm diệt virus quét HTTPS, VPN hoặc proxy, một dịch vụ DNS có lọc, hay một mạng chặn HTTPS. Hãy tắt từng thứ một, và thử mạng khác để xác nhận.

Tại sao chỉ một trang web hiện ERR_SSL_PROTOCOL_ERROR?

Hoặc thiết lập TLS của trang đó bị hỏng (hãy kiểm tra bằng công cụ kiểm tra SSL: nếu ở đó cũng lỗi, chỉ chủ trang mới sửa được), hoặc mạng của bạn đang lọc nó. Nếu trang tải được bằng dữ liệu di động hoặc Wi-Fi khác, thì mạng đang chặn nó.

Làm sao sửa ERR_SSL_PROTOCOL_ERROR trên Android?

Hãy thử dữ liệu di động thay cho Wi-Fi (hoặc ngược lại), rồi kiểm tra khi tắt DNS riêng (Cài đặt → Mạng và Internet → DNS riêng) và tắt DNS bảo mật của Chrome, vì các dịch vụ DNS có lọc làm hỏng lần bắt tay với những trang bị chặn. Sau đó xóa bộ nhớ đệm của Chrome trong Cài đặt → Ứng dụng → Chrome → Bộ nhớ và cập nhật Chrome.

Làm sao sửa ERR_SSL_PROTOCOL_ERROR trên iPhone?

Hãy thử dữ liệu di động thay cho Wi-Fi: nếu trang tải được, mạng Wi-Fi đang lọc nó. Sau đó gỡ các VPN và hồ sơ bạn không nhận ra trong Cài đặt → Cài đặt chung → Quản lý VPN & thiết bị, thử khi tắt Chuyển tiếp bảo mật iCloud, kiểm tra giới hạn nội dung web của Thời gian sử dụng, và đặt đồng hồ ở chế độ Đặt tự động.

ERR_SSL_PROTOCOL_ERROR có nguy hiểm không?

Bản thân lỗi thì không: đó là trình duyệt từ chối tải trang qua một kết nối nó không bảo mật được. Đừng tìm cách lách lỗi trên một trang công khai; hãy sửa nguyên nhân ở phía bạn, hoặc chờ chủ trang sửa máy chủ.

Chủ website sửa ERR_SSL_PROTOCOL_ERROR như thế nào?

Hãy bảo đảm cổng 443 thực sự phục vụ TLS, với chứng chỉ và khóa khớp nhau, bật TLS 1.2 và 1.3, tắt TLS 1.0/1.1, và cài đủ chuỗi chứng chỉ. Sau đó kiểm tra trang từ bên ngoài bằng một công cụ kiểm tra SSL, công cụ này cho thấy giao thức và chuỗi mà máy chủ thực sự đưa ra.

Sự khác biệt giữa ERR_SSL_PROTOCOL_ERROR và ERR_SSL_VERSION_OR_CIPHER_MISMATCH là gì?

ERR_SSL_PROTOCOL_ERROR (-107) là lỗi chung "lần bắt tay đã hỏng". ERR_SSL_VERSION_OR_CIPHER_MISMATCH (-113) cụ thể hơn: "máy khách và máy chủ không hỗ trợ chung một phiên bản giao thức SSL hoặc bộ mã hóa", thường do máy chủ kẹt ở TLS 1.0/1.1 hoặc mã hóa cũ. Chrome hiển thị nó là "sử dụng giao thức không được hỗ trợ".

Về tác giả

Shaik Vahid

Nhà sáng lập DNS Robot. Vahid đã làm nhiều năm trong bộ phận hỗ trợ hosting, xử lý tên miền, bản ghi DNS, chứng chỉ SSL và việc gửi email cho khách hàng. Anh xây dựng các công cụ của DNS Robot và viết những hướng dẫn này từ các lỗi mà mọi người thực sự gặp.

Kiểm Tra Chứng Chỉ SSL

Xác minh tính hợp lệ chứng chỉ SSL và chi tiết bảo mật