Java - SSL 服务器创建

标签 java ssl keytool

我完全没有使用 SSL 的经验。我创建了一个非常简单的客户端服务器,并且可以使用我的客户端成功地从服务器发送和检索文件。我通过 keytool 命令行生成了一个带有自签名 X509 证书的 keystore ,并将其存储在我的服务器目录中。

虽然我有点困惑,因为我最初使用 http://stilius.net/java/java_ssl.php 创建了我的服务器作为指南,但无法正常工作,我正在使用

System.setProperty("javax.net.ssl.keyStore", jksFilepath);
System.setProperty("javax.net.ssl.keyStorePassword", jkspass);

将我的 keystore 与服务器链接起来。每当我尝试检索文件时,我都会得到 Java SSLHandshakeException“没有共同的密码套件”。

然而,当我现在使用与以下代码相同的代码时:http://www.java2s.com/Tutorial/Java/0490__Security/SSLContextandKeymanager.htm 设置我的服务器,它工作得很好。

此外,第二个指南只使用 ServerSocket 而不是 SSLSocket - 我应该使用哪个?当我运行服务器并检索文件时,在两者之间切换似乎没有任何改变。

最佳答案

检查这个 Java SSLHandshakeException "no cipher suites in common"可能重复您的问题

在第二个示例链接中,SSLContext 和 KeyManager 被初始化。在第一个示例中,它们不是。 如果你想让你的 keystore 被用作 keystore ,你需要加载它并用它初始化一个 KeyManagerFactory:

这是第二个例子的代码。 SSLContextKeyManagers

初始化
context = SSLContext.getInstance("TLS");
kmf = KeyManagerFactory.getInstance("SunX509");
FileInputStream fin = new FileInputStream(storename);
ks = KeyStore.getInstance("JKS");
ks.load(fin, storepass);
context.init(kmf.getKeyManagers(), null, null);

在第一个例子中创建了一个默认的 SSLSocketFactory

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();

SSLSocketFactory.getDefault() 调用 SSLContext.getDefault() 创建默认上下文(没有您需要的参数)

关于Java - SSL 服务器创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37443735/

相关文章:

java - 如何使用 Java 有效地读取 Hadoop (HDFS) 文件中的第一行?

Java EBNF?

Java 独立客户端应用程序

apache - 如何重写所有不包含短语的非 ssl 请求?

Java:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

java - 如何生成 key 对并以编程方式将其插入 KeyStore(不使用 Java KeyTool)?

java - 我无法使用 keytool 获取 SHA1 证书

java - Java Servlet 中的数据表独立编辑器

ssl - 从合格的 .crt 和 .pfx key 文件中制作合格的 .pfx 证书

java keytool jks转bks