Signtool和sn或al之间在程序集签名方面有什么区别?

15

我看到了像SN这样的工具,它可以生成用于签名程序集的私钥/公钥对。同时,我们也可以使用AL工具为程序集指定强名称。

此外,我们还有Sign工具,用于签署程序集(可能仅适用于与证书一起使用?)

两者之间的确切区别是什么?当使用证书时,是否必须使用Sign工具,并且是否可以在SN中实现?还是它们完全不同?

请帮忙解答。


你尝试过在互联网上搜索吗?你找到了什么? - Mitch Wheat
2
到目前为止,我还没有找到任何一篇文章能够解释这两者之间的区别。 - sveerap
1个回答

10

Signtool是用于代码签名的工具,它提供了代码完整性检查和发布者身份验证。

Sn是用于强名称的工具。它仅适用于.NET程序集,并解决了唯一标识符问题。

这两个工具都可以确保文件未被篡改,但只有代码签名(signtool)可以确保文件的发布者。

我们可以使用SignTool.exe对给定的pfx文件进行签名和时间戳,即使文件是强名称的dll文件。


1
谢谢回复。那么这意味着,我可以为程序集拥有单独的私钥和公钥进行强名称,然后通过提供证书或密钥(不同于之前的)给签名机构来使用签名工具进行签名?当我们说强名称时,它也意味着数字签名是强名称组件之一,对吗?其中,数字签名部分,将是使用强命名(sn 或 al 工具)创建的还是使用签名工具创建的? - sveerap
1
此外,当我使用ildasm检查强名称dll时,我可以看到版本、公钥,但在清单中找不到数字签名。它确切地存储在哪里? - sveerap
1
@sveerap:是的,你可以为强名称拥有私钥/公钥,然后使用signtool进行签名。你的强名称将使用使用sn工具创建的公钥/私钥。我没有尝试找出签名是否位于清单中,也不知道是否在其中。要指定强名称,您实际上不需要知道数字签名。您为什么想找到它? - Harvey Kwok
1
@sveerap:你的问题关于SN数字签名的位置让我睡不着觉 :). 我从CLI规范中找到了答案。http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf。请参见第189页第25.3.3节。SN数字签名存储在PE文件格式的扩展部分之一中。这仅由CLI加载器使用。再次强调,您不需要在您的strong name中使用它。 - Harvey Kwok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接