0

我正在按照本教程http://stilius.net/java/java_ssl.php创建简单的 SSLServer 和客户端套接字。我已经使用 keytool 创建了证书,但是我在执行上述教程中的这一行时遇到了问题,

“java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 EchoServer”。

我应该把证书放在哪里?在项目目录中?我怎样才能传递上面提到的参数?

我正在这样做并出错;

C:\Users\abc\workspace\VirtualElectionBoothServer\bin>java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 BoothServer
    Exception in thread "main" java.lang.NoClassDefFoundError: BoothServer
Caused by: java.lang.ClassNotFoundException: BoothServer
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: BoothServer.  Program will exit.

编辑:

我的问题是我从不从命令行运行项目,所以我不知道如何从命令行运行这一行;

C:\Users\abc\workspace\VirtualElectionBoothServer\bin>java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 BoothServer

我应该从哪个目录运行它?我有不止一个 .java 文件。运行哪一个?一个有main()?

4

1 回答 1

0

看起来您不知道如何从命令行运行 Java 应用程序。

我只是假设您的BoothServer课程不在一个包中。如果是,请使用其全名(例如the.package.name.BoothServer)。

我还将假设您已经在 eclipse 中编译了它,并且生成的类文件在bin目录中。(如果你使用包,你应该把你的文件放在 . 目录下bin\the\package\name\BoothServer.class。如果是这种情况,用实际的包名替换目录名,当然。)

javax.net.ssl.SSLException:没有可用的证书或密钥对应于启用的 SSL 密码套件

这是找不到密钥库时发生的典型错误(以及其他原因)。

确保您使用的路径-Djavax.net.ssl.keyStore=指向您生成的实际密钥库。例如,-Djavax.net.ssl.keyStore=..\mySrvKeyStore如果您的文件位于C:\Users\abc\workspace\VirtualElectionBoothServer.

我还怀疑 Eclipse 可能会在bin每次重新编译时清除内容(不确定),因此bin不一定是保存该密钥库文件的好地方。

于 2012-04-21T21:00:09.337 回答