主题中带有电子邮件地址的 x509 证书在 java .vs net 中不同

x509 cert with email address in subject are different in java .vs net

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

在 .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 的一个 "interpretation" 更改为另一个似乎微不足道,但问题是我们有两个我们无法更改的 COTS 产品,在我们之前开始解决这个问题 我想了解哪个(或两者都是?)正确的,以及是否某层上有什么东西导致了差异。 RFC 似乎都引用了 EMAILADDRRESS,但正如 IE 和 FF 以及 .Net 应用程序所说,它们似乎都在使用 "E"

谁能解释为什么会这样?

谢谢!

EEMAILADDRESS 是同义词。

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

这意味着emailAddress不是用字符串EEMAILADDRESS存储的,而是作为一个ASN.1结构和标识符1.2.840.113549.1.9.1存储的,什么.NET,Java 或 IE 显示的是此属性的表示。

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