我知道返回公钥类型的方法.getPublicKey()
。但是,此功能并不能说明所使用的密钥交换类型(EDH或RSA)。如果我是对的,它只返回公钥的类型。我的问题是:当我启动与远程服务器的SSL连接时,如何获得密钥交换和身份验证协议?
答案 0 :(得分:3)
从SSLSocket
或SSLEngine
,首先获取SSLSession
,它会为您提供有关当前SSL / TLS会话的一些信息。
如果您使用getCipherSuite()
,您将获得密码套件名称,其中包含密钥交换类型(和加密算法)。 Oracle JRE中实现的密码套件列在SunJSSE provider documentation中。您可以在TLS specification中找到命名约定:TLS_
之后的第一部分(旧名称为SSL_
),_WITH_
之前会告诉您密钥交换算法({ {1}},DHE_DSS
,DHE_RSA
,DH_anon
,DH_DSS
,DH_RSA
或NULL
):一个相对简单的正则表达式应该能够提取相关信息。
(你提到的是RSA
,但你没有说你在哪里调用它。它必须适用于服务器的证书,也是从getPublicKey()
获得的。)
答案 1 :(得分:-1)
我认为.getPublicKey()
是Certificate的方法
您可以使用PublicKey#getAlgorithm()查找算法
String getAlgorithm()
返回此密钥的标准算法名称。例如,“DSA” 表示此密钥是DSA密钥。请参阅Java中的附录A. 密码体系结构API规范&参考 有关标准算法名称的信息。