Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSL通信Java_Java_Security_Ssl - Fatal编程技术网

SSL通信Java

SSL通信Java,java,security,ssl,Java,Security,Ssl,我已经为我的应用程序的admin实例和judge实例生成了自签名证书。这些实例运行在不同的机器上,它们都有彼此的证书副本和自己的证书副本。我想在这两者之间进行沟通,我想知道我目前的方法是否正确: CertificateFactory cf = CertificateFactory.getInstance("X.509"); Certificate certificate = cf.generateCertificate(new FileInputStream(...)); KeyStore k

我已经为我的应用程序的
admin
实例和
judge
实例生成了自签名证书。这些实例运行在不同的机器上,它们都有彼此的证书副本和自己的证书副本。我想在这两者之间进行沟通,我想知道我目前的方法是否正确:

CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate certificate = cf.generateCertificate(new FileInputStream(...));

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, "test".toCharArray());
keyStore.setCertificateEntry("admin", certificate);

// Code omitted which repeats the above to set the judge certificate

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);

factory = ctx.getSocketFactory(); // Or #getServerSocketFactory() if admin and not judge

有了这个,我将能够安全地与这两个实例通信,对吗?

否。KeyManager需要一个带有密钥项的密钥库,而不是一个证书项。只需按照JSSE设计者的意图使用密钥库文件。

否。KeyManager需要一个带有密钥项的密钥库,而不是证书项。只需按照JSSE设计者的意图使用密钥库文件。

好的,我这样做了,但似乎有问题。我正在运行两个线程,它们有一个ServerSocket和一个Socket。我在ServerSocket上使用了正确的密钥库文件,在Socket上使用了空白的密钥库文件,但我仍然能够连接。连接不应该被拒绝吗?@LanguagesNamedAfterCofee如果
SSLServerSocket
设置为需要客户端身份验证,则
SSLSocket
只需要密钥库。它总是需要一个信任库。我想你需要好好看看这个。好吧,我做了,但似乎有问题。我正在运行两个线程,它们有一个ServerSocket和一个Socket。我在ServerSocket上使用了正确的密钥库文件,在Socket上使用了空白的密钥库文件,但我仍然能够连接。连接不应该被拒绝吗?@LanguagesNamedAfterCofee如果
SSLServerSocket
设置为需要客户端身份验证,则
SSLSocket
只需要密钥库。它总是需要一个信任库。我想你需要好好看看这本书。