我需要根据结束证书重建证书链,然后导出链中的所有证书,为此我使用了X509Chain.Build(endCertificate)
方法,我的想法是这样可以尽可能地找到所有证书(来自不同的来源,如文件夹(通过ChainPolicy.ExtraStore
),但也可以从系统的所有证书存储区(如“我的”或“受信任的根证书颁发机构”))。如果证书丢失,我要求用户手动选择它(并且在下一次运行时它将被复制到一个ChainPolicy.ExtraStore
文件夹中)。重复此操作直到所有证书已知并且链可以成功构建。
但是,我现在遇到了我在测试中注意到的问题,即无法构建链,因为据说缺少中间CA证书。但是,此证书位于“LocalComputer/My”中。如果证书位于“LocalComputer/Intermediate Certificate Authorities”中,则它可以工作。
因此,问题是:如何确保使用整个证书存储区(LocalUser和LocalComputer以及所有子存储区)搜索证书?
- 系统:Windows 11 22 H2;. NET版本:网络6.0- windows *
1条答案
按热度按时间ndh0cuux1#
默认情况下,证书验证不会查看证书存储(如
My
)中的受信任根。如果需要,可以向ExtraStore
属性添加其他存储。您还需要设置
X509VerificationFlags.AllowUnknownCertificateAuthority
,否则它仍将被拒绝。请注意,这可能会导致重大安全问题,具体取决于您的使用情况,并且您可能需要对信任链执行其他手动检查。默认情况下使用
StoreName.Root
CertificateAuthority
和TrustedPeople
,AuthRoot
是Root
的子集。使用Disallowed
没有意义,这样就只剩下My
AddressBook
和TrustedPublisher
要添加。这是针对StoreLocation.LocalMachine
和CurrentUser
的。同样,CurrentUser
的安全风险更大。把所有的存储在一个
using
处理他们完成后。理想情况下,您应该首先将中间证书和根证书存储在正确的位置。