我知道.getPublicKey()
返回公钥类型的方法。但是,这个函数并没有说明使用了哪种类型的密钥交换(EDH 或 RSA)。如果我是对的,它只返回公钥的类型。我的问题是:当我启动与远程服务器的 SSL 连接时,如何获得使用的密钥交换和身份验证协议?
问问题
1164 次
2 回答
3
从 anSSLSocket
或 anSSLEngine
中,首先获取SSLSession
,它将为您提供有关当前 SSL/TLS 会话的一些信息。
如果使用getCipherSuite()
,您将获得密码套件名称,其中包含密钥交换类型(和加密算法)。SunJSSE 提供者文档中列出了 Oracle JRE 中实现的密码套件。您可以在TLS 规范中找到命名约定:之后TLS_
(或SSL_
旧名称)和之前的第一部分_WITH_
将告诉您密钥交换算法(、、、、、DHE_DSS
或):DHE_RSA
一个DH_anon
相对简单DH_DSS
的正则表达式应该能够提取相关信息。DH_RSA
NULL
RSA
(你提到了getPublicKey()
,但你没有说你在哪里调用它。它必须适用于服务器的证书,也从 获得SSLSession
。)
于 2012-08-12T21:03:47.940 回答
-1
我假设这.getPublicKey()
是证书
的方法
您可以使用PublicKey#getAlgorithm()来查找算法
字符串 getAlgorithm()
返回此键的标准算法名称。例如,“DSA”表示此密钥是 DSA 密钥。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
于 2012-08-12T21:03:02.330 回答