Наша система взаимодействует с несколькими поставщиками веб-сервисов. Все они вызывается из одного клиентского приложения Java. Все веб-службы до сих пор прошли через SSL, но ни один из них не использует клиентские сертификаты. Ну, новый партнер меняет это.
Сделать приложение использовать сертификат для вызова очень просто; настройка javax.net.ssl.keyStore
и javax.net.ssl.keyStorePassword
сделает это. Однако проблема заключается в том, как сделать так, чтобы он использовал только сертификат при вызове этой конкретной веб-службы. Я предполагаю, что в более общем плане мы хотели бы иметь возможность выбирать сертификат клиента, который будет использоваться, если таковой имеется.
Одним быстрым решением может быть настройка свойств системы, вызов методов и их снятие. Единственная проблема заключается в том, что мы имеем дело с многопоточным приложением, поэтому теперь нам нужно будет иметь дело с синхронизацией или блокировками или тем, что у вас есть.
Каждый клиент службы должен быть полностью независим друг от друга, и они индивидуально упакованы в отдельные JAR. Таким образом, один из вариантов, который произошел со мной (хотя мы не проанализировали его должным образом) заключается в том, чтобы каким-то образом изолировать каждый JAR, возможно, загружать каждый из них под другую виртуальную машину с разными параметрами. Это просто идея, что я не знаю, как реализовать (или если это возможно, если на то пошло.)
В этом сообщении предлагается, чтобы можно было выбрать отдельный сертификат из хранилища ключей, но как присоединить его к запросу, кажется, совсем другая проблема.
Мы используем классы Java 1.5, Axis2 и клиента, созданные с помощью wsimport
или wsdl2java
.