これは本当に奇妙で、なぜある方法が機能し、別の方法が機能しないのか理解できません。
ローカル コンピューター ストアに証明書があり、その拇印があります。アプリは HTTP Web リクエストを作成するときに証明書を使用するため、取得する必要があります。拇印を AppSetting 値として web.config に保存したいと考えています。AppSetting の値を取得し、それを使用して証明書を検索するたびに、それが見つかりません。ただし、ローカル変数(クラス変数、読み取り専用、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