3

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

4

2 回答 2

3

从 anSSLSocket或 anSSLEngine中,首先获取SSLSession,它将为您提供有关当前 SSL/TLS 会话的一些信息。

如果使用getCipherSuite(),您将获得密码套件名称,其中包含密钥交换类型(和加密算法)。SunJSSE 提供者文档中列出了 Oracle JRE 中实现的密码套件。您可以在TLS 规范中找到命名约定:之后TLS_(或SSL_旧名称)和之前的第一部分_WITH_将告诉您密钥交换算法(、、、、、DHE_DSS或):DHE_RSA一个DH_anon相对简单DH_DSS的正则表达式应该能够提取相关信息。DH_RSANULLRSA

(你提到了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 回答