TSP,OCSP和CMS的Java实现

问题描述:

我想了解用于数字签名的Java API。 我应该使用自定义密码提供者来组成数字签名。我知道如何使用此CSP签署文档并获得分离签名,现在我需要为此签名添加时间戳和证书状态(以使签名对*当局有效)。这些东西是使用TSP和OCSP完成的。 问题:TSP,OCSP和CMS的Java实现

  1. 哪里应该得到TSP客户端?
  2. am我正确地说,使用内置的java OCSP支持 来验证证书是否足够?
  3. 有没有tsp和验证信息以某种方式与CMS连接?
  4. 最后和最有趣的:我应该怎么做与时间戳 信息和证书验证信息:它会被分离的文件或他们 是签名的一部分?

哪里应该得到TSP客户端?

要使用CMS,TSP和OCSP,您可能需要检出Bouncy Castle。他们支持所有主要软件包以及补充CMS和TSP软件包。

am我是否正确使用内置的java OCSP支持来验证证书?

尽管标准的PKIX证书验证机制支持OCSP,但它可能有意义, Bouncy Castle OCSP代码以自定义PKIXCertPathChecker的形式提供。您可以将其添加到现有的验证之上,或者将其作为一个完整的替代品,说明可以在here找到。在通过代理进行连接时,我们在使用内置的OCSP支持时遇到了问题,所以我们在过去使用这种技术取代了默认设置。

tsp和验证信息以某种方式与CMS连接?

TSP服务器向您发送的时间戳响应只不过是另一个CMS SignedData,因此它本身又是一种签名。为了避免大量单独的文件,您通常使用的内容是使用CMS的未签名属性功能将您的时间戳包含在原始签名本身中。您只需将时间戳添加为SignerInfo的usignedAttrs字段中的无符号签名属性,从而将单独的文件最小化为一个,签名本身将所有附加信息嵌入signedAttrs和unsignedAttrs字段中。

最后一个也是最有趣的:我应该如何处理时间戳信息和证书验证信息:它会被分离的文件还是它们是签名的一部分?

我已经描述过的时间戳;验证信息(如CRL和OCSP响应)可嵌入到SignedData的“crls”字段中。您可以在不中断实际签名的情况下添加这些内容 - 这些内容以及未签名的属性不会被考虑用于生成或验证签名。

如果您仅使用CMS(RFC 5652)嵌入信息,则意味着您将以相当专有的方案结束。根据您的需求,这可能已经足够好了。但是,如果您需要更多的互操作性,您可能需要查看CAdES(ETSI TS 101 733),这是一个免费的ETSI标准,可以在http://pda.etsi.org下载。该标准提供了有关如何正确嵌入附加签名数据(如时间戳和吊销信息)的更多信息。

+0

非常感谢你的回答!它现在清楚) – pls

+0

可能你可以回答我(我猜你在密码学问题上相当乱七八糟): 我正在实施CAdES-X Long Type 1,并且在SignerInfo中签名的属性中有强制属性SigningCertificateV2.SigningCertificateV2 :: = PolicyInformation :: = SEQUENCE序列{ESSCertIDv2,PolicyInformation可选 的 政策序列的 证书序列} { policyIdentifier CertPolicyId, policyQualifiers序列大小(1..MAX)一个PolicyQualifierInfo可选的 } 可能是你知道在哪里可以我找到PolicyInformation的来源? – pls

+1

不客气! PolicyInformation是可选的,并且AFAIK不用于CAdES签名。 – emboss

如果您正在研究与提供者相关的Java密码学,我会推荐使用BouncyCastle(http://www.bouncycastle.org/java.html)。

从它引用的网站:

  • 发生器/ OCSP的处理器(RFC 2560)。
  • TSP的发生器/处理器(RFC 3161 & RFC 5544)。