2

我有一个服务器应用程序,它使用:

import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;

这是一个 java 应用程序,它本身就是一个服务器 - 我没有使用任何虚拟服务器,它不是一个 Web 应用程序。它应该从客户端应用程序接收连接并处理它们的请求。客户端应用程序和数据库之间的中间层。

在启动时它会运行,但会不断发送垃圾邮件(因为 while (true) {})这个错误:

javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
    at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(Unknown Source)

因此,我查阅了一些 SSL 证书创建指南并使用以下命令制作了证书:

keytool -genkey -alias serverprivate -keystore servestore -keyalg rsa -keysize 2048
keytool -export -alias serverprivate -keystore servestore -rfc -file server.cer

并将其导入到我的本地证书存储中,因此我可以使用我的客户端应用程序对其进行测试:

keytool -import -alias trustservercert -file server.cer -keystore clienttruststore

所有这些都是在我的 $JAVA_HOME\bin 目录中完成的。我还更新了我的 eclipse.ini 文件

-vm
$JAVA_HOME\bin\javaw.exe

所以eclipse将使用我的jdk7虚拟机来运行应用程序。

同时,我尝试将文件复制到 $ECLIPSE_HOME 和应用程序主目录中server.cerservestore

结果是:同样的错误信息。它不会阻止应用程序运行,但它仍然存在。

非常感谢这里的一些帮助。我究竟做错了什么?也许有一个很酷、详细、对新手友好的关于使用 SSL 创建应用程序的指南,但我找不到?

4

1 回答 1

5

您必须将这些参数添加到您的 jvm 启动中。

-Djavax.net.ssl.trustStore="<path to truststore>"
-Djavax.net.ssl.trustStorePassword=password

如果您需要有关 Java 和 SSL 的更多详细信息,请查看

于 2012-10-08T07:35:49.270 回答