问题标签 [trusted-timestamp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pdf - 具有可信时间戳的 PDF 签名服务,无需用户交互
我正在寻找用于数字签名文档(主要是 PDF)的服务(具有公共 API - REST 或 SOAP)。在现有 SDK 的最佳情况下。
我发现了很多服务,但它们都在浏览器中强制用户交互。我需要在后台做所有事情,最后提供签名文件。
它可能是需要收费的商业服务。
有人可以推荐这项服务吗?
linux - 如何在 Linux 上将时间戳证书添加到签名的 PE 文件中?
我需要在 Linux 上对 PE 文件(实际上是 EFI)进行数字签名和时间戳记。我找到了 3 个用于签署 PE 文件的工具:pesign
和osslsigncode
( signcode
mono),但似乎没有一个完全符合我的需求。问题是,密钥位于硬件令牌上,无法导出。因此我必须创建一个证书数据库,在那里添加令牌驱动程序条目并通过这个数据库工作。只pesign
允许这样做,但不支持时间戳。osslsigncode
并signcode
支持时间戳,但他们不能使用数据库。
Windowssignttool.exe
可以将签名和时间戳作为单独的步骤执行。所以我想,我可能会用它pesign
来签署文件,然后只用另一个工具给它加上时间戳。但是正如我发现的那样,osslsigncode
并且signcode
不支持单独的时间戳(在osslsigncode
项目中它在文件中列出TODO
,但在存储库中还没有迹象)。
我错过了一些工具吗?是否有不太低级的库可以让我自己编写这样的程序?(最好是 C/C++/Perl/Python。)我试图从 获取时间戳代码osslsigncode
,但未能轻松地将其与前面的步骤(删除现有签名并添加新签名)分离。
PS 我也尝试signtool.exe
在 wine 下运行,但 1) 未能使其正常工作,以及 2) 我不确定它是否合法(我不擅长分析 EULA)。
python - 使用python的时间戳查询
我想用命令创建一个像 openssl 这样的 .tsq 文件:
openssl ts -query -data <file>
-no_nonce -sha512 -out<out.tsq>
我想用python实现这个,任何人都知道如何做到这一点,任何模块或类似的东西?
java - 我必须传递来自 CMSSignedData 对象的哪些数据才能生成有效的时间戳?
我有一个有效的 PKCS7 文件加载到 CMSSignedData 对象中。此 PKCS7 文件包括纯文本消息和附加的有效数字签名(都在同一个文件中)。
现在我想给这个文件加上时间戳。这是我正在使用的代码(source):
我可以获得一个有效的时间戳,我可以将它放入我的 CMSSignedData 对象中,并将其保存到一个文件中,将字节从 signedData.getEncoded() 写入硬盘。但是当我用第三方软件验证我的新的带时间戳的文件时,这个软件告诉原始签名是好的,但时间戳与签名不对应。该软件还可以显示原始纯文本消息。
我认为问题出在这一行:
我想我必须传递一个摘要而不是一个虚拟字节数组,但我不知道哪个摘要,或者我必须时间戳的正确字节是什么。我成功地可以SignerInformation
从我的signedData
. 然后我尝试reqGen.generate()
将mySignerInformation.getSignature()
. 时间戳验证失败。然后我通过了 的 Sha1 摘要mySignerInformation.getSignature()
,但我的时间戳验证再次失败。
RFC3161规范说:
2.4.1。请求格式
时间戳请求如下:
TimeStampReq ::= SEQUENCE { version INTEGER { v1(1) }, messageImprint MessageImprint, --a 哈希算法 OID 和要被处理的数据的哈希值
(...)
messageImprint 字段应该包含要加时间戳的数据的散列。哈希表示为八位字节字符串。它的
长度必须与该算法的散列值的长度相匹配
(例如,SHA-1 为 20 字节,MD5 为 16 字节)。MessageImprint ::= SEQUENCE { hashAlgorithm AlgorithmIdentifier, hashedMessage OCTET STRING }
但是,如果我想对 CMSSignedData 对象中的字节进行时间戳记,它不会告诉我在哪里或如何获取 MessageImprint 数据。
我是这个数字签名的新手。
code-signing - 代码签名时是否/如何避免 SHA-1 签名时间戳?
我们刚刚从 SHA-1 切换到 SHA-2 代码签名证书。(作为背景信息,我们使用 COMODO 代码签名证书在 Windows 上使用 signtool.exe 对 .exe 和 .xap 文件进行签名。)我们使用经过认证的时间戳来执行此操作,以确保 Windows 在代码签名证书之后继续信任代码签名过期。
现在我注意到时间戳证书仍然是 SHA-1 证书,当使用http://timestamp.comodoca.com/authenticode时。(详细信息:它是 df946a5... 主题为 'CN=COMODO Time Stamping Signer,O=COMODO CA Limited,L=Salford, S=Greater Manchester,C=GB'。)
(在 Windows 上,可以通过获取签名的 .exe 来查看该证书,然后在其资源管理器属性对话框中转到数字签名选项卡,选择签名并单击详细信息,然后在数字签名详细信息对话框中单击计数器签名并单击详细信息,然后在第二个数字签名详细信息对话框中单击查看证书。如果证书的“签名哈希算法”为“sha1”,则该证书是 SHA-1 证书。)
这会是一个问题吗? 换句话说,在我们当前的代码签名证书过期之后,并且在 Microsoft Windows 将 SHA-1 视为损坏的算法之后(最迟在 2020 年),我们当前的签名是否仍然可以信任?或者Windows会说“时间戳在代码签名证书的有效范围内,但是时间戳是用SHA-1证书签名的,所以我不会信任时间戳,因此我不会信任这个签名”?
我们可以/应该使用其他服务吗?(不是 Verisign 的http://timestamp.verisign.com/scripts/timstamp.dll,因为他们仍然使用 SHA-1 时间戳证书,即 6543992 ...)
visual-studio - 为什么我的可执行文件上的签名仍然有效?
我有这个可执行文件,用 vb.Net 编写并编译为 .Net Framework 2.0 的 Windows 可执行文件。因为我们使用软件白名单来防止 Windows 客户端上出现未知软件,所以此可执行文件是使用 Visual Studio 2008 Professional工作流进行强命名和签名的:
为此,我们运行一个公司 RootCA,为每个公司分支运行一个中间 CA,并在每个分支之下运行一个发行 CA。“我的”发行 CA 向我提供了一份代码设计证书,该证书已在几个月前到期。
因为我在工作流程中使用了受信任的时间戳(Authenticode),所以在通过其文件属性检查签名时签名是 / 仍然有效,用户仍然能够在不触发 Windows AppBlocker 的情况下执行它。一切都很好。
现在,我被告知我的证书已被吊销,我可以通过查看 crl 来验证。根据CA管理,现在应该已经失效一个月了,但签名仍然有效。
我相信是 crl 中提供的原因导致了这种情况。根据RFC 3161,§4 Bullet 1:
当一个 TSA 不再被使用,但 TSA 私钥没有被泄露时,该机构的证书应被撤销。当与来自 TSA 的已撤销证书相关的 reasonCode 扩展出现在 CRL 条目扩展中时,它应设置为未指定 (0)、affiliationChanged (3)、已取代 (4) 或 cessationOfOperation (5)。在这种情况下,在未来的任何时候,使用相应密钥签名的令牌将被视为无效,但在撤销时间之前生成的令牌将保持有效。当与来自 TSA 的已撤销证书相关的 reasonCode 扩展不存在于 CRL 条目扩展中时,所有已使用相应密钥签名的令牌应被视为无效。因此,建议使用 reasonCode 扩展。
所以我的问题/问题包括:
- RFC 3161 是否也仅适用于代码签名证书或 TSA?
- 如果是,如果在撤销前以原因 5 CessationOfOperation 进行签名,签名是否仍然有效?
- 如果是,如果证书在过期后被发现受损,是否可以/是否应该使用不同的原因再次吊销证书?仍然可能有数百个有效签名!
itext - 使用 iText 将 TSA 签名添加到现有 PDF
当我使用 Adobe Reader 时,我可以打开一个 PDF(没有任何签名),并为其添加时间戳并由 TSA 提供商签名。我自己并没有使用 TSA 时间戳来签署 PDF,实际上是 TSA 提供者在唱歌并为 PDF 加上时间戳。
我怎样才能对 iText 做同样的事情?
java - 证书过期时 Java Web Start 应用程序(没有时间戳签名)会发生什么?
我们有一个使用 CA (Thawte) 证书签名的 Java Web Start 应用程序。该应用程序分发给数百名客户。他们将它托管在他们的服务器上,然后在他们的客户端计算机上通过 Internet 或 Intranet 运行它。现在它完美无缺。问题是应用程序是在没有时间戳的情况下签名的。证书过期后客户会怎样?他们应该能够启动应用程序吗?如果没有,我们如何帮助他们?将他们的服务器 URL 添加到例外站点列表对他们有帮助吗?
我们试图更改本地时间以假装证书过期。然后由于安全原因,应用程序被阻止。将 URL 添加到异常站点列表没有帮助:
我们能做什么?当然,我们要求 Thawte 更新我们的证书,并要求我们的客户升级到已辞职的应用程序。但我们无法涵盖所有这些。当他们问我们时,我们需要为他们提供一些快速的建议。到期时间快到了,欢迎大家发表意见。
java - 如何检查证书过期后 Java Web Start 应用程序是否会继续工作
我们使用 CA (Thawte) 的代码签名证书对 Java Web Start 应用程序进行了签名。签名带有时间戳(我们将 -tca https://timestamp.geotrust.com/tsa参数传递给 jarsigner 工具)以在证书过期后有效。目前,当证书有效时,该应用程序运行良好。但是当我们尝试更改本地时间以模拟证书到期时,应用程序将无法启动。我们得到以下异常:
证书有效期为 09.10.2015 至 08.11.2017。
我们尝试使用 jarsigner 工具验证签名的 JAR。所有文件似乎都有一个时间戳:
所以 jarsigner 输出似乎是正确的。有人可以确认这真的意味着签名有时间戳吗?
我们注意到,如果我们只提前几 (3) 天更改当地时间,那么该应用程序就可以正常工作。但是如果我们改变它更多(周),那么我们就会得到例外。CA 服务器是否检查客户端本地时间是否有效?如果确实如此,我们如何模拟证书到期?谢谢你。
c# - 锁定资源并根据锁定时间生成时间戳
假设我想实现一个同步原语,它生成一个将在同步协议中使用的时间戳。时间戳是这样的,对于用于锁定资源的给定键,没有两个线程能够获得相同的时间戳值。
后一种规范的可能实现是:
请注意,TryEnterOrThrow和GetTimeStampOrThrow这两个 API 方法旨在通过使用类作为保护方法来使用,这些方法不允许编写不佳的代码破坏临界区的原子性。后一种方法还返回给定键的先前获取的时间戳值。时间戳保持如此之久,以至于其所有者没有退出关键部分。
我一直在脑海中运行所有可能的场景,但我似乎无法打破它——不仅是原子的,而是试图滥用它。我想我的问题是,因为这是我编写同步原语的极少数尝试之一——这段代码是万无一失的吗?它是否提供原子性?
帮助将不胜感激!