Мне нужно импортировать сертификат в хранилище ключей JVM. Я использую следующее:
keytool -import -alias daldap -file somecert.cer
поэтому мне, вероятно, нужно будет изменить свой вызов на что-то вроде:
keytool -import -alias daldap -file somecert.cer -keystore cacerts –storepass changeit
Ответы:
Ваше хранилище ключей будет в вашем
JAVA_HOME---> JRE -->lib---> security--> cacerts
. Вам нужно проверить, где настроен ваш JAVA_HOME, возможно, в одном из этих мест,Компьютер ---> Дополнительно -> Переменные среды ---> JAVA_HOME
Пакетные файлы запуска вашего сервера.
В вашей команде импорта -keystore cacerts (укажите здесь полный путь к указанной выше JRE вместо того, чтобы просто говорить cacerts).
источник
Расположение хранилища ключей
Каждая команда keytool имеет
-keystore
возможность указать имя и расположение файла постоянного хранилища ключей для хранилища ключей, управляемого keytool. Хранилище ключей по умолчанию хранится в файле с именем.keystore
в домашнем каталоге пользователя, как определено системным свойством "user.home". Учитывая имя пользователя uName, значение свойства user.home по умолчанию равноТаким образом, если имя пользователя - «cathy», «user.home» по умолчанию
http://docs.oracle.com/javase/1.5/docs/tooldocs/windows/keytool.html
источник
~/.keystore
файл! Если бы я оставил этот-keystore
параметр, я не смог бы понять, на какое хранилище ключей по умолчанию нацеленоkeytool
. Я продолжал искать другихcacerts
где-то еще на машине. Я не ожидал, что keytool будет сгенерирован~/.keystore
в домашнем каталоге или будет назван.keystore
вместоcacerts
. Вы заполнили бланк, который разработчики Java должны задокументировать! Спасибо!Mac OS X 10.12 с Java 1.8:
$ JAVA_HOME / JRE / Библиотека / безопасность
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
Оттуда это:
У меня там есть хранилище ключей cacerts.
Чтобы указать это как параметр виртуальной машины:
Я не говорю, что это правильный способ (почему java не знает, что нужно искать в JAVA_HOME?), Но это то, что мне нужно было сделать, чтобы он заработал.
источник
Вы можете найти его в своем «Домашнем» каталоге:
В Windows 7:
В Linux (Ubuntu):
источник
user.home
равно$HOMEDRIVE$HOMEPATH
установленному окнами, а не$HOME
установлено cygwin, гдеHOMEDRIVE=C:
иHOMEPATH=\Users\[YOUR ACCOUNT]
Это работает для меня:
Только для Linux. У моего Solaris нет ссылки для чтения. В итоге я использовал Perl-Script:
источник
Как упоминал DimtryB, по умолчанию хранилище ключей находится в каталоге пользователя. Но если вы пытаетесь обновить
cacerts
файл, чтобы JVM могла выбирать ключи, вам придется обновитьcacerts
файл подjre/lib/security
. Вы также можете просмотреть ключи, выполнив команду,keytool -list -keystore cacerts
чтобы узнать, добавлен ли ваш сертификат.источник
lib/security
автоматически добавляет правильный путь, если дано только относительное имя.-importcert
. Команда list показывает общесистемные сертификаты, но команда импорта создает новый файл в текущем каталоге.updatedb; locate cacerts
помогает найти места для установки файлов cacerts.В Debian, используя openjdk версии "1.8.0_212", я обнаружил здесь cacerts:
Конечно, было бы удобно, если бы существовала стандартная команда, которая распечатывала бы этот путь.
источник
Для меня, использующего официальный образ OpenJDK 12 Docker , хранилище ключей Java располагалось следующим образом:
источник
keytool -import -file example.crt -alias exampleCA -keystore truststore.jks
вы также используете параметр-keystore
... довольно непонятно ИМХО. И последнее, но не менее важное: я искал именно эту проблему - и нашел этот вопрос. Может быть, у других будет то же самое.Мы столкнулись с этой проблемой на Tomcat, запущенном из каталога jre, который был (почти полностью) удален после автоматического обновления jre, поэтому запущенный jre больше не мог найти jre ... / lib / security / cacerts, потому что он больше не существовал.
Перезапуск Tomcat (после изменения конфигурации для запуска из другого местоположения jre) устранил проблему.
источник
В дополнение ко всем ответам выше:
Если обновление файла cacerts в каталоге JRE не помогает, попробуйте обновить его в JDK.
C: \ Program Files \ Java \ jdk1.8.0_192 \ jre \ lib \ security
источник