Отсутствие альтернативных имен субъекта представляет собой исключение при создании клиента веб-службы

Я хочу создать клиент веб-службы с помощью утилиты wsdl2java. Мне нужно подключиться к этому серверу через SSL

Этот wsdl выглядит так:

https://xxx.xx.xx.xx:8443/api/wsdl/xxxxxxx.wsdl

Я сгенерировал сертификат, используя:

openssl s_client -connect xxx.xx.xx.x:8443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > abcCertificate.pem

и добавил его в хранилище ключей, используя:

keytool -import -noprompt -trustcacerts -alias testcert -file abcCertificate.pem -keystore /usr/java/jdk1.7.0_06/jre/lib/security/cacerts -ext san=ip:xxx.xx.xx.xx

Когда я пытаюсь использовать wsdl2java для создания клиента веб-службы, он выдает исключение:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present

Я использую эту информацию по этой ссылке.


person Chamila Adhikarinayake    schedule 09.10.2012    source источник
comment
Я использовал NoopHostnameVerifier, см. stackoverflow.com/a/57746053/548473   -  person Grigory Kislin    schedule 13.12.2019


Ответы (1)


Кажется, вы путаетесь между «импортом» и «генерацией» сертификата.

Ваша команда openssl s_client не создает сертификат, она извлекает сертификат, используемый на этом сервере.

Команда keytool -import, которую вы используете впоследствии, импортирует этот сертификат как есть в ваше хранилище доверенных сертификатов. Там нет смысла использовать -ext san=ip:xxx.xx.xx.xx: вы не генерируете сертификат, вы только импортируете его.

Если вы контролируете этот сервер, вы должны сгенерировать (или получить сертификат откуда-то еще) с IP-адресом SAN (поскольку Java строго следует спецификации).

Если вы не контролируете этот сервер, используйте его имя хоста (при условии, что в существующем сертификате есть хотя бы общее имя, соответствующее этому имени хоста).

В общем, не очень хорошо напрямую импортировать сертификат, полученный исключительно с сервера, подобного этому, в ваше хранилище доверенных сертификатов, поскольку вы предполагаете, что это конкретное соединение не было подделано.

person Bruno    schedule 09.10.2012
comment
Если я не контролирую сервер, что именно я могу сделать, чтобы избежать проблемы с топикстартером? Я разместил здесь описание того, что я сделал - заголовок stackoverflow.com/questions/19540289/ . - person Mentiflectax; 23.10.2013