Proxy HTTP và HTTPS

Proxy HTTP và HTTPS

Proxy HTTP nhận yêu cầu web từ trình duyệt hoặc ứng dụng rồi kết nối đến đích thay bạn. Nó có thể mang lưu lượng HTTP thông thường và, khi hỗ trợ phương thức CONNECT, lưu lượng HTTPS mã hóa. Proxy HTTPS thêm mã hóa cho kết nối giữa ứng dụng và chính proxy.

Đây là hai lựa chọn riêng: cách ứng dụng đến proxy và cách nó giao tiếp với website qua proxy. Hiểu cả hai giúp chọn thông tin kết nối đúng. Lựa chọn tổng quát giữa các giao thức có trong Proxy SOCKS và HTTP.

Proxy HTTP làm gì với yêu cầu web

Giả sử tập lệnh giám sát yêu cầu http://example.com/catalog. Thay vì mở kết nối đến website, nó kết nối proxy được cấu hình. Với HTTP/1.1, nó gửi URL đích đầy đủ trong yêu cầu để proxy biết máy chủ và trang cần liên hệ. Proxy chuyển tiếp yêu cầu và trả phản hồi website về tập lệnh.

Ở chế độ này, proxy xử lý thông điệp HTTP. Nó đọc được phương thức như GET hay POST, địa chỉ yêu cầu, tiêu đề và dữ liệu gửi kèm. Phần mềm được cấu hình có thể áp quy tắc truy cập, ghi yêu cầu hoặc lưu đệm phản hồi đủ điều kiện. Bộ nhớ đệm là chức năng tùy chọn theo quy tắc lưu đệm của phản hồi; mua quyền truy cập proxy HTTP không có nghĩa mọi trang đều được lưu đệm.

Website nhận kết nối mạng từ IP đầu ra proxy. HTTP không cho biết IP đến từ đâu hay được cấp bao lâu. Cùng giao thức có thể cung cấp với địa chỉ trung tâm dữ liệu, ISP, dân cư hoặc di động, dùng IP cố định hoặc nhóm xoay.

Bên trái, CONNECT giữa ứng dụng và proxy HTTP có thể đọc được trên mạng. Bên phải, cùng yêu cầu nằm trong TLS đến proxy HTTPS. Nội dung website HTTPS được mã hóa trong cả hai trường hợp.

Cách proxy HTTP mở website HTTPS

Website HTTPS dùng TLS để bảo vệ trao đổi giữa ứng dụng và website. Để mang trao đổi đó, proxy HTTP trước hết tạo đường hầm. Với yêu cầu https://example.com/catalog, trình tự là:

Bốn bước: CONNECT đến proxy, kết nối đích và xác nhận đường hầm, kiểm tra chứng chỉ TLS, rồi lưu lượng mã hóa.
  1. Ứng dụng kết nối proxy và yêu cầu mở đường hầm đến example.com:443 bằng phương thức CONNECT. Yêu cầu nêu tên máy và cổng đích, không có đường dẫn trang.
  2. Proxy kiểm tra quyền truy cập và đích yêu cầu có được phép không, gồm xác thực proxy cần thiết. Nó mở kết nối đến đích và xác nhận đường hầm đã sẵn sàng.
  3. Ứng dụng bắt tay TLS với website qua đường hầm và kiểm tra chứng chỉ website.
  4. Ứng dụng gửi yêu cầu web trong kết nối TLS đó. Proxy chuyển tiếp byte mã hóa theo cả hai chiều.

Proxy không cần đọc trang để giao nó. Ứng dụng và website vẫn là hai đầu kết nối TLS của website. CONNECT cung cấp đường hầm; TLS mã hóa và bảo vệ trao đổi khỏi thay đổi không bị phát hiện.

Vì vậy, proxy HTTP có thể mở website HTTPS dù địa chỉ proxy bắt đầu bằng http://. Bảo vệ HTTPS của website hoạt động bên trong đường hầm, không phụ thuộc vào TLS giữa ứng dụng và proxy.

