我有一个EXE文件,我想签名,以便Windows不会警告最终用户有关"未知发布者"的应用程序.我不是Windows开发人员.有问题的应用程序是从生成屏幕保护程序应用程序的应用程序生成的屏幕保护程序.因此,我对文件的生成方式没有影响.
我已经发现我需要来自Verisign或instantssl.com 等CA的代码签名证书.我不明白的是我需要做什么(如果可能的话)签署我的EXE文件.什么是简单的解释?
Mel Green的回答让我更进一步,但是signtool要我指定在任何情况下使用哪种证书.我可以以某种方式获得免费的代码签名证书来测试这对我是否有用吗?
另请注明哪种证书类型是正确的.大多数网站只提到"代码签名",并谈论签署用户实际编译的应用程序.对我来说情况并非如此.
您可以尝试使用Microsoft的Sign Tool
您可以将其作为Windows SDK for Windows Server 2008和.NET 3.5的一部分下载.下载后,您可以从命令行使用它,如下所示:
signtool sign/a MyFile.exe
这标志着一个可执行文件.我不确定它使用什么证书.
或者您可以尝试:
signtool signwizard
这将启动一个向导,引导您完成对应用程序的签名.(在Windows SDK 7.0之后,此选项不可用.)
如果您希望获得可用于测试签名可执行文件的过程的证书,则可以使用.NET工具Makecert.
证书创建工具(Makecert.exe)
一旦您创建了自己的证书并使用它来签署可执行文件,您就需要手动将其添加为您的计算机的受信任的根CA,以便UAC告诉用户运行它来自可靠的来源.重要的.将证书安装为ROOT CA会危及用户隐私.看看戴尔发生了什么.您可以在代码和Windows中找到有关完成此操作的更多信息:
堆栈溢出问题在C#中将证书安装到Windows本地用户证书存储区
在Windows Vista中将自签名证书安装为受信任的根CA.
希望这为试图这样做的人提供更多信息!
如果您正在进行开源开发,可以从Certum获得免费的廉价代码签名证书.
我已经使用他们的证书超过一年了,它确实从Windows中删除了未知的发布者消息.
至于签名代码我从这样的脚本使用signtool.exe:
signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe
我的工作中有同样的情况,这是我们的发现
您需要做的第一件事是获取证书并将其安装在您的计算机上,您可以从证书颁发机构购买证书或使用makecert生成证书.
以下是2个选项的优缺点
买证书
优点
使用CA(证书颁发机构)颁发的证书将确保Windows不会使用来自CA的证书在任何计算机上警告最终用户来自"未知发布者"的应用程序(OS通常附带来自manny CA的根证书) )
缺点:
从CA获取证书涉及成本
使用Makecert生成证书
优点:
步骤很简单,您可以与最终用户共享证书
缺点:
最终用户必须在他们的计算机上手动安装证书,具体取决于您的客户端可能不是一个选项
使用makecert生成的证书通常用于开发和测试,而不是生产
签署可执行文件
签名所需的文件有两种方法:
使用计算机上安装的证书
signtool.exe sign/a/s MY/sha1 sha1_thumbprint_value/t http://timestamp.verisign.com/scripts/timstamp.dll/v"C:\ filename.dll"
在此示例中,我们使用存储在Personal文件夹中的证书和SHA1指纹(此指纹来自证书)来签署位于"C:\ filename.dll"的文件
使用证书文件
signtool符号/ TR http://timestamp.digicert.com/TD SHA256/FD SHA256/F "C:\路径\到\ mycert.pfx"/ P pfxpassword "C:\路径\到\的file.exe"
在此示例中,我们使用证书"c:\ path\to\mycert.pfx"和密码pfxpassword对文件"c:\ path\to\file.exe"进行签名
测试你的签名
方法1:使用signtool
转至:开始>运行键入CMD>单击确定在命令提示符下,输入存在signtool的目录运行以下命令:
signtool.exe验证/ pa/v"C:\ filename.dll"
方法2:使用Windows
右键单击签名文件选择属性选择"数字签名"选项卡.签名将显示在"签名列表"部分中.
我希望这可以帮到你
资料来源:
https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms537361(v=vs.85)
https://www.digicert.com/code-signing/signcode-signtool-command-line.htm
https://knowledge.symantec.com/support/code-signing-support/index?page=content&id=SO15544&actp=search&viewlocale=en_US
https://msdn.microsoft.com/en-us/library/windows/desktop/aa386968(v=vs.85).aspx
ASP的杂志ASPects详细描述了如何签署代码(你必须成为阅读文章的成员).您可以通过http://www.asp-shareware.org/下载
这里是描述如何制作自己的测试证书的链接.
这也可能很有趣.
另一种选择,如果你需要签署的可执行文件在Linux中是使用signcode从Mono项目的工具.它在Ubuntu上受支持.