在icertifatepolicy接口的MSDN示例中,有一个枚举,它列出了可以通过ValidationCallback
返回的所有可能的状态错误码:
public enum CertificateProblem : long
{
CertEXPIRED = 0x800B0101,
CertVALIDITYPERIODNESTING = 0x800B0102,
CertROLE = 0x800B0103,
CertPATHLENCONST = 0x800B0104,
CertCRITICAL = 0x800B0105,
CertPURPOSE = 0x800B0106,
CertISSUERCHAINING = 0x800B0107,
CertMALFORMED = 0x800B0108,
CertUNTRUSTEDROOT = 0x800B0109,
CertCHAINING = 0x800B010A,
CertREVOKED = 0x800B010C,
CertUNTRUSTEDTESTROOT = 0x800B010D,
CertREVOCATION_FAILURE = 0x800B010E,
CertCN_NO_MATCH = 0x800B010F,
CertWRONG_USAGE = 0x800B0110,
CertUNTRUSTEDCA = 0x800B0112
}
这些不同的状态码代表什么?它们不在链接引用的SSPI状态码文档中。
我花了很长时间试图弄清楚这一点,并最终能够找到一个VMware c#文件,其中包含不同代码的解释:
CertEXPIRED
所需证书不在有效期内
CertVALIDITYPERIODNESTING
证书链的有效期嵌套不正确
CertROLE
一个只能用作最终实体的证书被用作CA,反之亦然
CertPATHLENCONST
违反了证书链中的路径长度约束
CertCRITICAL
证书
CertPURPOSE
CertISSUERCHAINING
给定证书的父证书实际上没有颁发该子证书
CertMALFORMED
证书缺失或重要字段为空值,例如主题或颁发者名称
CertUNTRUSTEDROOT
正确处理的证书链,但终止于不受信任提供者信任的根证书
CertCHAINING
在某个链接应用程序中,证书链没有像它们应该的那样链接
CertREVOKED
证书被其颁发者显式吊销
CertUNTRUSTEDTESTROOT
根证书是一个测试证书,策略设置不允许测试证书
CertREVOCATION_FAILURE
撤销程序无法继续-无法检查证书
CertCN_NO_MATCH
证书的CN名称与传递的值
CertWRONG_USAGE
证书对请求的用法无效
CertUNTRUSTEDCA
不受信任的CA