繁体   English   中英

Java RMI SSL poss密钥库/信任库错误?

[英]Java RMI SSL poss keystore / truststore error?

使用以下代码测试通过RMI的SSL连接:

public class HelloImpl extends UnicastRemoteObject implements Hello {
    public HelloImpl() throws RemoteException {
        super(0, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
    }
    public String sayHello() {
        return "Hello World!";
    }
    public static void main(String args[]) throws Exception {
        // Get reference to the RMI registry running on port 3000 in the local host
        Registry registry = LocateRegistry.getRegistry(null, 3000);
        // Bind this object instance to the name "HelloServer"
        HelloImpl obj = new HelloImpl();
        registry.bind("HelloServer", obj);
        System.out.println("HelloServer bound in registry");
    }
}

其余的是相当通用的(从此处获取一些代码: http : //blogs.oracle.com/lmalventosa/entry/using_the_ssl_tls_based ),基本上是尝试进行仅服务器身份验证以使SSL正常工作。 但是,出现此令人讨厌的错误:

     RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], READ: TLSv1 Alert, length = 2
RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], RECV TLSv1 ALERT:  fatal, bad_certificate
RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], called closeSocket()
RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], Exception while waiting for close javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
RMI RenewClean-[146.169.51.86:60013,javax.rmi.ssl.SslRMIClientSocketFactory@4a63d8], handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate

从调试转储中可以看出,它们确实尝试进行一次握手,甚至可以交换对称密钥,但由于某种无法解释的原因,它们在此期间会失败。 在编译期间,我们指定一个存储在以下文件夹中的信任库:

# $ java -Djavax.net.ssl.trustStore=truststore -Djavax.net.ssl.trustStorePassword=trustword HelloClient

任何帮助,不胜感激!

在我看来,HelloImpl服务器提供的证书存在问题,这可能意味着您启动服务器的方式存在问题,或者密钥/证书生成过程存在问题。 你可以跑步吗

keytool -list -v -keystore keystore

在启动HelloImpl服务器的密钥库上,也许使用-Djavax.net.debug = SSL启动服务器和客户端,以查看是否有可用的附加信息? (如果是这样,请使用这些详细信息来编辑您的问题)在不知道密钥库和信任库的状态以及创建它们的过程的情况下,很难从上面的内容中判断出错误是什么。

编辑:

bad_certificate表示服务器的证书采用客户端不理解或希望拒绝的格式。

除了获得新的服务器证书外,您对前者无能为力。

但是,似乎还有些浏览器在SSL握手期间获取的服务器证书过期,自签名,主机名验证失败等情况下发送bad_certficate警报以关闭HTTPS连接。Firefox在以下情况下使用此警报来关闭HTTPS连接:它向用户显示一个页面,询问是否信任此证书。 如果用户同意,则Firefox然后打开一个新的HTTPS连接,这次接受证书而不是发送bad_certificate警报。

大概是发送了警报,而不仅仅是关闭了连接,因此服务器可以记录实际发生的情况,或者在握手阶段中止连接,而不冒任何通过其发送数据的风险。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM