Конфигурирование выполняется через SSLContext
, что фактически является фабрикой для SSLSocketFactory
(или SSLEngine
).По умолчанию это будет настроено из свойств javax.net.ssl.*
.Кроме того, когда сервер запрашивает сертификат, он отправляет сообщение TLS / SSL CertificateRequest
, которое содержит список отличительных имен CA, которые он готов принять.Хотя этот список, строго говоря, является лишь ориентировочным (то есть серверы могут принимать сертификаты от эмитентов, которых нет в списке, или могут отклонять действительные сертификаты от центров сертификации в списке), он обычно работает следующим образом.
По умолчанию выбирает сертификатв X509KeyManager
, настроенном в SSLContext
(опять же, как правило, вам не нужно об этом беспокоиться), выберите один из сертификатов, который был выдан одним из списка (или может быть связан с эмитентом там),Этот список является параметром issuers
в X509KeyManager.chooseClientAlias
(alias
- это псевдоним для сертификата, который вы хотите выбрать, как указано в хранилище ключей).Если у вас есть несколько кандидатов, вы также можете использовать параметр socket
, который даст вам IP-адрес партнера, если это поможет сделать выбор.
Если это поможет, вы можете найти, используя jSSLutils (и его обертка) для конфигурации вашего SSLContext
(это в основном вспомогательные классы для сборки SSLContext
s).(Обратите внимание, что этот пример предназначен для выбора псевдонима на стороне сервера, но его можно адаптировать, исходный код доступен .)
Как только вы это сделаете,следует искать документацию, касающуюся системного свойства axis.socketSecureFactory
в Axis (и SecureSocketFactory
).Если вы посмотрите на исходный код Axis, не составит труда создать org.apache.axis.components.net.SunJSSESocketFactory
, инициализированный из SSLContext
по вашему выбору (см. этот вопрос ).
Только что понял, что вы говорили об Axis2, где SecureSocketFactory
, похоже, исчезло.Возможно, вам удастся найти обходной путь, используя значение по умолчанию SSLContext
, но это повлияет на все ваше приложение (что не очень хорошо).Если вы используете X509KeyManagerWrapper из jSSLutils, вы можете использовать значение по умолчанию X509KeyManager
и рассматривать только определенные хосты как исключение.(Это не идеальная ситуация, я не уверен, как использовать пользовательский SSLContext
/ SSLSocketFactory
в Axis 2.)
В качестве альтернативы, согласно этого документа Axis 2 похоже, что Axis 2 использует Apache HTTP Client 3.x:
Если вы хотите выполнить аутентификацию клиента SSL (двухсторонний SSL), вы можете использовать функцию Protocol.registerProtocol в HttpClient.Вы можете перезаписать протокол «https» или использовать другой протокол для связи аутентификации клиента SSL, если вы не хотите связываться с обычным https.Для получения дополнительной информации http://jakarta.apache.org/commons/httpclient/sslguide.html
В этом случае SslContextedSecureProtocolSocketFactory
должен помочь вам настроить SSLContext
.