Proxy HTTPS bổ sung gì

Với proxy HTTPS, ứng dụng trước hết thiết lập TLS với proxy và xác minh chứng chỉ proxy. Sau đó, nó gửi yêu cầu HTTP hoặc yêu cầu CONNECT tạo đường hầm bên trong kết nối được bảo vệ. Người quan sát mạng giữa ứng dụng và proxy không thể đọc các yêu cầu đó.

Với đích HTTPS, ứng dụng giữ hai kết nối TLS riêng: một với proxy và một với website qua đường hầm. Proxy gỡ bảo vệ ngoài dành cho mình, nhưng dữ liệu website bên trong vẫn mã hóa. Nó chuyển các byte đến website, nơi giải mã được. Với đích HTTP, không có TLS bên trong: chỉ đường đến proxy được bảo vệ.

Kết nối đến proxyĐíchPhần nào được mã hóa?
HTTPWebsite HTTPKhông kết nối nào dùng TLS. Yêu cầu và phản hồi đọc được trên tuyến đường.
HTTPWebsite HTTPSTrao đổi website được mã hóa qua đường hầm. CONNECT và xác thực proxy không được TLS bảo vệ trên đường đến proxy.
HTTPSWebsite HTTPTLS bảo vệ đường đến proxy. Proxy đọc được yêu cầu web và gửi đến website HTTP mà không có TLS.
HTTPSWebsite HTTPSTLS bảo vệ yêu cầu đến proxy, một TLS riêng bảo vệ trao đổi website bên trong đường hầm.

So sánh mô tả chuyển tiếp proxy thông thường có bật kiểm tra chứng chỉ, không kiểm tra nội dung HTTPS hay VPN riêng. Mã hóa đường đến proxy không nâng website HTTP thành HTTPS.

Proxy và website thấy được gì

Với đích HTTPS, proxy chuyển tiếp không đọc được đường dẫn trang, tham số truy vấn, cookie, dữ liệu biểu mẫu hay nội dung trả về bên trong TLS. Nó vẫn biết IP máy khách kết nối đến mình, tên máy và cổng đích trong CONNECT, thời gian và dung lượng lưu lượng. TLS đến proxy giấu CONNECT khỏi người quan sát đoạn mạng đó, nhưng không giấu với proxy phải xử lý nó.

Thông tin xác thực proxy được gửi riêng với đăng nhập website. Xác thực proxy Basic mã hóa biểu diễn tên người dùng và mật khẩu bằng Base64, có thể giải mã biểu diễn mà không cần khóa bí mật. Qua kết nối HTTP thuần đến proxy, điều này không bảo vệ khỏi người quan sát mạng. HTTPS của website bắt đầu bên trong đường hầm, không bao phủ đăng nhập proxy trước đó. TLS đến proxy bảo vệ đăng nhập khi truyền.

Ở đầu kia, website nhận lưu lượng từ IP đầu ra và đọc yêu cầu gửi cho nó. Nó có thể nhận ra tài khoản, cookie phiên hoặc thông tin ứng dụng gửi. Chọn proxy HTTPS không loại các mã nhận diện đó hay tự tăng khả năng website chấp nhận IP đầu ra.

Kiểm tra nội dung HTTPS là cấu hình khác trong một số mạng quản lý và công cụ gỡ lỗi. Ứng dụng tin một tổ chức cấp chứng chỉ do proxy kiểm tra kiểm soát; proxy khi đó đọc được lưu lượng trong khi duy trì TLS riêng ở hai phía. Chuyển tiếp CONNECT bình thường không đòi cài chứng chỉ như vậy. Tin chứng chỉ máy chủ riêng của proxy HTTPS khác với cho phép nó giả danh website.

