Nếu bạn muốn thay đổi giấy chứng nhận được sử dụng tùy thuộc vào kết nối được thực hiện, bạn sẽ cần phải cấu hình một SSLContext
làm như vậy, như mô tả trong câu trả lời này: https://stackoverflow.com/a/3713147/372643
Theo như tôi biết, Axis 2 sử dụng Apache HttpClient 3.x, vì vậy bạn sẽ cần phải làm theo cách của nó để cấu hình SSLContext
(và X509KeyManager
nếu cần). Cách dễ nhất có thể là định cấu hình trình xử lý giao thức https
toàn cầu của Apache HttpClient với SSLContext
của bạn, được thiết lập với cấu hình X509KeyManager
để chọn chứng chỉ ứng dụng khách theo yêu cầu của bạn (qua chooseClientAlias
).
Nếu tổ chức phát hành và kết nối Socket
(có thể là địa chỉ từ xa) không đủ để quyết định chọn chứng chỉ nào, bạn có thể cần phải thực hiện một logic phức tạp hơn, gần như chắc chắn sẽ yêu cầu đồng bộ hóa cẩn thận với phần còn lại của ứng dụng của bạn.
EDIT:
Một khi bạn đã xây dựng SSLContext
của bạn và X509KeyManager
, bạn cần phải vượt qua chúng để Apache HttpClient 3.x. Đối với điều này, bạn có thể xây dựng SecureProtocolSocketFactory của riêng bạn, mà sẽ xây dựng các ổ cắm từ này SSLContext
(thông qua một SSLSocketFactory
, xem SSLContext
phương pháp). Có các ví dụ trong số Apache HttpClient 3.x SSL guide. Tránh EasySSLProtocolSocketFactory
, vì nó sẽ không kiểm tra bất kỳ cert máy chủ nào (do đó cho phép tấn công MITM). Bạn cũng có thể thử this implementation.
Lưu ý rằng bạn chỉ thực sự cần phải tùy chỉnh X509KeyManager
của bạn, bạn có thể khởi tạo của bạn SSLContext
(thông qua init
) với null
cho các thông số khác để giữ các giá trị mặc định (đặc biệt là các thiết lập niềm tin mặc định).
Sau đó, "cài đặt" SecureProtocolSocketFactory
này trên toàn cầu cho Apache HttpClient 3.x sử dụng một cái gì đó như thế này:
Protocol.registerProtocol("https", new Protocol("https",
(ProtocolSocketFactory)secureProtocolSocketFactory, 443));
¿này sẽ đưa vào tài khoản mà bạn cần giấy chứng nhận hiện tại để lấy một tin nhắn với giấy chứng nhận mới? Ngoài ra, máy khách WS phải có khả năng thay thế chứng chỉ trong kho khóa bởi vì nó không thể sống bên ngoài kho khóa và giữ nguyên java. – Alfabravo