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

Ric*_*and 3 .net java asn.1 certificate x509

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

在 .Net 中,我看到服务器变量 CERT_SUBJECT 是这样的:

C=US, S=Delaware, L=Wilmington, O=IDFC Dev, OU=Test, CN=Richard Sand, E=rsand@idfconnect.lan
Run Code Online (Sandbox Code Playgroud)

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

EMAILADDRESS=rsand@idfconnect.lan, CN=Richard Sand, OU=Test, O=IDFC Dev, L=Wilmington, ST=Delaware, C=US
Run Code Online (Sandbox Code Playgroud)

忽略属性的颠倒顺序(这是一个已知的现象),我们遇到的问题是,在 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
Run Code Online (Sandbox Code Playgroud)

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

E = rsand@idfconnect.lan
CN = Richard Sand
OU = Test
O = IDFC Dev
L = Wilmington
S = Delaware
C = US
Run Code Online (Sandbox Code Playgroud)

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

谁能解释为什么会这样?

谢谢!

ped*_*ofb 5

EEMAILADDRESS是同义词。

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

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

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