Ứng dụng tạo yêu cầu GET có cookie. Proxy chuyển tiếp nội dung mã hóa mà không đọc; nó biết tên máy và cổng từ CONNECT. Website giải mã yêu cầu, đọc đường dẫn và cookie. Chuyển tiếp HTTPS thông thường, không giải mã trung gian.

Cách đọc thiết lập kết nối

Thiết lập proxy cần địa chỉ, cổng, giao thức kết nối và xác thực nếu có. Giao thức trong URL proxy áp dụng cho proxy. Giao thức trong URL đích áp dụng cho website.

Các lệnh curl này yêu cầu cùng website HTTPS qua hai kiểu kết nối proxy. Thay tên máy và cổng proxy bằng giá trị được cấp cho cách kết nối đã chọn:

curl --proxy http://proxy.example:8080 https://example.com/
curl --proxy https://proxy.example:8443 https://example.com/

Lệnh đầu kết nối proxy qua HTTP rồi tạo CONNECT và TLS đến website. Lệnh sau tạo TLS đến proxy HTTPS trước rồi mang kết nối TLS riêng của website qua đó. Trong cả hai trường hợp, cũng cung cấp xác thực mà dịch vụ yêu cầu.

Chỉ đổi http:// sang https:// không biến cổng chỉ hỗ trợ HTTP thành điểm TLS. Nếu dịch vụ có tên máy cho HTTPS, hãy dùng tên đó: thay bằng IP có thể gây lỗi không khớp tên chứng chỉ.

Nhãn trong ứng dụng cũng cần đọc kỹ. Ô “HTTPS proxy” có thể chọn proxy cho website HTTPS nhưng vẫn kết nối proxy bằng HTTP thuần. Trong curl, biến HTTPS_PROXY cũng chọn proxy cho đích HTTPS; giá trị bắt đầu bằng http:// vẫn có thể đúng. Nhãn nói yêu cầu nào dùng thiết lập, còn phần giao thức trong URL proxy nói cách tạo kết nối.

DNS và lưu lượng qua proxy

Khi máy khách HTTP gửi tên máy đích, proxy thường tra IP rồi kết nối. Máy khách tra riêng nếu cần tên máy proxy để đến proxy. Trình duyệt cũng có thể gửi truy vấn DNS để dự đoán hoặc tính năng khác. Đây là các lần tra riêng; đặt proxy web không định tuyến mọi yêu cầu DNS qua nó.

Thiết lập áp dụng cho lưu lượng ứng dụng thực gửi đến proxy. Chương trình khác có thể vẫn kết nối trực tiếp; danh sách ngoại lệ có thể bỏ qua proxy cho một số website. Chẳng hạn, định tuyến tập lệnh API qua proxy không đổi tuyến của trình duyệt không liên quan. Kiểm tra địa chỉ đầu ra từ đúng ứng dụng và cấu hình sẽ chạy tác vụ.

Máy khách phân giải tên proxy. Sau khi nhận tên website, proxy phân giải nó. Ứng dụng khác hoặc quy tắc bỏ qua có thể dùng đường trực tiếp.

HTTP/2 đến website và HTTP/2 đến proxy

HTTP/2 cho nhiều trao đổi chung một kết nối bằng các luồng riêng. Với proxy, cần biết kết nối nào hỗ trợ. Ứng dụng có thể thương lượng HTTP/2 với website bên trong đường hầm tạo bằng CONNECT HTTP/1.1. Proxy chuyển tiếp byte mã hóa và không cần hiểu thông điệp HTTP/2 của website.

HTTP/2 giữa ứng dụng và proxy là khả năng riêng. Mỗi đường hầm CONNECT dùng một luồng HTTP/2, nên nhiều đường hầm có thể chung một kết nối đến proxy. Chẳng hạn, đường hầm đến hai website khác nhau có thể dùng kết nối đó mà vẫn giữ kết nối đích và phiên TLS website tách biệt. Điều này giảm nhu cầu thêm kết nối máy khách–proxy; không khiến proxy đọc được yêu cầu website mã hóa.

