我有一个EXE文件,我想签名,以便Windows不会警告最终用户有关"未知发布者"的应用程序.我不是Windows开发人员.有问题的应用程序是从生成屏幕保护程序应用程序的应用程序生成的屏幕保护程序.因此,我对文件的生成方式没有影响.
我已经发现我需要来自Verisign或instantssl.com 等CA的代码签名证书.我不明白的是我需要做什么(如果可能的话)签署我的EXE文件.什么是简单的解释?
Mel Green的回答让我更进一步,但是signtool要我指定在任何情况下使用哪种证书.我可以以某种方式获得免费的代码签名证书来测试这对我是否有用吗?
另请注明哪种证书类型是正确的.大多数网站只提到"代码签名",并谈论签署用户实际编译的应用程序.对我来说情况并非如此.
即使其他应用程序在Fullscreen上运行,是否可以使窗口始终保持在顶部?我正在使用TopMost = true
,但当其他应用程序在全屏运行时,我的隐形.WindowStyle = None
顺便说一句,这是窗口.
编辑:不要让其他窗口最小化
尝试使用makecert UI工具,以便更容易生成自签名代码证书我试图找到makecert.exe的DIR位置
我按照前面的答案,所有命令行开关都正常工作. - 但是在尝试使用UI工具时,我收到了错误:
所以我假设我需要将该工具放在与makecert.exe和pvk2pfx.exe相同的目录中
这是我看过的地方:
这是一个很好的答案,其中包括创建自签名CA,然后使用获得的证书签署可执行文件:如何在Windows上为代码签名创建自签名证书?.
我已经在网上阅读了很多关于驱动程序签名如何工作的讨论,答案似乎几乎是毫无疑问的,如果没有启用测试模式,你就无法加载未签名或自签名的驱动程序.然而,我与之相关的答案,特别是Roger Lipscombe的一个评论似乎提供了一个矛盾的观点:
如果要将其用于签名驱动程序,则需要将CA证书导入到计算机存储中.我的示例将其导入到用户存储中,这对于大多数软件来说都很好,用于测试/内部目的.
对我来说,只要将CA证书导入到机器商店,我就可以安装带有自签名证书(由自签名CA颁发)的驱动程序.我不必对系统进行任何其他更改(通过按启动菜单上的F8禁用测试模式,弄乱启动配置标志,如TESTSIGNING或NOINTEGRITYCHECKS).
我对么?当人们需要加载没有提供适当数字签名的驱动程序(例如旧的打印机驱动程序等)时,这种方法没有被广泛使用的障碍有哪些(如果有的话).相反,人们依赖于启动测试模式或第三方软件(DSEO)来篡改您的系统文件以运行此类驱动程序.
这种方法的缺点是什么?上述SO问题中描述的过程需要管理员权限,但无论如何安装驱动程序都需要它们.信任自签名CA可能存在安全风险 - 但是不会禁用所有签名检查会带来更大的安全风险吗?
如果我通过签名设置时间戳,会发生什么?
如果我没有设置怎么办?
这是必要的吗?为什么推荐?
cryptography code-signing portable-executable trusted-timestamp
我对Windows开发比较陌生,但刚刚完成了一个小项目.我想让我的应用程序"验证"像许多其他应用程序一样.例如,当您启动应用程序并弹出UAC时,它将没有带有黄色条的"发布者未知"消息,并且应该有一个"验证者:"部分.
我希望我能正确解释.有谁知道如何做到这一点?我希望它不像你需要付钱的SSL证书......
如果我的问题不清楚,或者我没有以正确的方式解释,请随时告诉我.谢谢!
我正在学习Windows内核模式驱动程序开发.我编写了一个小型测试驱动程序,我可以在VirtualBox中的VM下运行的Windows 7 32位Ultima版本下成功注册,取消注册,加载和卸载.
我的主机是Windows 7 64位家庭高级版.
编译为64位的驱动程序将不会在Windows 7 Home Edition下加载.我一直拒绝注意到这个版本的Windows不允许未签名的驱动程序.
我尝试了两件事:
我使用F8启动选项允许未签名的驱动程序(不起作用)
我以管理员身份运行CMD并执行以下两个命令
bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS
bcdedit.exe -set TESTSIGNING ON
并重新启动.我的桌面在"TestMode"中显示我,但我仍然听到同样的拒绝.
任何人都可以帮助我或解释是否有家庭版的额外步骤?
---- {更新} ----在倾注了大量MSDN之后,看来我的解决方案就是自我签署我创建的驱动程序.我下载的DDK似乎没有工具链来进行自我签名.我已经下载了WinDDK-7600.16385.1.但奇怪的是,如果我只是F8 @启动时间并告诉它允许未签名的驱动程序,我的Windows Ultima Edition会愉快地加载我的驱动程序.
我有一个自签名代码签名证书(使用此答案中的说明制作),当我使用时它可以正常工作signtool.exe
.但是,如果我尝试使用Powershell进行签名,则会失败.
用signtool签名
C:\>signtool sign /v /n "VetWeb" SetupRDPPermissions.ps1
The following certificate was selected:
Issued to: VetWeb
Issued by: VetWeb CA
Expires: Sat Dec 31 18:59:59 2039
SHA1 hash: 84136EBF8D2603C2CD6668C955F920C6C6482EE4
Done Adding Additional Store
Successfully signed: SetupRDPPermissions.ps1
Number of files successfully Signed: 1
Number of warnings: 0
Run Code Online (Sandbox Code Playgroud)
登录Powershell
PS C:\> $cert = @(Get-Childitem cert:\CurrentUser\My | Where-Object -FilterScript {$_.Subject -eq 'CN=VetWeb'})[0]
PS C:\> Set-AuthenticodeSignature SetupRDPPermissions.ps1 $cert
Set-AuthenticodeSignature : Cannot sign code. The specified certificate is not suitable for …
Run Code Online (Sandbox Code Playgroud) 现在,我有这个脚本使用不推荐使用的工具makecert创建证书:
makecert -r -pe -n "CN=My CA" -ss CA -sr CurrentUser -a sha256 -cy authority -sky signature -sv MyCA.pvk MyCA.cer
certutil -user -addstore Root MyCA.cer
certutil -addstore Root MyCA.cer
makecert -pe -n "CN=My Company" -a sha256 -cy end -sky signature -ic MyCA.cer -iv MyCA.pvk -sv MySPC.pvk MySPC.cer
pvk2pfx.exe -pvk MySPC.pvk -spc MySPC.cer -pfx MySPC.pfx
certutil -f -user -p "" -importPFX MySPC.pfx
Run Code Online (Sandbox Code Playgroud)
上面的脚本创建了2个证书:
MyCA.cer
:自签名的根颁发机构证书. MySPC.cer
:签署我的代码的证书(签名MyCA.cer
).此脚本还会打开请求用户密码和用户确认的对话框,以便在受信任的根证书颁发机构存储中安装证书.我需要在没有用户交互的情况下完成此操作. …
powershell unattended-processing x509certificate x509 windows-10
简短的问题
如何从可执行文件(.EXE/.DLL)获取有关多个代码签名证书的信息?
预期答案
最终接受的答案应该提出一种方法来获得C#中的所有证书.概念/伪代码是可以的,我不指望你写完整的源代码.
有关建议工具的中间答案,请参阅Security.StackExchange上的问题.
很长的问题
我正在研究是否可以在插件(.DLL)上使用多个代码签名证书来检查它是否已经过官方测试.这是程序:
似乎可以使用第二次签署DLL
signtool /v /f <pfx> /as <dll>
Run Code Online (Sandbox Code Playgroud)
这可能有用的迹象:
但是,有一些问题显示第二个签名:
X509Certificate.CreateFromSignedFile()
方法只能返回一个证书目前我实际上是在EXE文件而不是DLL文件上尝试我的代码,但这应该不重要.EXE已使用受信任的根证书和时间戳签名.第二个签名是使用我自己的证书创建的,遵循这些步骤,目前没有时间戳.
在问这个问题之前我做了些什么:
到目前为止我发现的唯一相关问题是如何使用时间戳正确地进行双重签名,但它没有答案.
当我尝试签署文件时,收到“SignTool 错误:访问被拒绝”消息。当我使用管理员cmd时,一切正常。但是,此过程将在 TFS 2010 构建过程中使用,并且使用带有 Signtool 的 InvokeProcess 任务会给出与非管理员命令提示符相同的访问被拒绝消息。
更多信息:
按照这些说明操作后,我有以下文件:
MyCA 位于我的受信任根证书颁发机构中 我将 MySPC.pfx 导入到个人证书中,遵循此处的建议:SignTool 错误:访问被拒绝
为了进行签名,我使用导入到“个人”部分的 MySPC.pfx 的指纹,因此我的 Signtool 命令如下所示:
符号 /sha1 1e9d7b5ad98552d9c58944e3f3903e6b929f4819 /t http://timestamp.verisign.com/scripts/timestamp.dll “文件名”
这再次在管理模式下起作用。当以管理员身份运行 cmd 时,这也适用:
符号 /f "C:\Code Signing Non-Release\MySPC.pfx" /t http://timestamp.verisign.com/scripts/timestamp.dll "文件名"
一般来说,代码签名是新手,因此欢迎任何帮助。
所以我做了一个小工具,一个控制台应用程序,当在Win7上运行时带来了安全盒(UAC).我尝试使用以下步骤在VS 2010中签署此EXE文件:
1-项目属性
2-签名
3-创建新密钥,如下所示
密钥文件已成功创建,您可以在下面的捕获中看到.
文件仍然被安全框阻止,当我使用signtool.exe检查文件是否签名时,它告诉我,没有找到签名.如果我遵循了错误的步骤,请纠正我.
我定期为朋友制作软件并用于学校任务.我将这些可执行文件上传到我的网站.但是当他们下载软件并执行它时,他们会收到此错误
我理解你只需按"更多信息"来解决这个问题,但有没有办法完全阻止这个?
我做了一个小项目来测试它是否仍会发生,而且确实如此.
我没有添加任何额外的代码,只是那个标签.我注意到只有在从Internet下载文件或从外部驱动器复制文件时才会出现错误.我想为我正在计划的游戏制作一个自定义安装程序,我不想在安装程序中出现这个:/.谁有能力在这种情况下帮忙?谢谢.
c# ×5
code-signing ×5
windows ×3
driver ×2
powershell ×2
.net ×1
ca ×1
certificate ×1
cryptography ×1
exe ×1
makecert ×1
manifest ×1
security ×1
self-signed ×1
sign ×1
signing ×1
signtool ×1
tfsbuild ×1
topmost ×1
uac ×1
windows-10 ×1
windows-7 ×1
wpf ×1
x509 ×1