使用T61String AVA的Java X500主要名称规范化

时间:2016-02-11 16:03:52

标签: java ssl x509

我在Java中使用X500主要相等(JDK 8)。

使用openssl s_client ...我看到我感兴趣的证书的主题DN被报告为(仅显示CN):

CN=*.myserver.net,...

然而在Java中:

X509Certificate.getSubjectX500Principal().equals("CN=*.myserver.net,...")

报告false,即两个值不相等。看一下.equals的实现,似乎比较了X500Name的规范形式的相等性,这是有道理的。

但是,我看到来自服务器的证书的规范名称实际上是以下形式:

cn=#somehex,...

虽然手动创建的主体的规范名称采用以下形式:

cn=*.myserver.net,...

当然会导致它们(错误地)不相等。

进一步调查,相关逻辑似乎位于sun.security.x509.AVA.isDerString,用于检查tag = 12UTF8String)或tag = 19PrintableString),而此CN RDN似乎有tag = 20T61String)。

canonicalization docs未指明为何将服务器证书的CN规范化为此十六进制表单。根据{{​​3}}第2.4节,如果AttributeValue没有String表示,则应使用十六进制形式。但是,这不是这种情况 - RFC 2253(电传打字机)肯定有字符串表示。

JDK将T61String值规范化为十六进制形式的正确行为吗?

0 个答案:

没有答案