keytool Java и TLS/SSL
У меня есть сокет клиента и сокет сервера. На сервере есть хранилище ключей с ключом.
keytool -genkey -alias mystuff -keyalg RSA -keystore keystore.jks -keysize 2048
На этой странице написано, что при запуске вышеуказанной команды она генерирует пару ключей. https://www.sslshopper.com/article-most-common-java-keytool-keystore-commands.html
Когда я запускаю эту команду:
keytool -list -v -keystore keystore.jks
Я могу видеть:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: mystuff
Creation date: 25-Jun-2015
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Richard, OU=OSS, O=OSS, L=Yat, ST=Hamp, C=GB
Issuer: CN=Richard, OU=OSS, O=OSS, L=Yat, ST=Hamp, C=GB
Serial number: 48ee5103
Valid from: Thu Jun 25 17:09:18 BST 2015 until: Sun Jun 19 17:09:18 BST 2016
Certificate fingerprints:
MD5: 60:63:F2:41:A3:AB:DB:E0:63:F9:B0:E4:C8:2C:90:D4
SHA1: 52:8A:F7:76:82:B7:E9:BE:D3:4E:4A:3C:DD:CF:8A:58:A6:9F:70:DE
SHA256: 3C:80:C1:0E:E7:30:DD:69:9F:97:A9:02:F9:4E:6E:57:84:82:C5:22:0E:7F:7A:EE:C1:D2:7A:8A:45:A3:86:79
Signature algorithm name: SHA256withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 42 4F 07 15 3A 9A 8C 59 6A 65 EB B6 62 FD 77 C5 BO..:..Yje..b.w.
0010: AC E3 B2 4F ...O
]
]
То, что я вижу, есть сертификат, но что означает запись typetype: PrivateKeyEntry?
Итак... когда я загружаю сервер Java:
java -Djavax.net.ssl.keyStore=keystore.jks -Djavax.net.ssl.keyStorePassword=somepassword EchoServer
Я могу указать на хранилище ключей, чтобы его можно было использовать при настройке SSLServerSocket.
Теперь на стороне клиента нужен ли клиенту экспортированный crt из этого хранилища ключей с помощью этой команды?
keytool -export -alias mystuff -file mystuff.crt -keystore keystore.jks
Или что-то еще требуется для включения безопасного SSL между сокетами Java.
Дополнительная информация Стандартный Java Notes Запуск сервера и клиента с использованием SSL
http://stilius.net/java/java_ssl.php
Сначала скопируйте файл сертификата, который вы создали ранее, в рабочий каталог и запустите сервер с этими параметрами (обратите внимание, что вам нужно изменить имя хранилища ключей и / или trustStrorePassword, если вы указали разные параметры создания сертификата:
java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 EchoServer
А теперь снова скопируйте файл сертификата, который вы создали ранее, в рабочий каталог и запустите клиент с этими параметрами (обратите внимание, что вам нужно изменить имя keyStore и / или trustStrorePassword, если вы указали разные параметры создания сертификата:
java -Djavax.net.ssl.trustStore=mySrvKeystore -Djavax.net.ssl.trustStorePassword=123456 EchoClient
Если вы хотите отладочную информацию SSL, просто добавьте эти параметры при запуске сервера и / или клиента:
-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl
javax.net.ssl.keyStore - расположение файла хранилища ключей Java, содержащего собственный сертификат и секретный ключ процесса приложения. В Windows указанный путь должен использовать прямую косую черту, /, вместо обратной косой черты.
javax.net.ssl.keyStorePassword - пароль для доступа к закрытому ключу из файла хранилища ключей, указанного в javax.net.ssl.keyStore. Этот пароль используется дважды: чтобы разблокировать файл хранилища ключей (сохранить пароль) и расшифровать закрытый ключ, хранящийся в хранилище ключей (пароль ключа).
javax.net.ssl.trustStore - расположение файла хранилища ключей Java, содержащего коллекцию сертификатов CA, которым доверяет этот процесс приложения (хранилище доверенных сертификатов). В Windows указанный путь должен использовать прямую косую черту, / вместо обратной косой черты,.
If a trust store location is not specified using this property, the SunJSSE implementation searches for and uses a keystore file in the following locations (in order):
$JAVA_HOME/lib/security/jssecacerts
$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.
Ричард