我在signtool.exe中寻找方便的signwizard,但在Windows SDK 7.0中找不到它.
它现在是一个单独的工具还是仅剩下CLI?
我觉得我在这里遗漏了一些明显的东西,但我不认为它写在任何地方.
我使用Authenticode证书签署我的可执行文件,但是当我开始学习更多关于它的信息时,我正在质疑它的价值.
现在,我关心的是:
如果更改了签名的exe,当您进入"属性">"数字签名">"选择签名">"详细信息..."时,将显示"此数字签名无效".这是一个非常模糊的方式来查看可能是一个严重问题,以及一个巨大的指标,你不应该运行该文件.
如果从文件中剥离签名(使用delcert),则表示没有任何错误.同样,您可以运行该文件,并且在属性对话框中不会显示任何证书.
为了使这更有用,我认为签名文件需要验证自己.启动时,应检查是否存在有效签名,并且签名的sha1指纹可能与Xyz Corporation证书的预期签名匹配.
(当然,这仍然无法处理有人剥离证书,然后编辑文件以删除证书检查的情况)
我找不到任何人在谈论如何做到这一点(至少不是在.NET中,当然也不是像我期望的那样简单的API调用) - 所以这导致了几个问题:
我已经安装了openssl,现在rsa_test.c运行正常.我想做的是:
打开任何exe或dll数字证书.提取指纹和PublicKey.公钥也包含指数(如果您熟悉ASN1编码).
现在我已经计算了文件的SHA-1哈希,并将其与MD字段进行比较,以确定它是否正确.所以现在我想将Thumbprint,PublicKey-> m和PublicKey-> e传递给RSA_public_decrypt函数来计算文件的解密SHA-1哈希值.
我应该将哪种填充算法传递给函数?当我传递RSA_NO_PADDING时,它会解密,但会给我128字节长的哈希,这根本不正确.对于所有其他填充算法选项,它返回未找到填充的错误.
你能教我或者告诉我通过这个函数传递函数的正确参数吗?
我正在使用标准(即不是 EV)Authenticode 代码签名证书来签署 Windows 桌面应用程序,希望 Smartscreen 过滤器最终会停止阻止它。
我希望对应用程序进行认证,但由于我的代码签名证书是由 GoDaddy 颁发的,因此我似乎无法做到这一点,因为您需要来自Symantec、Entrust、GlobalSign、WoSign 或 Digicert 的证书才能创建 Windows 认证仪表板帐户(认证过程的第一步)。
所以这是我的问题:使用标准 GoDaddy SHA-2 代码签名证书签名的非认证 Windows 应用程序是否仍会积累声誉?
我一直在努力修改来自 Microsoft 的此代码示例,该示例显示(有些过时)如何从可执行文件中检索代码签名信息。它可以工作,但如果二进制文件是双重签名的,则它不会检索信息。
所以我做了一些研究并尝试重写它以使其识别 Windows 中许多现代可执行文件中存在的双重签名。不幸的是,很少有(模糊的)建议可用(1),(2),例如使用UnauthenticatedAttributes和szOID_NESTED_SIGNATURE(无论这意味着什么)但仅用于检索时间戳的建议。
所以我试图重写那个微软代码,这是我得到的:
(要构建它,只需将其复制到 Visual Studio 控制台项目中并更改 .exe 文件路径。处理双重签名的代码在PrintDualSignatureInfo()函数中。)
#include "stdafx.h"
//SOURCE:
// https://support.microsoft.com/en-us/help/323809/how-to-get-information-from-authenticode-signed-executables
//
#include <windows.h>
#include <wincrypt.h>
#include <wintrust.h>
#include <stdio.h>
#include <tchar.h>
#include <atlconv.h>
#pragma comment(lib, "crypt32.lib")
#define ENCODING (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)
typedef struct {
LPWSTR lpszProgramName;
LPWSTR lpszPublisherLink;
LPWSTR lpszMoreInfoLink;
} SPROG_PUBLISHERINFO, *PSPROG_PUBLISHERINFO;
BOOL GetProgAndPublisherInfo(PCMSG_SIGNER_INFO pSignerInfo,
PSPROG_PUBLISHERINFO Info);
BOOL GetDateOfTimeStamp(PCMSG_SIGNER_INFO pSignerInfo, SYSTEMTIME *st);
BOOL PrintCertificateInfo(PCCERT_CONTEXT pCertContext);
BOOL GetTimeStampSignerInfo(PCMSG_SIGNER_INFO …Run Code Online (Sandbox Code Playgroud) 我使用Visual Studio 2008创建了一个MSI安装程序.然后我使用signtool.exe和我的authenticode证书对此进行签名.
在Vista x64测试PC上,当运行MSI时,会出现预期的对话框,将我的公司标识为发布者.
但是,从"添加/删除程序"中卸载程序时,将显示黄色的"Unidentified Publisher"对话框.
有没有办法让卸载过程签名?谷歌没有出现任何有用的东西.
非常感谢,
克里斯
微软正在远离SHA1.结果,许多可执行文件现在具有两个或更多个签名; 一个使用SHA1摘要以实现向后兼容,另一个使用SHA256.
例如,如果您查看vstest.executionengine.exeVisual Studio 2013的属性(查看Windows 8或Server 2012上的属性),您将看到它有来自3个不同证书的3个不同签名.
我已经有一个使用的组合代码CryptQueryObject,CryptMsgGetParam和.NET SignedCms,但它只能看到3个签名1.一个签名者似乎只有一条消息.
我需要获取所有签名的证书信息.如何对多个签名进行建模 - 是单个消息中的多个消息还是多个签名者?Microsoft是否添加了新的API或新标志来访问多个签名?
我正在努力在.NET 4.5上部署ClickOnce应用程序构建,这是事实:
但是,无论我做什么,当我使用“立即发布”按钮实际发布ClickOnce应用程序时,所有文件都会被发布,但是当我下载“ Setup.exe”时,它总是说“ Unknown Publisher”。
关于我在做什么错的任何想法吗?我已经对此进行了数周的研究,并且已经阅读了足够的内容,以至于我在“正确”地进行了操作,但是我只是必须缺少一些小的复选框或设置,或者是某些东西。
任何帮助表示赞赏。
-工作组
我正在尝试编写一个C#程序来验证exe的数字签名.exe是用authenticode证书签名的,我想检测篡改.
我已经能够创建一个SignedCms实例,如下所述:从.NET中的Authenticode签名文件中获取时间戳
我假设SignedCms.CheckSignature可以做到这一点,但是这个方法永远不会引发异常......即使不是当我修改exe的某些部分时......
我创建了一个wix包,它在协同编码之前正常工作.在谷歌搜索和检查wix文档后,我知道我需要使用insignia.exe来代码签署wix包.请知道如何使用此工具.谢谢预期.