我正在尝试理解用于数字签名的Java API。 我应该使用自定义cryptoprovider来组成数字签名。我知道如何使用此CSP签署文档并获取分离签名,现在我需要为此签名添加时间戳和证书状态(以使签名对政府机构有效)。这些都是使用TSP和OCSP完成的。 问题是:
答案 0 :(得分:3)
应该从哪里获得TSP客户端?
要使用CMS,TSP和OCSP,您可能需要查看Bouncy Castle。他们支持主要软件包中的所有软件包以及补充CMS和TSP软件包。
我是对的,使用内置的java OCSP支持验证证书就足够了吗?
尽管标准PKIX证书验证机制支持OCSP,但是集成它可能是有意义的。以自定义PKIXCertPathChecker形式的Bouncy Castle OCSP代码。您可以在现有验证之上添加它,也可以使其成为完整的替代品,可以找到说明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下载。该标准提供了有关如何正确嵌入其他签名数据(如时间戳和吊销信息)的更多信息。
答案 1 :(得分:2)
如果您正在研究与提供商相关的Java密码术,我建议您使用BouncyCastle(http://www.bouncycastle.org/java.html)。
从它的网站引用: