Tôi đang viết một chương trình HTTPS proxy đơn giản với Java cho mục đích giáo dục. Chương trình của tôi lắng nghe trên một cổng (ví dụ:) cho các yêu cầu HTTPS đến từ trình duyệt (ví dụ: Firefox), phân tích yêu cầu và chuyển tiếp đến đích mong muốn (ví dụ https://www.comodo.com).Thực hiện một ứng dụng HTTPS HTTPS đơn giản với Java?
Cài đặt proxy của Firefox được đặt để sử dụng cổng của tôi cho kết nối SSL (127.0.0.1 : 7443
).
Mã của tôi là ngắn và đơn giản:
static // initializer
{
System.setProperty("javax.net.ssl.keyStore", "MyKeyStore");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
}
SSLServerSocketFactory ssFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
try {
SSLServerSocket listener = (SSLServerSocket) ssFactory.createServerSocket(port, 64);
listener.setUseClientMode(false);
listener.setWantClientAuth(false);
listener.setNeedClientAuth(false);
SSLSocket connection = (SSLSocket) listener.accept();
browser.startHandshake(); /* <<== Exception throws at this line */
} catch (IOException ex) {
ex.printStackTrace(System.err);
}
Nhưng tôi bắt ngoại lệ sau đây:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
Trường hợp ngoại lệ nói rằng kết nối có thể là văn bản đơn giản, nhưng chỉ có các kết nối HTTPS từ Firefox được đặt để sử dụng cổng này. Tôi đã đăng những gì Firefox được gửi đến ứng dụng của tôi mà là thế này:
CONNECT www.comodo.com:443 HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0
Proxy-Connection: keep-alive
Connection: keep-alive
Host: www.comodo.com
Firefox đang nói palin-văn bản, và tôi nghĩ rằng CONNECT
là một lệnh SOCKS (Tôi không chắc chắn mặc dù), nơi tôi có không đặt bất kỳ thứ gì trong cài đặt SOCKS của Firefox. Dưới đây là một ảnh chụp màn hình của thiết lập proxy của Firefox:
tôi đang thiếu gì ở đây?! Những gì tôi cần làm để thực hiện công việc này với Firefox hoặc bất kỳ trình duyệt nào khác?!
---------------------------------------------- --------------------------------
Đối với những người cho rằng đây là bản sao của another question và có đã được trả lời trong câu hỏi khác tôi phải nói: Vâng, cả hai câu hỏi đều có gốc rễ trong một vấn đề tương tự nhưng câu trả lời duy nhất trong câu hỏi được trích dẫn chỉ ra việc sử dụng các Ổ cắm SSL đã gây hiểu nhầm và dẫn đến câu hỏi mới này. Vì vậy, mặc dù chúng nhằm vào một vấn đề tương tự, câu hỏi này cho thấy một con đường hoàn toàn khác và sai lệch để giải quyết vấn đề và do đó nó có thể cung cấp hướng dẫn hữu ích cho những người tương lai phải đối mặt với vấn đề như vậy.
Đây không phải là bản sao của câu hỏi được trích dẫn. Hai câu hỏi rõ ràng là khác nhau và không có giải pháp chấp nhận được trong câu hỏi được trích dẫn. –
Đối với những người đã kết thúc trong chủ đề này: bạn có thể quan tâm đến ví dụ làm việc của _TheConstructor_ tại đây: http://stackoverflow.com/questions/16351413/java-https-proxy-using-https-proxyport-and-https- proxyhost – Trinimon