【问题标题】:Is there a way to get signature creation date in signature that was created by pkcs11Interop?有没有办法在 pkcs11Interop 创建的签名中获取签名创建日期?
【发布时间】:2019-07-08 02:37:02
【问题描述】:

我使用 X509Chain.Build(X509Certificate2) 方法验证证书。如果证书有效,我使用 Pkcs11Interop 库对数据进行签名。有兴趣的用户可以下载此签名自行验证。但他们也应该能够检查证书的有效性。

我现在正在编写一些测试工具来获取所有这些文件并检查其有效性。但为了验证证书,我需要一个签名创建日期。 可以从签名中得到这个日期吗?

现在我将签名创建日期存储在表中的单独字段中。但我真的认为签名包含创建日期。至少我希望如此。

我正在验证证书,如果可以,我使用下一个代码来签署一些数据。

var privateKeys = session.FindAllObjects(SignSettings.PrivateKeyAttributes);

var mechanism = session.Factories.MechanismFactory.Create(CKM.CKM_GOSTR3411);

byte[] hash = session.Digest(mechanism, data);

var signMechanism = session.Factories.MechanismFactory.Create(CKM.CKM_GOSTR3410);

var signature = session.Sign(signMechanism, privateKeys[0], hash);

return signature;

然后我将此签名与签名数据一起存储在数据库中

在我的测试签名检查应用程序中,我使用 X509Chain 来检查证书是否有效。

var chain = X509Chain.Create();
var policy = chain.ChainPolicy;
policy.RevocationMode = X509RevocationMode.Offline;
policy.RevocationFlag = X509RevocationFlag.EndCertificateOnly;
policy.VerificationTime = @signatureDate;
policy.UrlRetrievalTimeout = UrlRetrievalTimeout;

chain.Build(cert);
return chain;

【问题讨论】:

    标签: pkcs#11 pkcs11interop


    【解决方案1】:

    使用常规 PKCS#11 调用,您将获得没有任何额外属性的普通签名。

    要在签名中嵌入登录日期,您必须使用 PKCS#7 消息传递功能。

    据我记得你之前的question,你正在使用 ruToken。
    看看他们自己的 samples 在 .Net 中使用 PKCS#11 扩展:

    byte[] signature = session.PKCS7Sign(SampleData.PKCS7_SignDataBytes,
        certificates[0], privateKeys[0], null, SampleConstants.UseHardwareHash);
    

    然后您可以使用EnvelopedCmsSignedCms 获取签名属性SignerInfo.SignedAttributes 其中之一是签名时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-05
      • 2012-01-17
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多