Lỗi chứng chỉ SSL khi dùng proxy: kiểm tra giờ hệ thống, phần mềm và cấu hình
Cập nhật:
Một proxy HTTP/HTTPS bình thường không thay đổi chứng chỉ SSL của website. Khi bạn mở trang HTTPS qua proxy, trình duyệt tạo một đường hầm qua proxy và bắt tay mã hoá trực tiếp với website, nên chứng chỉ bạn thấy vẫn là chứng chỉ thật của website đó. Vì vậy khi gặp lỗi chứng chỉ SSL lúc dùng proxy, nguyên nhân thường nằm trên máy bạn: giờ hệ thống sai, antivirus hoặc phần mềm quét HTTPS chèn chứng chỉ riêng, hệ điều hành thiếu chứng chỉ gốc mới, hoặc code ghi sai giao thức của proxy. Bài này giúp bạn tìm đúng nguyên nhân và sửa mà không phải tắt kiểm tra chứng chỉ.
Proxy HTTP xử lý HTTPS như thế nào
Khi trình duyệt cần mở https://example.com qua proxy, nó gửi lệnh CONNECT example.com:443 tới proxy. Proxy mở kết nối tới website rồi chuyển tiếp dữ liệu hai chiều mà không đọc được nội dung. Toàn bộ phần bắt tay SSL, kiểm tra chứng chỉ và mã hoá diễn ra giữa trình duyệt và website. Proxy chỉ thấy tên miền và lượng dữ liệu.
Điều này có hai hệ quả. Một, proxy không làm lưu lượng an toàn hơn hay kém an toàn hơn so với HTTPS vốn có; proxy không phải VPN và không thêm lớp mã hoá nào, như đã giải thích trong bài proxy và VPN khác nhau thế nào. Hai, nếu chứng chỉ bạn nhận được không phải của website, nghĩa là có phần mềm nào đó đang đứng giữa, và cần tìm ra nó.
Bảng lỗi thường gặp
| Thông báo | Nguyên nhân thường gặp | Hướng xử lý |
|---|---|---|
| NET::ERR_CERT_DATE_INVALID | Giờ hoặc ngày trên máy sai | Bật đồng bộ giờ tự động |
| NET::ERR_CERT_AUTHORITY_INVALID | Phần mềm quét HTTPS hoặc mạng công ty chèn chứng chỉ riêng | Kiểm tra bên phát hành chứng chỉ, tắt quét HTTPS |
| SSL: CERTIFICATE_VERIFY_FAILED (Python) | Thiếu chứng chỉ gốc hoặc môi trường có chứng chỉ chèn | Cập nhật gói chứng chỉ, kiểm tra biến môi trường |
| wrong version number | Ghi https:// cho địa chỉ proxy trong khi proxy nhận HTTP thường | Dùng http://ip:port làm địa chỉ proxy |
| Lỗi chỉ xảy ra trên một website | Website có vấn đề chứng chỉ, không liên quan proxy | Thử mở không qua proxy để so sánh |
Bước 1: kiểm tra giờ hệ thống
Chứng chỉ có ngày bắt đầu và ngày hết hạn. Nếu đồng hồ máy bạn lệch nhiều, mọi chứng chỉ đều bị coi là chưa có hiệu lực hoặc đã hết hạn. Lỗi này hay gặp trên máy ảo mới khôi phục, máy hết pin CMOS, hoặc khi bạn chỉnh tay múi giờ để khớp với proxy nhưng lại chỉnh sai giờ.
Cách sửa: bật đồng bộ thời gian tự động trong cài đặt ngày giờ của Windows hoặc macOS. Nếu muốn trình duyệt có múi giờ khớp với quốc gia proxy, hãy đặt múi giờ trong profile trình duyệt antidetect thay vì đổi giờ hệ thống; xem bài khớp múi giờ và ngôn ngữ với proxy.
Bước 2: xem ai phát hành chứng chỉ
Trên Chrome, bấm vào biểu tượng bên trái thanh địa chỉ, chọn mục kết nối an toàn rồi xem chứng chỉ. Nhìn vào dòng tổ chức phát hành. Nếu tên đó là một phần mềm diệt virus, một công cụ debug như Fiddler hay Charles, hoặc tên công ty bạn, thì phần mềm đó đang giải mã HTTPS của bạn.
Antivirus quét HTTPS thường cài chứng chỉ gốc riêng vào hệ thống để trình duyệt tin tưởng. Khi đi qua proxy, một số sản phẩm xử lý không đúng đường hầm và gây lỗi. Tắt tạm tính năng quét web hoặc quét HTTPS để thử, rồi thêm ngoại lệ thay vì tắt hẳn. Nếu là mạng công ty, hãy hỏi bộ phận IT trước khi dùng proxy riêng trên máy công ty.
Bước 3: lỗi SSL trong code và công cụ dòng lệnh
Lỗi phổ biến nhất trong code là ghi địa chỉ proxy bằng https://. Với proxy HTTP/HTTPS thông thường, địa chỉ proxy vẫn là http://user:pass@ip:port, kể cả khi website đích dùng HTTPS. Chữ HTTPS trong tên loại proxy nghĩa là proxy chuyển tiếp được trang HTTPS, không có nghĩa là bạn kết nối tới proxy bằng SSL.
Ví dụ đúng với Python requests:
proxies = {"http": "http://user:pass@ip:port", "https": "http://user:pass@ip:port"}requests.get("https://api.ipify.org", proxies=proxies, timeout=15)- Nếu vẫn báo
CERTIFICATE_VERIFY_FAILED, cập nhật góicertifivà kiểm tra biếnREQUESTS_CA_BUNDLEhaySSL_CERT_FILEcó trỏ tới file lạ không. - Với
curl, so sánh kết quả khi có và không có-x. Nếu không có proxy cũng lỗi, vấn đề không nằm ở proxy.
Đừng tắt kiểm tra chứng chỉ
Các mẹo như curl -k, verify=False hay bấm Tiếp tục bất chấp cảnh báo làm lỗi biến mất nhưng cũng tắt luôn lớp bảo vệ giúp bạn biết mình đang nói chuyện với đúng website. Chỉ dùng chúng trong vài giây để chẩn đoán, không đưa vào code chạy thật và không dùng khi đăng nhập tài khoản. Nếu cần tích hợp proxy vào code, xem hướng dẫn Python requests với proxy hoặc Node.js axios.
Khi nào nghi ngờ proxy
Một proxy riêng của nhà cung cấp uy tín không có lý do gì để chèn chứng chỉ. Nếu bạn đã loại trừ giờ hệ thống, phần mềm trên máy và cấu hình code, mà chứng chỉ vẫn do một bên lạ phát hành chỉ khi đi qua một proxy cụ thể, hãy ngừng đăng nhập tài khoản qua proxy đó và báo cho nhà cung cấp. Với proxy của VinaProxy, gửi ticket kèm IP proxy, website và ảnh chụp thông tin chứng chỉ. Đây cũng là lý do không nên dùng proxy miễn phí trôi nổi cho tài khoản quan trọng; xem thêm rủi ro của proxy giá rẻ.
Câu hỏi thường gặp
Proxy có làm hỏng chứng chỉ SSL không?
Proxy HTTP/HTTPS bình thường chỉ tạo đường hầm và không thay chứng chỉ. Lỗi chứng chỉ thường do giờ hệ thống, phần mềm quét HTTPS hoặc cấu hình sai trên máy bạn.
Có nên bấm tiếp tục khi trình duyệt cảnh báo chứng chỉ?
Không, nhất là khi đăng nhập tài khoản. Hãy tìm nguyên nhân trước; cảnh báo này tồn tại để bảo vệ bạn khỏi bị nghe lén.
Trong code nên ghi proxy là http hay https?
Với proxy HTTP/HTTPS thông thường, ghi http://user:pass@ip:port cho cả hai khoá http và https. Website đích vẫn dùng HTTPS bình thường qua đường hầm.
Vì sao chỉ một website báo lỗi SSL?
Có thể chính website đó có chứng chỉ hết hạn hoặc cấu hình sai. Mở website khi không bật proxy để so sánh trước khi kết luận.
Đổi múi giờ để khớp proxy có gây lỗi SSL không?
Đổi múi giờ thì không, nhưng chỉnh tay giờ hệ thống sai thì có. Hãy đặt múi giờ trong profile trình duyệt và để giờ hệ thống tự đồng bộ.
Proxy riêng, không chèn chứng chỉ
Proxy HTTP/HTTPS dùng riêng, IP cố định, xác thực user và mật khẩu. Kích hoạt tự động sau khi thanh toán, hỗ trợ ticket 24/7.
Xem bảng giá