如何在Java中获取密钥交换和认证协议

时间:2012-08-12 20:47:56

标签: java sockets ssl network-programming

我知道返回公钥类型的方法.getPublicKey()。但是,此功能并不能说明所使用的密钥交换类型(EDH或RSA)。如果我是对的,它只返回公钥的类型。我的问题是:当我启动与远程服务器的SSL连接时,如何获得密钥交换和身份验证协议?

2 个答案:

答案 0 :(得分:3)

SSLSocketSSLEngine,首先获取SSLSession,它会为您提供有关当前SSL / TLS会话的一些信息。

如果您使用getCipherSuite(),您将获得密码套件名称,其中包含密钥交换类型(和加密算法)。 Oracle JRE中实现的密码套件列在SunJSSE provider documentation中。您可以在TLS specification中找到命名约定:TLS_之后的第一部分(旧名称为SSL_),_WITH_之前会告诉您密钥交换算法({ {1}},DHE_DSSDHE_RSADH_anonDH_DSSDH_RSANULL):一个相对简单的正则表达式应该能够提取相关信息。

(你提到的是RSA,但你没有说你在哪里调用它。它必须适用于服务器的证书,也是从getPublicKey()获得的。)

答案 1 :(得分:-1)

我认为.getPublicKey()Certificate的方法 您可以使用PublicKey#getAlgorithm()查找算法

  

String getAlgorithm()

     

返回此密钥的标准算法名称。例如,“DSA”   表示此密钥是DSA密钥。请参阅Java中的附录A.   密码体系结构API规范&参考   有关标准算法名称的信息。