.NET通过AppSetting通过thumbprint查找证书

dho*_*ge7 5 .net vb.net app-config certificate

这个真的很奇怪,我无法弄清楚为什么一种方法有效,一种方法无效.

我在我的本地计算机商店有一个证书和一个指纹.应用程序在发出HTTP Web请求时使用证书,因此我需要获取它.我想将指纹存储在web.config中作为AppSetting值.每当我拉取AppSetting值并使用它来查找证书时,它都找不到它.但是,如果我创建一个局部变量(类变量,readonly,const,等等......)并通过它进行搜索,它就可以工作.我已经完成了String.Compare(),两者的值完全相同 .是什么赋予了?我试着看看IL,看看我是否能看到一些时髦但没什么的东西.

' This Works '
Dim certificateThumbprint As String = "D0650C9D31CF525D3C82153DCEBC3C3265D75FE3"
Dim certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, certificateThumbprint, False)

' This doesn't '
Dim appSettingcertificateThumbprint = System.Web.Configuration.WebConfigurationManager.AppSettings("CertificateThumbprint")
Dim certCollection2 = certStore.Certificates.Find(X509FindType.FindByThumbprint, appSettingcertificateThumbprint, False)

' Intermediate window shows that '
String.Compare(certificateThumbprint, appSettingcertificateThumbprint, True) = 0
Run Code Online (Sandbox Code Playgroud)

ant*_*nce 6

因此,当您从证书的属性窗口复制并粘贴指纹字符串时,可能还会遗留一个不会显示在Visual Studio窗口中的不可见十六进制字符.(见这里)

我最终做的是将指纹复制到Notepad ++,在它下面划一行,按照我看到它的方式输入它,将其复制回web.config,然后从那里运行.这看起来很完美.


小智 4

我也发现了完全相同的问题,经过广泛的搜索,除了您上面建议的那种事情之外没有找到答案。

也许微软可以评论他们的Certificates.Find 函数的匹配方法,以便我们有机会可靠地使用内置功能。