【问题标题】:x509 cert with email address in subject are different in java .vs net主题中带有电子邮件地址的 x509 证书在 java .vs net 中不同
【发布时间】:2017-07-21 16:12:37
【问题描述】:

我有一个包含多个 Web 应用程序的网站,这些应用程序依赖于最终用户使用其 x509 客户端证书进行身份验证。我们观察到,当 .Net 应用程序处理同一个证书时,当 DN 包含电子邮件地址属性时,它显示的主题 DN 与 Java 应用程序处理时不同。

在 .Net 中,我看到服务器变量 CERT_SUBJECT 如下所示:

C=US, S=Delaware, L=Wilmington, O=IDFC Dev, OU=Test, CN=Richard Sand, E=rsand@idfconnect.lan

在 Java 中,当我为同一个证书(同一个浏览器会话)探索 x509 证书对象时,主题是:

EMAILADDRESS=rsand@idfconnect.lan, CN=Richard Sand, OU=Test, O=IDFC Dev, L=Wilmington, ST=Delaware, C=US

忽略属性的相反顺序(这是一个已知现象),我们遇到的问题是在 Java 中电子邮件地址属性是 EMAILADDRESS 而在 .Net 中相同的属性显示为E

进一步挖掘,OpenSSL 显示以下输出:

openssl.exe pkcs12 -in my.pfx -info

subject=/C=US/ST=Delaware/L=Wilmington/O=IDFC Dev/OU=Test/CN=Richard Sand/emailAddress=rsand@sidfconnect.lan

而当我在 IE 或 Firefox 证书存储中查看相同的证书时,它们显示 E=,例如:

E = rsand@idfconnect.lan
CN = Richard Sand
OU = Test
O = IDFC Dev
L = Wilmington
S = Delaware
C = US

我知道在某些代码中填充以将主题 DN 的一种“解释”更改为另一种似乎微不足道,但问题是我们有两个我们无法更改的 COTS 产品,在我们开始破解之前问题我想了解哪个(或两者都是?)正确,以及某些层上是否存在导致差异的东西。 RFC 似乎都引用了 EMAILADDRRESS,但正如所说,IE 和 FF 以及 .Net 应用程序似乎都在使用“E”

谁能解释为什么会这样?

谢谢!

【问题讨论】:

  • 正如@pedrofb 在他的回答中提到的EEmailAddress 是同义词。每个平台都可以指定自己的 OID 转换。至于主题,它们并不完全不同。只是一个顺序相反。

标签: java .net certificate x509 asn.1


【解决方案1】:

EEMAILADDRESS 是同义词。

当电子邮件地址嵌入主题专有名称(已弃用,应使用主题替代名称扩展名)时,它使用 PCKS#9 (RFC2985) 中定义的标识符 pkcs-9-at-emailAdress

这意味着 emailAddress 不是用字符串 EEMAILADDRESS 存储的,而是作为标识符为 1.2.840.113549.1.9.1 的 ASN.1 结构存储的,而 .NET、Java 或 IE 显示的是这种情况的表示属性。

如果要检查证书的主题是否匹配,则需要比较每个 RDN 字段,而不是字符串。

【讨论】:

  • 完美,谢谢你的回答,这是有道理的,让我有信心在一个或另一个上正常化(如上所述,我实际上无法修改后端应用程序,这真的是罪魁祸首因为它配置了一个正则表达式来匹配字符串,而不是查看 ASN.1 值)。
  • 乐于助人。当您有足够的声誉时,考虑将答案标记为正确或赞成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多