Несмотря на то, что я избавился от этого исключения SSLHandshake, упомянув ниже параметры в JVM trustore.-Djavax.net.ssl.trustStore = C: .keystore -Djavax.net.ssl.trustStorePassword = changeit
Не ясно, что вы пытались сделать с этими параметрами.Либо вы используете хранилище доверенных сертификатов по умолчанию (обычно jssecacerts
, если оно существует; в противном случае cacerts
), либо вы указываете свое собственное..keystore
имеет тенденцию использоваться в качестве хранилища ключей, а не хранилища доверенных сертификатов (хотя по умолчанию значение JSSE отсутствует).(Кстати, я бы также указал полный путь вместо C:.keystore
.)
Вероятно, лучше сделать копию исходного файла cacerts
(или jssecacerts
) (удалите дополнительныйвы положили, если вы что-то изменили) и добавили в него свой удаленный сертификат (т. е. сертификат app2 в копии app1 и сертификат app1 в копии app2, если необходимо).
Вы можете перечислить сертификаты, используя keytool -list -keystore keystore.jks
(см. В справке дополнительные параметры, если это необходимо).
Вы можете экспортировать сертификат, используя keytool -export -keystore server1-keystore.jks -alias server_alias -file server1.crt
.
Затем импортируйте его в другое хранилище доверенных сертификатов: keytool -import -keystore client2-truststore.jks -file server1.crt
.(Здесь client2-truststore.jks
будет копией cacerts
.) Затем настройте JVM, работающую под управлением Apache Tomcat (не обязательно соединитель Tomcat), чтобы использовать его.Вы должны иметь возможность установить параметры JVM в catalina.sh
(JAVA_OPTS=-D...
).
РЕДАКТИРОВАТЬ:
Мой вопрос здесь, почему первый подход (что является правильным подходом) то есть помещение файла jssecacerts в / lib / security не работает?
Чтобы ответить на ваш вопрос более прямо, я просто дважды проверил чистую установку Oracle JRE 6 (1.6.0_31), и jssecacerts
имеет приоритет над cacerts
, когда присутствует (как описано в Руководстве по JSSE Ref, поэтому, похоже, ошибки нет).Я не уверен, куда Oracle переместил блог Андреаса Стербенса в Sun, поэтому я не уверен, какую копию InstallCert
вы использовали.Я думаю, что-то там пошло не так.
Насколько я знаю, InstallCert
подключается к серверу, чтобы получить свой сертификат (заменяя шаг экспорта выше): вы фактически предполагаете, что сертификат вы получаетена вашем первом соединении является правильным (и можно доверять).Вы также можете получить этот сертификат , используя OpenSSL .Однако в вашем случае вы, кажется, имеете контроль над двумя серверами и их соответствующими хранилищами ключей, так что вы можете также использовать keytool -export
, чтобы быть уверенным.
Другой момент заключается в том, что отличается между первыми второй подход?
Первый подход (изменение jssecacerts
) задает конфигурацию для всех приложений, которые будут использовать эту установку JRE, тогда как второй будет применять эти настройки к JVM после его запускаТолько Apache Tomcat.
Обратите внимание, что если у вас не было jssecacerts
, а только cacerts
файла, если вы только импортировали свой сертификат в jssecacerts
, cacerts
будет игнорироваться, поэтомувы не сможете подключиться к серверам, у которых есть сертификат, выданный ЦС, который по умолчанию обычно является доверенным.Вот почему начинать с копии файла по умолчанию может быть полезно.(Кроме того, если ваше приложение также подключается к другим сайтам, которые обычно бывают доверенными по умолчанию, это также может объяснить, почему вы получите это сообщение об ошибке, в этот раз в другом месте.)
В конечном счете, Вы обязаны проверить, что находится в jssecacerts
или cacerts
:
ВАЖНОЕ ПРИМЕЧАНИЕ: JDK поставляется с ограниченным количеством доверенных корневых сертификатов в / lib / security /файл cacerts.Как описано в keytool, вы несете ответственность за поддержание (то есть добавление / удаление) сертификатов, содержащихся в этом файле, если вы используете этот файл в качестве хранилища доверенных сертификатов.
В зависимости от конфигурации сертификатов серверов, к которым вы обращаетесьВам может потребоваться добавить дополнительные корневые сертификаты.Получите необходимые конкретные корневые сертификаты от соответствующего поставщика.