我有一个套接字客户端和服务器套接字。服务器有一个密钥库,其中包含密钥。
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
]
]
我看到的是证书,但是entrytype: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
或者是Java套接字之间启用安全SSL所需的其他东西。
其他信息 标准Java Notes 使用SSL运行服务器和客户端
http://stilius.net/java/java_ssl.php
您在创建工作目录之前创建的第一个复制证书文件,并使用这些参数运行服务器(请注意,如果您指定了创建证书的不同选项,则必须更改keyStore名称和/或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 - 包含此应用程序进程信任的CA证书集合(信任存储区)的Java密钥库文件的位置。在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。
理查德