我有一个套接字客户端和服务器套接字。服务器有一个密钥库,其中有一个密钥。
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 注释 使用 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 - 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。
理查德