我想在具有安全时间戳的数据库中签署记录,以证明在该日期之后没有被任何人更改过.
我应该考虑哪些方法或协议?RFC 3161?我发现声称提供该服务的大多数网站对我来说并不是非常有信誉.
你可以自己动手吗?
是否存在加密机制,通过该机制可以使用日期对文档进行签名,以便以后不可能伪造相同的签名?也许某种服务器发布每日加密密钥(但你怎么能信任它们?;-).
对于不可避免的刺激实用主义者,我不是想完成一些任务.我只是好奇解决方案空间是什么样的.
我想用我自己的Authenticode时间戳服务为我的DLL文件加上时间戳.这可能吗?我怎么能实现这个目标?
我们正在努力使用signtool.exe 摘要选项来优化数字签名过程。到目前为止,工作流程如下所示:
有没有办法在签名服务器上执行时间戳?
我现在看了一天,还是一头雾水。我想将数字签名添加到带有来自TSA(TimeStamp Authority)的时间戳的 PDF 中。
我可以将请求发送到 TSA 并接收二进制响应,但是如何将该时间戳附加到我的 pkcs7 数字签名中。
我正在使用带有 TCPDF 和openssl_pkcs7_sign()
函数的PHP 。我需要添加时间戳作为额外的证书吗?谢谢!
我需要在Linux上对PE文件(实际上是EFI)进行数字签名和时间戳.我发现签名PE文件3个工具:pesign
,osslsigncode
和signcode
(单声道),但似乎没有一个很适合我的需要.问题是,密钥在硬件令牌上,无法导出.因此,我必须创建一个证书数据库,在那里添加令牌驱动程序条目并通过此DB工作.只pesign
允许这样,但它不支持时间戳.osslsigncode
并signcode
支持时间戳,但他们无法使用数据库.
Windows signttool.exe
可以作为单独的步骤执行签名和时间戳.所以我想,我可能会pesign
用来签名文件,然后只用其他工具加盖时间戳.但是正如我发现的那样,osslsigncode
并且signcode
不支持单独的时间戳(在osslsigncode
项目中它列在TODO
文件中,但在存储库中没有它的迹象).
我错过了一些工具吗?有没有太低级别的库可以让我自己编写这样的程序吗?(最好是C/C++/Perl/Python.)我试图从中获取时间戳代码osslsigncode
,但未能轻易地从之前的步骤中删除它(删除现有签名并添加新签名).
PS我也尝试signtool.exe
在葡萄酒下运行,但1)未能使它运转,2)我不确定它是否合法允许(我不擅长分析EULA).
我有一个有效的 PKCS7 文件加载到 CMSSignedData 对象中。此 PKCS7 文件包括纯文本消息和有效的附加数字签名(都在同一个文件中)。
现在我想给这个文件加上时间戳。这是我正在使用的代码(源代码):
private static CMSSignedData addTimestamp(CMSSignedData signedData)
throws Exception {
Collection ss = signedData.getSignerInfos().getSigners();
SignerInformation si = (SignerInformation) ss.iterator().next();
TimeStampToken tok = getTimeStampToken();
ASN1InputStream asn1InputStream = new ASN1InputStream
(tok.getEncoded());
DERObject tstDER = asn1InputStream.readObject();
DERSet ds = new DERSet(tstDER);
Attribute a = new Attribute(new
DERObjectIdentifier("1.2.840.113549.1.9.16.2.14"), ds);
DEREncodableVector dv = new DEREncodableVector();
dv.add(a);
AttributeTable at = new AttributeTable(dv);
si = SignerInformation.replaceUnsignedAttributes(si, at);
ss.clear();
ss.add(si);
SignerInformationStore sis = new SignerInformationStore(ss);
signedData = CMSSignedData.replaceSigners(signedData, sis);
return …
Run Code Online (Sandbox Code Playgroud) 使用 tcpdf 库,我可以向 pdf 添加签名,但时间戳(RFC3161)尚未在该库(applyTSA)中实现,我需要此功能。
根据 ISO 32000-1:2008:
作为无符号属性的时间戳信息 (PDF 1.6):时间戳令牌应符合 RFC3161,并应按照 RFC3161 附录 A 中的描述进行计算并嵌入到 PKCS#7 对象中。时间戳的具体处理及其处理留给特定的签名处理程序来定义。
来自 RFC3161 附录 A
以下对象标识符标识签名时间戳属性:
id-aa-timeStampToken 对象标识符 ::= { iso(1) 成员主体(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) aa(2) 14 }
Signature 时间戳属性值具有 ASN.1 类型 SignatureTimeStampToken:
SignatureTimeStampToken ::= TimeStampToken
TimeStampToken 中的 messageImprint 字段的值应为带有时间戳的签名数据的 SignerInfo 中的签名字段值的哈希值。
使用 openssl 生成时间戳非常容易,但我不清楚如何将其嵌入到 PKCS#7 对象中。我的问题是:
举个例子将不胜感激
美好的一天,
我正在尝试将时间戳信息嵌入到pdf签名中,以便adobe会向我报告签名是时间戳.目前,我所获得的只是Adobe报告"签名包含嵌入式时间戳,但无法验证",当您查看日期/时间属性时,它表示"时间戳授权"不可用和"显示证书"是灰色的.
显然,我在构建PKCS#7消息时做错了.但我现在不知道.有人可以通过描述我需要采取的步骤来帮助我,以便我的签名有时间戳吗?或者建议一个可以帮我找到问题的工具?
我正在使用Crypto API.我目前遵循的步骤如下:
如何检查数据是否正确,以便adobe可以告诉我签名已被加上时间戳?
此致,玛格达
我们目前使用openssl进行时间戳记。我想知道,是否有Java实现时间戳协议(RFC 3161)。
我们有一个使用CA(Thawte)证书签名的Java Web Start应用程序.该应用程序分发给数百名客户.他们在服务器上托管它,在客户端计算机上通过互联网或内联网运行.现在它完美无缺.问题是应用程序是在没有时间戳的情况下签名的.证书到期后客户会怎样?他们应该能够启动应用程序吗?如果没有,我们如何帮助他们?将他们的服务器URL添加到例外站点列表是否有帮助?
我们尝试更改本地时间以假装证书过期.然后,由于安全性,应用程序被阻止 将URL添加到例外站点列表没有帮助:
java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date
at com.sun.deploy.security.RevocationChecker.checkOCSP(Unknown Source)
at com.sun.deploy.security.RevocationChecker.check(Unknown Source)
at com.sun.deploy.security.TrustDecider.checkRevocationStatus(Unknown Source)
at com.sun.deploy.security.TrustDecider.getValidationState(Unknown Source)
at com.sun.deploy.security.TrustDecider.validateChain(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGrantedInt(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Suppressed: com.sun.deploy.security.RevocationChecker$StatusUnknownException
at com.sun.deploy.security.RevocationChecker.checkCRLs(Unknown Source) …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Bouncy Castle 从 .NET 中的时间戳服务器读取响应。现在我想向客户端显示时间戳服务器证书,如何从响应中读取时间戳服务器证书?
提前致谢。