Tôi đang cố gắng lấy thư viện Apache Commons HttpClient (phiên bản 3.1) để bỏ qua thực tế là chứng chỉ máy chủ không thể được thiết lập là đáng tin cậy (được chứng minh bằng ngoại lệ được ném javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
).Cách đặt Apache Commons HttpClient 3.1 bỏ qua mức độ không hợp lệ của chứng chỉ HTTPS?
tôi đã tìm Make a connection to a HTTPS server from Java and ignore the validity of the security certificate cũng như Disable Certificate Validation in Java SSL Connections, nhưng câu trả lời chấp nhận đầu tiên là dành cho HttpClient 4,0 (tiếc là tôi không thể nâng cấp, trừ ai đó có thể chỉ cho tôi đi theo hướng làm thế nào để sử dụng hai phiên bản khác nhau của cùng một trong cùng một dự án), mặc dù nó có another answer with little more than a dead link that supposedly went to a 3.x solution. Mã ở trang thứ hai dường như không có tác dụng gì cả khi tôi sử dụng phiên bản điều chỉnh một chút (về cơ bản, khai báo các lớp theo kiểu cũ hơn là sử dụng các lớp ẩn danh, cũng như áp dụng cho TLS
ngoài SSL
, sử dụng SSL
cho nhà máy sản xuất ổ cắm HTTPS mặc định như được thực hiện trong mã ví dụ).
Tốt, tôi muốn một cái gì đó là thread-/Ví dụ toàn, do đó bất kỳ HttpClient
dụ (và/hoặc các lớp học liên quan) được tạo ra từ bên trong mã servlet tôi (không servlet khác chạy trong cùng một vùng chứa) sẽ sử dụng logic xác thực chứng chỉ lax, nhưng tại thời điểm này tôi bắt đầu cảm thấy như mọi thứ sẽ làm miễn là nó chấp nhận chứng chỉ tự ký là hợp lệ.
Có, tôi biết rằng có những tác động bảo mật, nhưng lý do duy nhất tại sao tôi cần điều này là dành cho mục đích thử nghiệm. Ý tưởng là triển khai tùy chọn cấu hình để kiểm soát các chứng chỉ không tin cậy thông thường có đáng tin cậy hay không và để nó trong "không tin tưởng các chứng chỉ máy chủ không đáng tin cậy" làm mặc định. Bằng cách đó nó có thể dễ dàng được bật hoặc tắt trong phát triển, nhưng làm nó trong sản xuất sẽ yêu cầu đi ra khỏi con đường của một người.
Có, 3.1 đã ngừng sử dụng hàm tạo Giao thức mà bạn minh họa và không có phương thức HttpConnection # setProtocol nào rõ ràng. Đáng tiếc, nó trông có vẻ đầy hứa hẹn. :( –
Constructor cũng không được chấp nhận trong 3.0.1;) Theo kho lưu trữ nguồn apache 'HttpConnection' vẫn có phương thức' setProtocol' trong 3.1: http://svn.apache.org/viewvc/httpcomponents/oac.hc3x /tags/HTTPCLIENT_3_1/src/java/org/apache/commons/httpclient/HttpConnection.java?view=markup – Gandalf
Nhà máy có thể được truyền tới 'ProtocolSocketFactory', đây chỉ là một upcast và do đó không cần thiết nếu chúng loại bỏ hàm tạo không được chấp nhận , sau đó nó sử dụng các contructor không được chấp nhận bây giờ, tôi sẽ cập nhật bài viết của tôi. – Gandalf