问题标签 [authenticode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ssl - 我可以将 SSL 证书同时用于 HTTPS 和代码签名吗?
我对代码签名知之甚少,也无法在互联网上找到任何明确的答案:是否可以使用单个 SSL 证书同时运行 HTTPS 服务器和代码签名 Windows 可执行文件?
如果是,有什么优点/缺点?
windows - 通过 Windows API 解码 PKCS#7 签名?
我希望解析并显示从 Window PE 二进制文件的安全目录中提取的 Authenticode PKCS#7 签名的内容。
我可以使用 OpenSSL 在命令行中使用“ openssl pkcs7 -text -in extracted_signature.pks -inform DER -print_certs
”来执行此操作,但是我需要通过 C/C++ 和 Windows API 来执行此操作。我不能使用 OpenSSL 库本身。
使用CryptDecodeObjectEx
API,我可以开始解码提取的签名:
上述调用成功完成,content_info->pszObjId
OID 为“1.2.840.113549.1.7.2”(szOID_RSA_signedData),但是我找不到继续解码所需的结构。此处列出了 CryptDecodeObjectEx 的可用 OID 。
有人可以建议如何通过 Windows API 解码 Authenticode PKCS#7 签名吗?
inno-setup - 数字签名 Inno 设置
我想知道如何使用 Inno setup 对我的 setup.exe 进行签名。可以免费做吗?我是否一定需要 Windows 的特殊许可证才能执行此操作?
continuous-integration - 如何安全地配置 CI 服务器以对二进制文件进行数字签名?
有许多网站解释了如何signtool.exe
在.pfx
证书文件上运行,归结为:
我有一个持续集成 CI 流程设置(使用 TeamCity),它像大多数 CI 流程一样,做所有事情:检查源代码、编译、签署所有 .exe、打包到安装程序中,并签署安装程序 .exe。当前有 3 个构建代理,运行相同的虚拟机,其中任何一个都可以运行此过程。
不安全的实施
今天为了实现这一点,就安全性而言,我做了几件坏事(TM):.pfx 文件在源代码管理中,它的密码在构建脚本中(也在源代码管理中)。这意味着任何有权访问源代码存储库的开发人员都可以获取 pfx 文件并做他们想做的任何邪恶的事情。(我们是一个相对较小的开发商店,相信每个人都可以访问,但显然这仍然不好)。
终极安全实施
关于“正确”执行此操作,我所能找到的只是您:
- 将 pfx 和密码保存在某个安全介质上(例如具有基于手指解锁功能的加密 USB 驱动器),并且可能不会放在一起
- 仅指定几个人有权访问签名文件
- 仅在未连接的专用机器上签署最终版本,该机器保存在锁定的保险库中,直到您需要将其拿出来参加此代码签名仪式。
虽然我可以看到这个安全性的优点..这是一个非常繁重的过程,并且在时间方面很昂贵(运行这个过程,安全地保存证书备份,确保代码签名机处于工作状态等)。
我敢肯定有些人会跳过步骤,只是使用存储在他们个人系统上的证书手动签署文件,但这仍然不是很好。
它也与随后在安装程序中使用的签名文件(也由构建服务器构建)不兼容 - 当您安装了具有 UAC 提示以获取管理员访问权限的 .exe 时,这一点很重要。
中间地带?
我更关心的是不向用户提供可怕的“不受信任的应用程序”UAC 提示,而不是证明它是我的公司。同时,将私钥和密码存储在每个开发人员(加上 QA 和高级技术支持)都可以访问的源代码存储库中显然不是一个好的安全实践。
我希望 CI 服务器在构建过程中仍然像今天一样签名,但没有密码(或证书的私钥部分),每个有权访问源代码存储库的人都可以访问。
有没有办法让密码不被构建或以某种方式保护?我是否应该告诉 signtool 使用证书存储(以及如何使用 3 个构建代理和构建作为非交互式用户帐户运行)?还有什么?
certificate - 减少代码签名的 EXE 的生命周期
在对可执行文件进行代码签名时,只要证书有效(如果没有时间戳),可执行文件将被视为来自受信任的来源。我想知道我是否可以减少这个时间跨度。
我浏览了Signtool的命令行选项,但找不到减少有效期的选项。但是,这可能只是意味着,微软不支持这一点。
我的预期用途:
用于测试目的
用于演示目的(开发人员培训)
只是一个想法:因为无论如何我都在签署可执行文件,所以这将是提供有时间限制的演示许可证的不错选择。应用程序将简单地检查自己的有效期。
certificate - 在不安装 PFX 的情况下获取 WTD_LIFETIME_SIGNING_FLAG
从对“代码签名证书过期时会发生什么?”问题的回答开始。,我发现有 WTD_LIFETIME_SIGNING_FLAG 可能暗示签名可执行文件的意外行为。
安装证书后,我可以使用以下过程检查标志:
- 打开 Internet Explorer(以下指版本 11)
- 转到工具/Internet 选项
- 转到“内容”选项卡
- 点击“证书”
- 选择证书并选择“高级”
- 向下滚动,直到找到“终身签名”复选框
我想在 PFX 文件中找出有关此标志的信息,而无需将它们导入我的证书存储区(这意味着信任它们)。
我试过certutil -dump <pfx>
了,但这根本没有列出标志。接下来,我使用certutil -dump -v <pfx>
了列出代码签名(1.3.6.1.5.5.7.3.3)的列表,但没有使用终身签名(对于在 IE 中选中复选框的证书)。
windows-8 - 如何将网址添加到控制面板中显示的程序详细信息 - 默认程序
我正在编写一个可以处理 mailto: 协议的程序。为了允许用户选择我的程序作为默认电子邮件处理程序,我注册了我的程序。但是,我注意到有些程序会在公司名称下显示指向公司网站的可点击链接,例如文件资源管理器。
如何指定指向我的网站的链接,以便默认程序 UI 在选择我的应用程序时显示它?
我使用 Microsoft Visual Studio 2013 终极版。这是我的 .reg 格式的程序注册详细信息:
这是文件资源管理器的可单击链接的示例。
这是我没有链接的应用程序
这是我到目前为止发现的:
并非所有应用程序都显示此链接。
Microsoft 和非 Microsoft 应用程序都可以显示此链接,例如 CyberLink PowerDVD 显示指向 www.cyberlink.com 的链接。
并非所有 Microsoft 应用程序都显示该链接,并且显示该链接的应用程序可能具有不同的 URL。例如,Microsoft Corporation 的三个应用程序:Paint - 无链接、Photo Gallery - http://www.microsoft.com、Visual Studio 2013 - http://microsoft.com(无 www)。
Skype for Desktop 显示公司 Skype Technologies SA 和http://www.microsoft.com的链接。
链接地址似乎没有存储在注册表中。它存储在 shell\open\command 下列出的可执行文件中。
它似乎没有作为资源存储在可执行文件中。
sysinternals的字符串工具在可执行文件中找不到链接地址。
windows - 使用 SHA-2 交叉签名证书使用 signtool 进行签名和验证后,Windows 驱动程序安装失败
我有两个驱动程序文件似乎已经正确地被singned:
但是当我尝试安装它们时,我得到了清除错误:
Windows 无法验证此文件的数字签名。最近的硬件或软件更改可能安装了签名不正确或损坏的文件,或者可能是来自未知来源的恶意软件。
我已经发布了有问题的文件以及相关的 certs。我使用以下命令创建文件:
我的证书使用签名算法:sha256WithRSAEncryption
接下来我应该尝试什么?
timestamp - 我需要使用我的证书颁发机构时间戳服务器吗?
我正在尝试对我的软件进行代码签名,但由于时间戳服务器而遇到问题。证书来自 StartSSL。我收到如下所示的错误:
$ signtool sign /tr " http://www.startssl.com/timestamp " /f certfile.p12 /p 密码 File.exe
SignTool 错误:无法访问指定的时间戳服务器或返回无效响应。
SignTool 错误:尝试签名时出错:File.exe
错误数:1
看来问题是时间戳服务器因维护而关闭,因为当我尝试登录startssl.com时,它说Some of our services are offline and under maintenance during the night hours on weekends until 7:00 AM GMT in the morning. We apologize for the temporary inconvenience and thank you for your understanding.
。
由于对此我无能为力,而且我对时间戳服务器了解不多,我想知道是否可以使用另一个时间戳服务器(如http://timestamp.verisign.com/scripts/timstamp.dll
或http://timestamp.comodoca.com/authenticode
)来签署我的代码?如果是这样,使用另一个时间戳服务器是否有任何问题?
powershell - Get chain of certificates for a file with PowerShell?
I am looking for a method, using PowerShell only, to list the certificate chain for signed files. Specifically to get the Root certificate.
As I need to get a list of which Non-Microsoft root certificates certain executables (on installed software), are dependent on. This is due to a OS-baseline guidelines, that uses the PKI procedure in Microsoft KB293781. Where only specific Root certificates shall be put on specific computers. E.g the much used "VeriSign Class 3 Primary CA - G5", shall only be used when necessary.
Get-AuthenticodeSignature only lists the Issuer. E.g: Get-AuthenticodeSignature C:\windows\system32\MRT.exe
Tools like "SysInternals SigCheck" is able to do this sigcheck.exe -i C:\windows\System32\mrt.exe
, and this infomation can be parsed further on. Also other tools like SignTool.exe
from the Windows SDK, and AnalyzePESig
by Didier Stevens can get this info.
But can this be done using only PowerShell? Perhaps using the WinVerifyTrust API in Windows. https://msdn.microsoft.com/en-us/library/windows/desktop/aa382384(v=vs.85).aspx http://support2.microsoft.com/kb/323809/en-us
Cheers, Tekk