Hai phía phải hỗ trợ chế độ chọn. Chỉ HTTPS không xác định HTTP/2: proxy HTTPS có thể dùng HTTP/1.1. Hiệu năng cũng tùy máy khách, tuyến mạng, tải máy chủ và dùng lại kết nối. Nhãn HTTP/2 không đảm bảo tăng tốc cho mọi tác vụ.

Bên trái, HTTP/2 website chạy trong đường hầm TLS tạo bằng HTTP/1.1. Bên phải, hai đường hầm CONNECT dùng các luồng của một kết nối HTTP/2 đến proxy.

Đường hầm CONNECT thông thường cũng mang được giao thức TCP khác nếu ứng dụng và proxy cho phép, dù cổng đích có thể hạn chế. Nó không chuyển tiếp UDP. HTTP/3 dùng QUIC trên UDP nên không thể đi qua đường hầm TCP đó cùng cách. Chuyển tiếp UDP dựa trên HTTP dùng cơ chế bổ sung như CONNECT-UDP, cần triển khai tương thích. Chỉ hỗ trợ HTTPS hoặc HTTP/2 không chứng minh hỗ trợ đó.

Khi quyền truy cập proxy HTTP và HTTPS hữu ích

Với duyệt web và thử website, proxy HTTP có CONNECT cung cấp một cách kết nối cho cả đích HTTP và HTTPS. Nhóm có thể xem website từ mạng proxy trong khi trình duyệt vẫn lo dựng trang, cookie và đăng nhập website.

Với trình thu thập, máy khách API và giám sát theo lịch, máy khách HTTP có thể gửi yêu cầu qua IP đầu ra chọn trước trong khi giữ URL đích. Ứng dụng vẫn chuẩn bị yêu cầu và xử lý phản hồi. Trong đường hầm HTTPS, proxy mang trao đổi mà không cần phân tích từng trang hoặc lời gọi API.

Proxy HTTPS được TLS bảo vệ hữu ích khi cả đường đến proxy cần bảo vệ, gồm đăng nhập proxy và yêu cầu đến đích. Điều này quan trọng khi kết nối qua mạng ngoài quyền kiểm soát. Máy khách phải hỗ trợ TLS đến chính proxy; chỉ mở được website HTTPS không đủ.

Đọc lỗi kết nối

Lỗi có thể xảy ra khi đến proxy, mở đường hầm hoặc trao đổi với website. Giai đoạn cho biết nhiều hơn chỉ mã lỗi.

Hiện tượngNơi cần xem
Proxy trả 407Proxy yêu cầu xác thực. Kiểm tra thông tin xác thực hoặc phương thức truy cập cần thiết; tài khoản website là đăng nhập khác.
HTTP chạy nhưng HTTPS khôngKiểm tra máy khách có dùng đúng proxy cho HTTPS, CONNECT có được phép và cổng đích có được chấp nhận không.
Có lỗi TLS hoặc chứng chỉXác định lỗi từ kết nối proxy hay website. Kiểm tra tên máy, điểm TLS và độ tin cậy chứng chỉ liên quan thay vì tắt xác minh chứng chỉ.
Nhận phản hồi 403Từ chối CONNECT đến từ proxy. Phản hồi 403 bên trong kết nối HTTPS đã thiết lập và xác minh bình thường là phản hồi website. Đây là các giai đoạn khác, cần cách sửa khác.

Đường hầm và bắt tay TLS hoàn tất cho thấy tuyến kết nối hoạt động. Chúng không đảm bảo website chấp nhận tài khoản, IP đầu ra hay yêu cầu cụ thể. Vì vậy, thử thách đăng nhập, CAPTCHA hoặc giới hạn yêu cầu có thể cần xử lý ở website hoặc ứng dụng dù proxy vẫn chạy.

Quay lại cơ sở kiến thức