首页/技术分享

Revit二次开发教程:如何对插件进行双数字签名

发布于:2019-02-18 17:13:05
7286人 分享

本文来源:微信公众号:bimliang   作者:BIMCoder梁老师  更多内容请关注微信公众号


今天说说数字签名这个事情。一般来说公司发布插件产品肯定要对插件进行数字签名的。之前的文章也提到,Autodesk Revit自2017版开始对插件进行数字签名认证。

所谓数字签名就是添加到文件的电子安全标记。使用它可以验证文件的发布者以及帮助验证文件自被数字签名后是否发生更改。如果文件没有有效的数字签名,则无法确保该文件确实来自它所声称的源,或者无法确保它在发布后未被篡改(可能被病毒篡改)。

当每次编译完dll,然后用Revit加载调试时,Revit都会提示“永远加载”,“加载一次”,“不载入”三种情况。

a. 如果你就编译一次,以后永远都不会编译了,就选择“永远加载”。这种情况一般是我们从开源社区下载常用工具代码,自己编译dll的情况。比如自己从Github编译Revit Lookup工具。

b. “加载一次”, 一般就是调试的时候常用的情况。

c. "不载入",字面意思,不过多解释。


那么如果我们购买了数字签名证书,该如何对自己的dll进行签名呢?什么是双数字签名?怎么进行双数字签名?这都是我需要告知大家的。

假设我们已经从安全证书公司购买了数字签名证书,我们对dll最佳的签名方式是使用脚本签名,常用的就是bat脚本。

双数字签名指的是既对dll进行sha1算法签名,又对其使用sha256签名。“sha1加密算法的不安全性越来越高,sha1造假成本越来越低,随即微软、谷歌等IT巨头相继发布弃用sha1加密算法声明,第三方认证机构自2016年1月1日起,将全面停止签发SHA1算法的数字证书。” SHA1算法被SHA-256所取代,所以我们的插件dll需要双签名操作,当然你可以只用sha256。

进行签名前的文件清单:

1. 证书文件:xxx.pfx

2. 你的待签名dll: xxx.dll


3. signtool及其依赖项:

a. appxpackaging.dll

b. appxsip.dll

c. Microsoft.ComparePackage.Lib.dll

d. Microsoft.Windows.Build.Appx.AppxPackaging.dll.manifest

e. Microsoft.Windows.Build.Appx.AppxSip.dll.manifest

f. Microsoft.Windows.Build.Appx.OpcServices.dll.manifest

g. Microsoft.Windows.Build.Signing.mssign32.dll.manifest

h. Microsoft.Windows.Build.Signing.wintrust.dll.manifest

i. mssign32.dll

j. opcservices.dll

k.signtool.exe

l. signtool.exe.manifest

m. wintrust.dll

o. wintrust.dll.ini


以上这些文件上哪里找呢?

在Win10系统里:

D:\Windows Kits\10\bin\10.0.17134.0\x86文件夹中

把他们复制出来的时候记得也放一个文件夹里,因为signtool.exe是依赖于这些的。


那么为什么是win10系统,win7可以不?

貌似不行唉,版本太低,反正我自己测是签不了sha256,想了好久。。。

下载个Win10的SDK里应该也会有上述文件。

需要说明的是exe,dll可以双数字签名。msi只能sha1,不能sha256,这是我测试的结果,欢迎来群里讨论。


最后祭出脚本,方便各位local bat script或者server Jenkins全自动化工作:

SHA1:

signtool.exe sign /f xxx.pfx /p password /t http://timestamp.verisign.com/scripts/timestamp.dll /v xxx.dll 


SHA256:

signtool.exe sign /f xxx.pfx /p password /fd sha256 /tr sign256url /v /as xxx.dll

红色部分需要全路径或相对路径,因为每家sha256的签名url不同,所以蓝色部分填上购买的数字签名公司对应的时间戳地址。

转载请注明来源本文地址:https://www.tuituisoft/blog/2087.html

上一篇:

用了BIM后,图纸工作量增加了吗

下一篇:

Revit二次开发教程:获取相交构件及Face重合的判断