IText7 .NET:CertIDBC.MatchesIssuer方法实现正确性核查
IText7 .NET 中 CertIDBC.MatchesIssuer 方法的实现问题
CertIDBC中的当前实现:
public virtual bool MatchesIssuer(IX509Certificate issuerCert) { return new CertIDBC( certificateID.HashAlgorithm.Algorithm.Id, issuerCert, new BigIntegerBC(certificateID.SerialNumber.Value) ).GetCertID().Equals(certificateID); }
正确的实现是否应为如下形式?
public virtual bool MatchesIssuer(IX509Certificate issuerCert) { return new CertIDBC( certificateID.HashAlgorithm, issuerCert, new BigIntegerBC(certificateID.SerialNumber.Value) ).GetCertID().Equals(certificateID); }
当前实现会导致两个证书的相等性检查出现问题:原始CertID不存在parameters字段,但从签发者创建的CertID带有该字段。这是因为CertIDBC构造函数在创建AlgorithmIdentifier时传入了DerNull.Instance。
对比可见,Java实现传递的是完整的AlgorithmIdentifier对象,而非仅提取其Id属性。从OCSP响应的ASN.1结构也能观察到这种差异:通过签发者生成的CertID包含额外的parameters字段,而原始CertID没有。
内容的提问来源于stack exchange,提问作者Linas
相关产品推荐
相关产品推荐

