我的简单HTTPS Java服务器引发异常:收到致命警报:错误的\u证书

我的简单HTTPS Java服务器引发异常:收到致命警报:错误的\u证书,java,Java,我已经实现了一个HTTPS服务器,它向浏览器发送一个简单的index.html文件。我使用Eclipse作为我的IDE,我还有一个.jks文件和程序。有趣的是,当我在Eclipse上运行程序时,一切都很好。在浏览器上,我请求https://localhost:8888(我定义的端口),它警告我的证书,我确认,然后检索页面。但是当我通过终端(javahttpsserver)运行程序时,服务器显示以下异常。我搜索了它并注意到类似的帖子,但是无法找到解决问题的具体步骤。有人能帮我吗 javax.net

我已经实现了一个HTTPS服务器,它向浏览器发送一个简单的index.html文件。我使用Eclipse作为我的IDE,我还有一个
.jks
文件和程序。有趣的是,当我在Eclipse上运行程序时,一切都很好。在浏览器上,我请求
https://localhost:8888
(我定义的端口),它警告我的证书,我确认,然后检索页面。但是当我通过终端(
javahttpsserver
)运行程序时,服务器显示以下异常。我搜索了它并注意到类似的帖子,但是无法找到解决问题的具体步骤。有人能帮我吗

javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1959)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)
    at sun.security.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1705)
    at sun.security.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:122)
    at sun.security.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:972)
    at sun.security.ssl.ServerHandshaker.sendChangeCipherAndFinish(ServerHandshaker.java:1532)
    at sun.security.ssl.ServerHandshaker.clientFinished(ServerHandshaker.java:1492)
    at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:243)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:882)
....[more lines]
以下是服务器代码中负责关键内容的部分:

public static void main(String[] args) {
    String ksName = "mykey.jks";
    char ksPass[] = "mypass".toCharArray();
    char ctPass[] = "mypass".toCharArray();
    try {
        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(new FileInputStream(ksName), ksPass);
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(ks, ctPass);
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(kmf.getKeyManagers(), null, null);
        SSLServerSocketFactory ssf = sc.getServerSocketFactory();
        SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(8888,0, null);
    ...[more lines]
}

不要硬核化keymanagerfactory字符串。它在IBMJVM上有一个不同的名称,这不应该是错误的原因,对吗?