相关疑难解决方法(0)

验证RFC 3161可信时间戳

在我的构建过程中,我想要包含符合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

14
推荐指数
1
解决办法
1万
查看次数

代码签名时是否/如何避免SHA-1签名时间戳?

我们刚刚从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 ...)

sha1 code-signing sha2 timestamping trusted-timestamp

10
推荐指数
1
解决办法
2420
查看次数

如何将数字签名应用于 Visual Studio 项目?

可执行文件和 DLL 可以进行数字签名。它向用户表示信任

然而,我对这个主题的研究慢慢地无处可去。我想我需要一个关于如何直接在编译时对二进制文件进行数字签名的完整分步白痴指南。我的意思是:单击“构建”并检索签名的可执行文件。我真的不想自己手动签署所有内容。

Visual Studio 在项目属性中有一个“签名”选项卡,所以我想我必须看看那里。看来我需要一个.pfx文件。但是我究竟在哪里得到一个包含我的名字的人,我该如何正确使用它?

还有,这要花钱吗?- 每个二进制文件/仅一次/根本没有?

签名二进制文件示例:

例子

binary signing certificate visual-studio

8
推荐指数
1
解决办法
1万
查看次数

哪些 RFC 3161 公共时间服务器 URL 可以与signtool.exe 一起使用?

我在 Windows 上使用signtool.exe 使用 SHA256 签名进行代码签名。

我看到的唯一示例(来自赛门铁克)显示使用:

http://timestamp.geotrust.com/tsa
Run Code Online (Sandbox Code Playgroud)

..作为时间服务器。

例如:signtool.exe sign /a /s MY /n "Common name" /as /fd sha256 /tr http://timestamp.geotrust.com/tsa /v "<file to be signed>"

但我想知道是否还有其他公开支持的 RFC 3161 时间戳服务器也可以工作。

我这么问是因为我们之前在使用 SHA1 时通过使用几个不同的服务器(以及多次重试尝试 + 延迟)在代码签名过程中构建了冗余。这有助于解决非常偶然但令人烦恼的构建失败。

我想在使用 SHA256 进行代码签名时执行相同的操作。

windows code-signing rfc3161

5
推荐指数
1
解决办法
2242
查看次数