我们有一个应用程序,需要用户是管理员才能运行。所以,在app.manifest我们已经设置
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
我们有一个密钥来签署我们的程序集,我已经能够使用它来签署 MSI 和我们应用程序的可执行文件。应用程序的可执行文件是通过signtool.exe项目的构建后事件进行签名的。
如果我查看 bin 目录,可执行文件确实已正确签名,但将其打包到msi另一台计算机上并安装后,可执行文件不再签名。
这通常不会是一个大问题,除非我们需要管理员权限,因此当用户收到 UAC 提示时,它会显示未知的发布者。
打包成 MSI 后如何才能对可执行文件进行签名?
我正在尝试编写一个C#程序来验证exe的数字签名.exe是用authenticode证书签名的,我想检测篡改.
我已经能够创建一个SignedCms实例,如下所述:从.NET中的Authenticode签名文件中获取时间戳
我假设SignedCms.CheckSignature可以做到这一点,但是这个方法永远不会引发异常......即使不是当我修改exe的某些部分时......
在尝试自动编译和签署特定的基于 NSIS 的二进制文件时,我遇到了一些奇怪的行为。即,makensis运行 来wine编译可执行文件,然后osslsigncode使用 来对二进制文件进行签名。
可执行文件似乎构建得很好,因为它可以在 Windows 系统上运行,但是签名存在问题(缺乏更好的词)。由于代码签名证书采用 PKCS#12 格式,因此使用的命令如下所示:
osslsigncode sign -pkcs12 <pkcs12-file> -pass <pkcs12-password> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
我从 osslsigncode 收到“成功”消息,就好像签名顺利一样,但是当二进制文件在 Windows 上运行时(本例中为 Win 7),UAC 表示:
出版商:未知
奇怪的是,当我打开从原始.p12文件中提取的证书并查看其信息时,Windows 随后能够识别发布者和数字签名,就好像它以某种方式意识到了证书路径......?
任何意见,将不胜感激。
使用的编辑1
osslsigncode版本:1.5.2和1.7.1
编辑2
为了进行比较,我尝试使用 进行签名SignTool,显然它的工作没有任何问题。所以这看起来像证书+osslsigncode问题,但我不知道它到底是什么。
我还尝试osslsigncode使用另一个证书使用完全相同的 EXE,并且让事情变得更有趣,它起作用了......(我注意到这两个证书的认证路径不同)。
一些证书详细信息:
1)非工作证书
版本:V3
公钥:RSA 2048 位
签名哈希算法:sha1
签名算法:sha1RSA
认证路径:USERTrust -> Comodo Code Signing CA 2 -> …
我们公司从GlobalSign订购了 EV 证书。
之前我们有一个可以在 Install4J 中使用的 p12 文件形式的普通代码签名证书。
现在,有了新证书,我们就没有证书文件了,只有一个 USB 令牌。
是否有内置方法可以使用 USB 令牌来签署可执行文件/jar?或者我是否需要使用媒体向导的“可执行处理”步骤,如此处提到的?
也许有一种方法可以从一台机器(如 macos)上签署所有安装程序(win、mac、linux)?
我正在使用signtool 来签署我的exe 和dll 文件。出于测试目的,我想找到使用过期证书的方法。是否可以?如果无法使用signtool,我也可以使用其他工具。顺便提一句。我不想更改系统日期,因为稍后我想尝试添加时间戳。
这是与signTool一起使用的命令和参数来签署我的文件:
signTool sign /f expiredCert.pfx /p "pass" /v test.dll
Run Code Online (Sandbox Code Playgroud)
结果我得到:
SignTool Error: No certificates were found that met all the given criteria.
Run Code Online (Sandbox Code Playgroud) 您能帮我弄清楚如何使用证书对软件进行签名吗?您知道signtool只能在Windows机器上工作,但是我需要在linux服务器上对文件进行签名。现在,系统像这样工作,文件建立在linux服务器上,然后移动到win服务器进行签名,然后再次返回linux。
我尝试使用google,并发现了使用osslsigncode程序签名的新方法。
我现在的问题是如何将证书从MS转换为osslsigncode格式。所以现在我要做的步骤是永久拥有两个文件:cert.crt和key.blob首先,我需要将它们转换为.pfx格式:
openssl rsa -inform MS/PRIVATEKEYBLOB -in key.blob -outform PEM -out key.pem
openssl rsa -in key.pem -outform PVK -pvk-strong -out key.pvk
pvk2pfx -pvk key.pvk -pi 1234 -spc cert.crt -pfx cert.pfx
Run Code Online (Sandbox Code Playgroud)
然后我可以用命令签名我的软件
signtool.exe sign /v /f cert.pfx /p 1234 soft.exe
Run Code Online (Sandbox Code Playgroud)
您能告诉我使用osslsigncode程序需要执行哪些转换步骤吗?
我有通过ClickOnce部署的WinForms应用程序.我有使用SignTool签署程序集的Post Build Event.我将应用程序发布为ClickOnce安装程序,我在VS输出中看到文件已签名,但在安装后没有签名的程序集.我如何签署将包含在ClickOnce包中的程序集?
我正在寻找最新版本的签名工具.已安装最新的Windows 10 SDK,但signtool.exe日期没有改变.
我已经对NWjs Windows应用程序(Chromium应用程序)进行了编码,并使用Inno Setup,并使用自签名证书对其进行了签名。但是,尝试从Web上安装它时,出现“ Windows保护您的PC”消息。我现在想知道使用此自签名证书对应用程序进行签名是否没有用,因为当我不对应用程序进行签名并按原样打包时,会得到相同的结果。
当我单击“更多信息”时,当我使用自签名证书和不使用自签名证书对应用程序进行签名时,都表示发布者是未知的。
我想知道,有时在应用程序分发到Internet上之后,证书的数据(例如主题的CN)是否有助于获得一定的声誉。我想知道自签名证书是否有时会有助于摆脱“ Windows保护您的PC”消息。
虽然我在Windows可执行文件上的详细SignTool(手动)命令上没有出现任何错误,但时间戳被覆盖了,我希望有多个时间戳,这可能吗?
PowerShell功能
function sign32exe([string]$arg)
{
& 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' sign /fd sha256 /a $arg
Start-Sleep -Seconds 5
& 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://timestamp.globalsign.com/?signature=sha2 /td sha256 /v $arg
Start-Sleep -Seconds 5
& 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td sha256 /v $arg
Start-Sleep -Seconds 5
& 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://time.certum.pl /td sha256 /v $arg
}
Run Code Online (Sandbox Code Playgroud)
我从SignTool得到了肯定的输出,但是每次调用都会覆盖时间戳(为了更好的可读性而对其进行了重组):
签名过程进行顺利:
Done Adding …Run Code Online (Sandbox Code Playgroud) signtool ×10
code-signing ×5
c# ×3
.net ×2
openssl ×2
authenticode ×1
certificate ×1
clickonce ×1
inno-setup ×1
install4j ×1
java ×1
nsis ×1
self-signed ×1
signing ×1
timestamp ×1
windows ×1