Есть ли способ загрузить другой cacerts, чем тот, который указан в папке java_home / jre / lib / security?

У меня одна установка java в системе, которая запускает 2 или 3 приложения.

Все приложения используют одну и ту же среду выполнения.

Есть ли способ указать для сертификатов CA другие хранилища ключей, чем в java_home / jre / lib / security. То есть, есть ли возможность указать «дополнительное» хранилище ключей, которое загружается и добавляется к сертификатам, загружаемым из java_home / jre / lib / security / cacerts?

Чего я хочу избежать, так это повторного импорта нашего локального CA каждый раз, когда я обновляю jdk в коробке.


person feniix    schedule 15.04.2010    source источник
comment
Файл cacerts является хранилищем доверенных сертификатов, а не хранилищем ключей. Он не содержит закрытых ключей.   -  person user207421    schedule 27.02.2017


Ответы (4)


Думаю, вы хотите указать доверенный магазин:

java -Djavax.net.ssl.trustStore=/home/gene/mycacerts ...

Или, если вы используете сертификаты через JSSE (вы, вероятно, используете), вы можете скопировать свой доверенный магазин в jssecacerts в каталоге $JAVA_HOME/jre/lib/security/ (хотя вам все равно придется делать это каждый раз, когда JDK устанавливается / переустанавливается). JSSE Sun ищет $JAVA_HOME/jre/lib/security/jssecacerts до $JAVA_HOME/jre/lib/security/cacerts.

См. http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#X509TrustManager.

person Gene Gotimer    schedule 15.04.2010
comment
Любой из этих заменяет cacerts. Q хотел 'загрузить [] и добавить [] в', что означает либо копирование cacerts в jssecacerts, либо / где угодно / mycerts и добавление настраиваемых ЦС к этой копии, либо альтернативное создание файла с настраиваемые CA, а затем keytool -importkeystore содержимое cacerts в новый файл. - person dave_thompson_085; 26.07.2018
comment
Спасибо за этот ответ, он спас мне день. У меня нет прав администратора для записи на диск C, на котором установлен JDK. Я добавил -Djavax.net.ssl.trustStore = ‹MyLocation› в Tomcat Catalina, и это сработало. - person Vikram Bhardwaj; 18.09.2020

Оба эти параметра jvm используются для поиска настраиваемого хранилища доверенных сертификатов и их пароля.

java -Djavax.net.ssl.trustStore=custompath/cacerts -Djavax.net.ssl.trustStorePassword=changeit

Чтобы убедиться, что trustStore загружается приложением, также добавьте следующий аргумент:

-Djavax.net.debug=ssl:handshake
person rogue lad    schedule 07.11.2017

Если ваша JVM содержит более одного приложения, то по умолчанию все приложения будут использовать хранилище cacerts по умолчанию, которое находится в $ JAVA_HOME / jre / lib / security / location. Но если вы хотите, чтобы приложения использовали другое хранилище сертификатов, вам необходимо определить собственное хранилище сертификатов и указать на него. Таким образом вы можете создать собственное хранилище сертификатов. System.setProperty ("javax.net.ssl.trustStore", "C: / certStore / cusomtcacerts"); - Используйте эту строку перед созданием сеанса http / https. Вы можете импортировать сертификаты в cusomtcacerts, также используя keytool.

person JitenS    schedule 26.07.2018
comment
Вы это тестировали - System.setProperty("javax.net.ssl.trustStore", "C:/certStore/cusomtcacerts"); - person joven; 13.06.2021
comment
да. Это проверено. - person JitenS; 20.06.2021