ERR_SSL_PROTOCOL_ERROR xuất hiện khi trình duyệt và máy chủ không thể thống nhất một kết nối mã hóa. Việc này diễn ra ở bước bắt tay, trước khi bất kỳ nội dung nào được gửi đi — nên trang không tải một phần hay tải chậm, mà đơn giản là không bao giờ bắt đầu.
Điều quan trọng nhất là biết lỗi thuộc phía nào, vì hai phía cần hai cách xử lý hoàn toàn khác nhau. Nếu chỉ mình bạn gặp, gần như luôn là đồng hồ hệ thống, phần mềm diệt virus can thiệp TLS, hoặc cache của chính trình duyệt. Nếu ai cũng gặp, đó là chứng chỉ, cấu hình hoặc phiên bản giao thức trên máy chủ.
Trước tiên: lỗi ở phía bạn hay phía máy chủ
Ba phép thử này mất chưa tới hai phút và loại bỏ được một nửa danh sách nguyên nhân.
- Mở website bằng dữ liệu di động trên điện thoại, với Wi-Fi đã tắt. Vào được nghĩa là mạng hoặc máy tính của bạn là nguyên nhân, không phải máy chủ.
- Thử bằng một trình duyệt khác. Chỉ Chrome lỗi còn Firefox thì không thường là cache TLS của Chrome hoặc một tiện ích mở rộng.
- Dùng một công cụ kiểm tra SSL trực tuyến từ máy chủ bên ngoài. Nếu nó cũng báo lỗi, vấn đề nằm ở máy chủ và bạn có thể bỏ qua toàn bộ phần kiểm tra phía máy khách.
Xem chuyện thật sự xảy ra bằng openssl
Trình duyệt che gần hết chi tiết. Một lệnh sẽ cho bạn thấy chính xác máy chủ gửi gì và bắt tay hỏng ở đâu.
Chạy: openssl s_client -connect trangcuaban.com:443 -servername trangcuaban.com. Ba dòng đầu tiên trong kết quả nói cho bạn gần như mọi thứ cần biết.
| Kết quả bạn thấy | Nghĩa là gì |
|---|---|
| Verify return code: 0 (ok) | Chứng chỉ hợp lệ — vấn đề nằm ở phía máy khách |
| unable to get local issuer certificate | Thiếu chứng chỉ trung gian trong chuỗi |
| certificate has expired | Chứng chỉ hết hạn — gia hạn là xong |
| Hostname mismatch | Chứng chỉ cấp cho tên miền khác |
| no protocols available / handshake failure | Trình duyệt và máy chủ không có phiên bản TLS chung |
Nguyên nhân phía máy chủ, phổ biến nhất trước
- Chứng chỉ đã hết hạn. Thường xảy ra khi tác vụ tự động gia hạn Let's Encrypt im lặng thất bại nhiều tháng trước mà không ai để ý.
- Thiếu chứng chỉ trung gian. Bạn cài đúng chứng chỉ của mình nhưng quên phần chuỗi kèm theo, và chỉ một số thiết bị báo lỗi.
- Chứng chỉ không khớp tên miền. Cấp cho "trangcuaban.com" nhưng khách truy cập "www.trangcuaban.com", hoặc ngược lại.
- Máy chủ chỉ còn hỗ trợ TLS 1.2 trở lên trong khi có máy khách cũ, hoặc ngược lại: máy chủ quá cũ chỉ nói được TLS 1.0 mà trình duyệt hiện đại đã từ chối.
- Sai cấu hình SNI trên máy chủ nhiều tên miền. Máy chủ trả về chứng chỉ mặc định thay vì chứng chỉ đúng của tên miền được yêu cầu.
- Cloudflare đặt ở chế độ Full trong khi máy chủ gốc không có chứng chỉ hợp lệ, hoặc chế độ SSL không khớp với thực tế trên máy chủ.
- Nginx nghe cổng 443 nhưng thiếu chỉ thị "ssl" hoặc trỏ sai đường dẫn file chứng chỉ. Lỗi này luôn xuất hiện ngay sau một lần chỉnh cấu hình.
Nguyên nhân phía máy khách, phổ biến nhất trước
- Ngày giờ hệ thống sai. Chứng chỉ có mốc hiệu lực; đồng hồ lệch khiến chứng chỉ hoàn toàn hợp lệ bị coi là không hợp lệ.
- Phần mềm diệt virus hoặc bộ lọc web can thiệp vào HTTPS. Nhiều sản phẩm chèn chứng chỉ của chính chúng vào giữa và làm hỏng bắt tay khi cấu hình không hoàn hảo.
- Cache TLS của trình duyệt còn giữ trạng thái hỏng. Trong Chrome, xóa dữ liệu duyệt web thường giải quyết được.
- Mạng công ty hoặc trường học chặn TLS. Thiết bị kiểm tra lưu lượng của tổ chức là nguyên nhân rất thường gặp khi lỗi chỉ xảy ra ở một nơi.
- Trình duyệt hoặc hệ điều hành quá cũ. Máy chưa cập nhật nhiều năm sẽ không hỗ trợ các bộ mã hóa mà máy chủ hiện đại yêu cầu.
- Tiện ích mở rộng VPN hoặc proxy. Thử tắt hết tiện ích, hoặc dùng cửa sổ ẩn danh với tiện ích đã vô hiệu hóa.
Sửa cho đúng và không để tái diễn
Phần lớn sự cố SSL trên máy chủ là sự cố của quy trình chứ không phải của cấu hình, và đó cũng là chỗ nên đầu tư công sức.
Xác minh việc tự động gia hạn thật sự đang chạy chứ đừng chỉ tin là nó chạy. Với certbot, "certbot renew --dry-run" cho biết lần gia hạn thật sẽ thành công hay thất bại. Rất nhiều website sập vì chứng chỉ chỉ đơn giản là tác vụ này đã hỏng từ lâu mà không ai kiểm tra.
Đặt cảnh báo hết hạn ở nơi bạn thực sự nhìn thấy. Ba mươi ngày trước hạn là khoảng thời gian hợp lý để xử lý mà không vội vàng.
Luôn cài đầy đủ chuỗi chứng chỉ. Nhà cung cấp cấp cho bạn cả chứng chỉ và phần trung gian; cài thiếu sẽ tạo ra lỗi chỉ xuất hiện trên một phần thiết bị và cực kỳ khó chẩn đoán.
Sau mỗi lần đổi cấu hình SSL, kiểm tra bằng openssl từ một máy khác chứ đừng chỉ mở trình duyệt trên máy của mình. Trình duyệt của bạn đã lưu quá nhiều thứ để cho ra một kết quả trung thực.
Muốn tự quản chứng chỉ và cấu hình TLS của mình?
Cloud VPS với quyền root đầy đủ — cài Let's Encrypt, đặt lịch tự gia hạn và chỉnh TLS theo ý mình. Từ ฿150/tháng.
Câu hỏi thường gặp
Chứng chỉ của tôi còn hạn nhưng vẫn báo lỗi. Vì sao?
Nguyên nhân phổ biến nhất là thiếu chứng chỉ trung gian. Chứng chỉ của bạn hợp lệ nhưng trình duyệt không nối được nó tới một cơ quan cấp phát gốc đáng tin. Chạy "openssl s_client -connect tenmien.com:443"; nếu thấy dòng "unable to get local issuer certificate" thì đó chính là vấn đề.
Vì sao website mở được trên máy tính nhưng lỗi trên điện thoại?
Gần như luôn là chuỗi chứng chỉ không đầy đủ. Trình duyệt máy tính thường tự tải phần trung gian còn thiếu, còn thiết bị di động và ứng dụng thì không. Website không hỏng "chỉ trên điện thoại" — nó thiếu chuỗi ở mọi nơi, chỉ là máy tính che giấu điều đó.
Có nên bỏ qua cảnh báo và vào tiếp không?
Không, trừ khi đó là máy chủ của chính bạn và bạn biết chính xác vì sao có cảnh báo. Cảnh báo SSL cũng chính là thứ xuất hiện khi có người chặn giữa kết nối, nên tập thói quen bấm bỏ qua sẽ vô hiệu hóa chính lớp bảo vệ đó.
Lỗi SSL ảnh hưởng thứ hạng tìm kiếm thế nào?
Trực tiếp và nhanh chóng. Googlebot không hoàn tất được bắt tay nên không lấy được nội dung, trang không thu thập được thì không ở lại chỉ mục. HTTPS cũng là một tín hiệu xếp hạng, nên chứng chỉ hỏng vừa chặn thu thập vừa mất tín hiệu đó cùng lúc.
GUIDES
Bài viết liên quan
Đọc tiếp các chủ đề tương tự
ERR_TOO_MANY_REDIRECTS — Nguyên nhân và cách khắc phục
Lỗi này gần như luôn là hai thành phần cùng cố sửa cùng một thứ theo hai hướng ngược nhau. Chỉ cần một lệnh curl là bạn thấy toàn bộ vòng lặp và biết chính xác cấu hình nào đang cãi nhau.
Đọc tiếpERR_CONNECTION_TIMED_OUT — Nguyên nhân và cách khắc phục
Trang quay mãi rồi Chrome bỏ cuộc với ERR_CONNECTION_TIMED_OUT. Bài này chỉ cách xác định trong hai phút vấn đề nằm ở phía bạn hay phía máy chủ, rồi các bước sửa tương ứng cho từng phía.
Đọc tiếp502 Bad Gateway — Ý nghĩa và cách khắc phục
502 nghĩa là một máy chủ đã hỏi máy chủ khác để lấy trang và nhận về thứ không dùng được. Bài này giải thích hai máy nào đang liên quan, khác biệt với 500 và 504, cùng thứ tự kiểm tra để bạn tìm đúng nguyên nhân trước tiên.
Đọc tiếp