想知道是否有人知道任何免费(试用)时间戳服务器服务.我想在itext中测试时间戳功能.就像我使用Start Com class 1作为免费CA进行测试一样.希望我说清楚.希望有人知道一个地方谢谢
我很好奇是否有办法对文件(技术上的任何数据)进行数字签名,例如合同或照片,因此从现在起10年后,可以证明它们是从这个时候开始,而不是从现在起9年后伪造.
例如,我可以编写对未来的预测,并用传统的方法对其进行签名,以证明我已经编写了它,然后对其进行时间戳签名,以便在实现时,我可以证明我预测它.
我想到的一种方式是可能有一个时间戳权威.您向他们发送数据,他们创建数据+时间戳的哈希值,并使用他们的私钥使用RSA加密哈希.因此存在签名文档:数据,时间戳,加密散列.
10年后,我对数据+假定的时间戳进行哈希,并检查它是否与我使用权限的公共RSA密钥(我信任的)解密的加密哈希相匹配.如果是,我知道时间戳是有效的.
我可以看到2个问题:
你能想到没有(其中一个)这些问题的解决方案吗?
签名jar并使用-tsa选项后,如何验证时间戳是否包含在内?我试过了:
jarsigner -verify -verbose -certs myApp.jar
Run Code Online (Sandbox Code Playgroud)
但输出没有指定时间戳的任何内容.我问,因为即使我在-tsa URL路径中有拼写错误,jarsigner也会成功.这是在GlobalSign TSA网址:http://timestamp.globalsign.com/scripts/timstamp.dll和服务器背后显然接受任何路径(即timestamp.globalsign.com/foobar),所以最后我不确定我的罐子是否加盖时间戳.
如果我通过签名设置时间戳,会发生什么?
如果我没有设置怎么办?
这是必要的吗?为什么推荐?
cryptography code-signing portable-executable trusted-timestamp
我已经将我正在使用的脚本发布到StackExchange Code Review站点.
我原来的问题是,有没有办法可以使用X.509证书和时间戳签署Git提交?.有一段时间我以为我只能用我的X.509证书签署的东西,我的X.509证书由一个受信任的第三方加盖时间戳.不是这种情况.使用X.509证书和可信时间戳进行数字签名是互斥的.我已更新我的问题以反映这一点.
正如VonC所指出的那样,使用X.509证书签署Git提交不会增加任何价值.由于Git内置支持,使用GPG密钥是一个更好的选择.
我已经接受了格雷格的回答,因为它与我要求的最接近,即使我原来的问题有点含糊不清.正如Greg指出的那样,如果你能证明你在某个时间点知道提交哈希,那么这可以保证你知道当时哈希所用的存储库内容,并且不需要在存储库中存储任何额外的数据.时间戳数据可以存储在任何地方.
可以使用openssl
(v1.0.0 +)并curl
为提交哈希请求RFC3161时间戳.
你需要有一些信息:
CONTENT_TYPE="Content-Type: application/timestamp-query"
ACCEPT_TYPE="Accept: application/timestamp-reply"
openssl ts -query -cert -digest "$REV" -sha1 \
| curl -s -H "$CONTENT_TYPE" -H "$ACCEPT_TYPE" --data-binary @- $URL
Run Code Online (Sandbox Code Playgroud)
以上将输出签名的时间戳stdout
.如果时间戳服务拒绝请求,它也可能输出错误.
这与请求时间戳非常相似,但您还需要:
时间戳服务应该使用由受信任的颁发机构颁发的证书签署时间戳.如果没有,你的时间戳没有太大的可信度.如果找不到或创建正确的证书链,请尝试使用cacert.pem
发布的curl
.就在这里.
以下代码段假定正在传递现有的签名时间戳回复stdin
.应该可以将上述请求直接传递给下面的verify命令.如果将请求中的响应存储在变量中,则可能需要对其进行base64编码/解码(man base64
).
openssl ts -verify -digest "$REV" -in /dev/stdin -CAfile "$CAFILE"
Run Code Online (Sandbox Code Playgroud)
如果您检查回复,您会注意到请求摘要与使用的Git修订版匹配.您可以使用此命令检查答复的纯文本版本. …
在我的构建过程中,我想要包含符合RFC-3161标准的TSA的时间戳.在运行时,代码将验证此时间戳,最好不需要第三方库的帮助.(这是一个.NET应用程序,所以我可以随时使用标准的哈希和非对称加密功能.)
RFC 3161依赖于ASN.1和X.690以及诸如此类的东西,实现起来并不简单,所以至少现在,我正在使用Bouncy Castle来生成TimeStampReq(请求)并解析TimeStampResp(响应).我只是无法弄清楚如何验证响应.
到目前为止,我已经弄清楚如何提取签名本身,公共证书,创建时间戳的时间,以及我发送的消息imprint摘要和nonce(用于构建时验证).我无法弄清楚的是如何将这些数据放在一起以生成散列和签名的数据.
这是我正在做什么以及我想做什么的粗略概念.这是测试代码,所以我采取了一些快捷方式.一旦我得到了有效的东西,我将不得不清理一些事情并以正确的方式完成它们.
// a lot of fully-qualified type names here to make sure it's clear what I'm using
static void WriteTimestampToBuild(){
var dataToTimestamp = Encoding.UTF8.GetBytes("The rain in Spain falls mainly on the plain");
var hashToTimestamp = new System.Security.Cryptography.SHA1Cng().ComputeHash(dataToTimestamp);
var nonce = GetRandomNonce();
var tsr = GetTimestamp(hashToTimestamp, nonce, "http://some.rfc3161-compliant.server");
var tst = tsr.TimeStampToken;
var tsi = tst.TimeStampInfo;
ValidateNonceAndHash(tsi, hashToTimestamp, nonce);
var cms = tst.ToCmsSignedData();
var signer =
cms.GetSignerInfos().GetSigners()
.Cast<Org.BouncyCastle.Cms.SignerInformation>().First();
// TODO: handle multiple signers?
var signature …
Run Code Online (Sandbox Code Playgroud) trust bouncycastle digital-signature trusted-timestamp rfc3161
我尝试将文件中的SOAP
消息发送XML
到Web服务,然后获取二进制输出并对其进行解码.端点使用HTTPS
协议,所以我TrustManager
在我的代码中使用以避免PKIX
问题.你可以在这里看到我的代码:
import javax.net.ssl.*;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.security.cert.X509Certificate;
public class Main{
public static void sendSoapRequest() throws Exception {
String SOAPUrl = "URL HERE";
String xmlFile2Send = ".\\src\\request.xml";
String responseFileName = ".\\src\\response.xml";
String inputLine;
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
public void checkServerTrusted(X509Certificate[] certs, String authType) { } …
Run Code Online (Sandbox Code Playgroud) 我正在阅读当代码签名证书到期时会发生什么 - Stack Overflow并想知道更复杂的答案.提供的答案更多是关于设置自己的CA. 即使使用您自己的CA,您仍然需要处理过期的代码证书.
如果您在不使用时间戳服务的情况下签署了代码,则在证书过期后,您的代码将不再受信任,并且根据安全设置,可能不允许其运行.您需要每1年或2年使用新证书或续订证书重新签署所有代码.
可信(数字)时间戳允许数字签名即使在证书本身过期后也有效.只有在进行了更改后,才需要使用新证书重新签名代码.
这听起来都是正确的吗?如果是这样,我需要建议使用什么时间戳服务,最好是实际使用过的服务.我还想知道是否有任何内部解决方案,类似于您自己的CA.
现在这适用于PowerShell脚本,但我最终会遇到与其他代码相同的问题.
更新:如何使用时间戳签署PS脚本的示例(您可以为此创建脚本):
Set-AuthenticodeSignature -filepath "D:\Projects\A Sample\MyFile.ps1"
-cert gci cert:\CurrentUser\My -codesigning
| where -Filter {$_.FriendlyName -eq "Thawte Code Signing"}
-IncludeChain All
-TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Run Code Online (Sandbox Code Playgroud)
然后,要查看签名者证书和TimeStamper证书,您可以这样做:
Get-AuthenticodeSignature MyFile.ps1 | fl *
Run Code Online (Sandbox Code Playgroud)
它为您提供证书和时间戳证书的主题(CN,OU等),颁发者,前/后日期和指纹.您还会收到一条消息,指示签名的状态.
我刚从StartSSL获得了代码签名证书,并且正在尝试签署我们的安装程序.
签名过程顺利,我得到一个安装程序exe,Windows不再抱怨来自未知的发布者.这很棒!
但是我试图确保时间戳也像宣传的那样工作,所以在我的代码签名证书到期日期之后我将我的PC日期移到了2012年.
这应该没有任何区别但是当我运行相同的安装程序exe时,我现在得到了同样令人讨厌的"未知发布者"警告.
在数字签名选项卡中查看exe的属性我可以肯定地看到时间戳显示今天(2010),但这似乎没有任何帮助.
谷歌搜索没有给我任何东西,除非你在时间戳字段中看到日期然后一切正常.我不敢相信,我的PC有高级约会抱怨它不行.
有谁知道这个时间戳概念是否有效以及如何确保我正确签署可执行文件?
谢谢.
我们刚刚从SHA-1切换到SHA-2代码签名证书.(作为背景信息,我们使用COMODO代码签名证书在Windows上使用signtool.exe签署.exe和.xap文件.)我们使用经过认证的时间戳来执行此操作,以确保Windows在代码签名证书后始终信任代码签名到期.
现在我注意到使用http://timestamp.comodoca.com/authenticode时,时间戳证书仍然是SHA-1证书.(详细信息:df946a5 ...主题'CN = COMODO时间戳签名者,O = COMODO CA Limited,L = Salford,S =大曼彻斯特,C = GB'.)
(在Windows上,可以通过签名.exe查看该证书,然后在其Explorer Properties对话框中转到Digital Signatures选项卡,选择签名并单击Details,然后在Digital Signature Details对话框中单击counter签名并单击Details,然后在第二个"数字签名详细信息"对话框中单击"查看证书".如果"签名哈希算法"为"sha1",则证书为SHA-1证书.)
这会是一个问题吗? 换句话说,在我们当前的代码签名证书过期之后,并且在Microsoft Windows将SHA-1视为破坏的算法(最迟在2020年)之后,我们当前的签名是否仍然可信?或者Windows会说,"时间戳在代码签名证书的有效范围内,但时间戳是用SHA-1证书签名的,所以我不相信时间戳,因此我不相信这个签名"?
我们可以/应该使用其他服务吗?(不是Verisign的http://timestamp.verisign.com/scripts/timstamp.dll,因为他们还使用SHA-1时间戳证书,即6543992 ...)
code-signing ×5
java ×2
rfc3161 ×2
signing ×2
bouncycastle ×1
certificate ×1
cryptography ×1
encryption ×1
git ×1
jar ×1
powershell ×1
security ×1
sha1 ×1
sha2 ×1
soap ×1
timestamp ×1
timestamping ×1
trust ×1
web-services ×1
xml ×1