为什么需要进行数字签名
为了保证系统的安全,现在Windows对于通过网络上下载的应用程序的执行文件都会首先阻止,并提示用户是否要运行。这个时候,同时会提示这个应用程序的发行者。如果一个没有进行数字签名的应用程序,这个时候发行者就为“未知”,签名后,就可以告知用户这个应用程序是由你提供的。在这里,数字签名就是保证这个应用程序是由你发行,并未被第三方更改的。
上面这种情况还好,很多时候,如果你安装了360之类的软件,对于未签名的应用程序,大部分情况是阻止其运行的。如果没有进行数字签名,那么对用户会造成极大困扰。
对执行文件进行数字签名还有诸多好处,我就不一一例举。现在购买一个代码签名的证书也不算贵,对于类似我们这种发行客户端应用程序的厂商而言,是很有必要购买一个证书的。
签名的类型介绍
签名有程序集签名和ClickOnce签名
程序集签名:.net里边有个概念 程序集强签名,这个只用于net,保证程序集不被修改。程序集签名(也称为强名称签名)赋予应用程序或组件一个唯一标识,其他软件可用该标识来显式标识和引用该应用程序或组件。强名称由程序集的简单文本名、版本号、区域性信息(如果提供)以及公钥/私钥对组成。
ClickOnce签名:ClickOnce的应用程序清单(即app.exe.manifest文件)和部署清单(即app.application文件)进行签名。这样的签名实际上保证客户端正确识别ClickOnce部署包的发行者以及完整性,保证不被第三方篡改。如果不对ClickOnce清单进行签名的话,那么在安装(即运行app.application文件)的时候,安装程序就无法显示发行者,在某些企业环境下或某些安全软件下,就可能阻止application文件的运行(尤其你的应用程序需要获取Full Trust权限的时候更是如此)。但是,对于ClickOnce清单进行签名并不会对程序的执行文件进行签名(虽然同样需要代码签名数字证书)。
如果不需要发布的话只需要程序集签名即可。
VS2022签名步骤
使用命令行创建
记得使用管理员启动,避免权限问题 搜索vs
输出以下命令创建snk的密钥文件
cd 你的路径
sn -k out.snk
使用vs打开项目,右击属性 - 点击浏览选中刚刚创建的snk文件
生成项目,就实现了为程序集添加签名。
你可以使用 sn -v "程序集地址\youdll.dll"
如果打开文件夹删除这个out.snk,你vs编译就会报错.
你可以引用另一个程序的dll,执行程序用到另一个程序的内容就会报错
使用VS创建
点击属性 - 签名 - 勾选程序签名
输入信息
之后会生成一个.pfx的文件