【问题标题】:How to get the key exchange and authentication protocol in Java如何在 Java 中获取密钥交换和身份验证协议
【发布时间】:2012-08-09 04:17:40
【问题描述】:

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

【问题讨论】:

    标签: java sockets ssl network-programming


    【解决方案1】:

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

    字符串 getAlgorithm()

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

    【讨论】:

    • 这是针对证书的公钥算法,而不是针对问题中所要求的密钥交换类型。
    【解决方案2】:

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

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

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

    【讨论】:

    • SSL 版本怎么样?除了拨打getProtocol() 之外,我可以通过其他方式获得它吗?
    • @JuryA 为什么需要另一种方式来获取相同的信息?
    • @JuryA,我认为除了getProtocol()之外没有其他方法,但应该足够了。
    • @EJP:不,我不需要其他方法。但是我的代码不包含getProtocol(),这是我知道的方法。我想知道这条信息是否可以被另一个函数提取?
    • @JuryA 你有什么不提供 SSLSession 的代码?
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2013-06-14
    • 2018-08-17
    • 2021-01-22
    • 2013-09-22
    相关资源
    最近更新 更多