хранилище ключей SSL и сертификатов Java - PullRequest
145 голосов
/ 03 мая 2011

Как моя Java-программа узнает, где находится мое хранилище ключей, содержащее сертификат? Или, в качестве альтернативы, как мне указать моей java-программе, где искать хранилище ключей?

После некоторого указания хранилища ключей, как указать сертификат, который будет использоваться для аутентификации сервера на клиенте?

Ответы [ 5 ]

279 голосов
/ 03 мая 2011

Свойства SSL устанавливаются на уровне JVM через системные свойства. Это означает, что вы можете либо установить их при запуске программы (java -D ....), либо установить их в коде, выполнив System.setProperty.

Ниже приведены конкретные ключи, которые вы должны установить:

javax.net.ssl.keyStore - Расположение файл хранилища ключей Java, содержащий собственный сертификат процесса подачи заявления и закрытый ключ. В Windows указанный путь должен использовать forward косые черты, /, вместо обратных косых черт.

javax.net.ssl.keyStorePassword - Пароль чтобы получить доступ к закрытому ключу от файл хранилища ключей, указанный javax.net.ssl.keyStore. Этот пароль используется дважды: чтобы разблокировать хранилище ключей файл (сохранить пароль) и расшифровать закрытый ключ хранится в хранилище ключей (ключевой пароль).

javax.net.ssl.trustStore - Расположение файл хранилища ключей Java, содержащий доверенные сертификаты этим процессом приложения (доверие хранить). В Windows указанный имя пути должно использовать косую черту, /, вместо обратной косой черты \.

Если местоположение доверенного хранилища не указанный с помощью этого свойства, Реализация SunJSSE ищет и использует файл хранилища ключей в следующие местоположения (по порядку):

  1. $JAVA_HOME/lib/security/jssecacerts
  2. $JAVA_HOME/lib/security/cacerts

javax.net.ssl.trustStorePassword - Пароль для разблокировки файла хранилища ключей (сохранить пароль), указанный в javax.net.ssl.trustStore.

javax.net.ssl.trustStoreType - (Необязательно) Для формата файла хранилища ключей Java это свойство имеет значение jks (или JKS). Вы обычно не указываете это свойство, потому что его значение по умолчанию уже JKS.

javax.net.debug - для переключения при ведении журнала для слоя SSL / TLS установите это свойство для ssl.

99 голосов
/ 03 мая 2011
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
13 голосов
/ 25 июня 2018

Просто слово предостережения. Если вы пытаетесь открыть существующее хранилище ключей JKS в Java 9 и более поздних версиях, необходимо убедиться, что вы также указали следующие свойства со значением как «JKS»:

javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType

Причина в том, что тип хранилища ключей по умолчанию, как предписано в файле java.security, был изменен на pkcs12 с jks начиная с Java 9.

11 голосов
/ 03 мая 2011

Прежде всего, есть два вида хранилищ ключей.

Индивидуальный и Общий

Приложение будет использовать тот, который указан при запуске или по умолчанию системы.

Это будет другая папка, если работает JRE или JDK, или если вы проверите личную или "глобальную" папку.

Они тоже зашифрованы

Короче говоря, путь будет таким:

$JAVA_HOME/lib/security/cacerts для «общего», у которого есть все ЦС для властей, и это очень важно.

7 голосов
/ 11 декабря 2017

вы также можете указать путь во время выполнения, используя -D свойства, как показано ниже

-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks

В моем приложении apache spark я использовал путь к сертификатам и хранилищу ключей, используя опцию --conf и extraJavaoptions в spark-submit, как показано ниже

--conf 'spark.driver.extraJavaOptions= 
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...