AnK*_*ing 2 c# iis certificate x509certificate2 x509certificate
在我的应用程序中,我需要能够在本地存储中找到与某个发行者名称匹配的证书。所以,我之前做的是:
LocalStore.Certificates.Find(X509FindType.FindByIssuerName, "My Common Name", True)
Run Code Online (Sandbox Code Playgroud)
但是由于安装了新的证书服务器并使用活动目录,我的证书“颁发者”字段具有附加属性(DC 值)。完整的字符串如下所示:
"CN=My Common Name, DC=MyCompanyDomain, DC=local"
Run Code Online (Sandbox Code Playgroud)
这不会让我像以前一样使用 Find 方法,并且 CN、DC 值的任何组合对我都不起作用。
这是我在 ImmediateWindow 中尝试过的:
?LocalStore.Certificates.Item(0).IssuerName
{System.Security.Cryptography.X509Certificates.X500DistinguishedName}
Name: "CN=My Common Name, DC=MyCompanyDomain, DC=local"
Oid: {System.Security.Cryptography.Oid}
RawData: {Length=85}
m_distinguishedName: "CN=My Common Name, DC=MyCompanyDomain, DC=local"
m_oid: {System.Security.Cryptography.Oid}
m_rawData: {Length=85}
?LocalStore.Certificates.Find(X509FindType.FindBySubjectName, "My Common Name", True).Count
0
?LocalStore.Certificates.Find(X509FindType.FindByIssuerName, "My Common", True).Count
0
?LocalStore.Certificates.Find(X509FindType.FindByIssuerDistinguishedName, "My Common Name", True).Count
0
?LocalStore.Certificates.Find(X509FindType.FindByIssuerDistinguishedName, "My", True).Count
0
Run Code Online (Sandbox Code Playgroud)
你可能想要的是FindByIssuerDistingushedName.
FindByIssuerName是一个不区分大小写的子字符串,以逗号分隔符和没有字段标记的前向顺序与发行者名称匹配。这作为一个句子没有多大意义,所以让我们举个例子。
正常的 Windows(和 .NET)打印方式实际上是颠倒的,因此您的 Issuer Distinguished Name 很可能是DC=local, DC=MyCompanyDomain, CN=My Common Name。FindByIssuerName 将该值转换为 string local, MyCompanyDomain, My Common Name,然后将匹配(不区分大小写)在该字符串中的任何位置找到您的输入。
FindByIssuerDistinguishedName,另一方面,是一个不区分大小写的等于与 cert.Issuer 返回的相同字符串。所以你已经拥有的字符串将是一个匹配项。
https://github.com/dotnet/corefx/blob/f252ef6d695176143aa46b855db5553fb6e44921/src/System.Security.Cryptography.X509Certificates/tests/FindTests.cs#L381-L406显示了 FindservingIsuerName-FindServingIsuerName 的测试行为。
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |