2012-04-11 43 views
2

我正在使用智能卡对用户进行身份验证。我有一个认证服务(SecurityTokenService),它处理服务器上的认证逻辑。我们是否需要始终在机器上安装根证书?

我正在使用X509Certificate2.Verify()来验证证书。由于此API可通过联机并联系证书颁发机构(CA)来检查证书是否有效/撤销,我需要在服务器上使用根证书吗?

我们可以避免在本地计算机上拥有根证书吗?或者根证书总是强制性的?

回答

5

我尝试了一些东西,这里有意见:

  1. 首先X509Certificate2.Verify(),如果在链中的所有证书被吊销不检查。从this后我开始知道Verify方法在内部使用Crypt32 CertVerifyCertificateChainPolicy函数。它的文档说它不执行证书撤销检查。简而言之,Verify方法只是检查被调用的证书是否被撤销。

  2. 关于根证书:

希望这可以帮助别人谁想要知道更多一点关于证书验证在C#。

+0

奇怪的答案CSharpLearner:大多数时候你没有明确需要验证* root *证书,你需要的是一个*显式信任的链*。通常情况下,您只能信任系统上的根证书,但您可以相信任何中间证书或最终用户证书。这并不意味着这个答案对于这个特定的框架*是错误的,但它肯定不适用于其他框架...... – 2012-04-14 11:00:10

+0

@owlstead:感谢您的评论;这很有帮助。我发布的是我在几次试验后的观察。如果您的计算机上存在有效的root证书,那么您将得到绝对正确的验证,而不会出现像“PartialChain”这样的消息/状态。话虽如此,是否需要验证整个链(包括根证书)是需求和选择的问题。出于好奇:如果root证书本身被吊销,该怎么办?或者这是不可能的事情?如果不是,我们是否也不应该验证根证书? – Learner 2012-04-16 04:35:50

+0

通常情况下,您只能使用序列号吊销证书;自签名(根)证书通常是“带外”处理 - 这包括吊销证书。在一个良好的CA结构中,根证书的私钥只是现在使用,然后创建新的CA,并为现在和当时创建一个CRL。某处。所以它受到攻击的可能性应该很小。 – 2012-04-16 10:07:56

相关问题