问题标签 [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.

0 投票
1 回答
1769 浏览

.net - 如何避免 Authenticode 在自动构建中对 .NET 项目中的第三方库进行签名?

我们最近购买了一个代码签名证书,并且我一直在将代码签名步骤合并到我们的自动化构建中。

我们的构建脚本必须构建 VB6 和 .NET 项目,因此我们目前有一个批处理文件来构建所有内容。对于 .NET 项目,我们的构建脚本调用 MSBUILD,传入一个解决方案文件进行构建。这些解决方案中的项目有一些第三方依赖项,并且这些文件都在References中打开了Copy Local选项,因为它们是运行应用程序所必需的。此外,一些项目使用 COM 互操作,因此它们具有自动生成的互操作程序集(例如Interop.MSXML2.dll),这些程序集也会在构建期间复制到输出文件夹。

我试图找出一个简单的代码签名在构建期间编译的文件(即我们的程序集),并忽略第三方库和互操作程序集,而不必分别在每个程序集上调用signtool.exe .

目前,我通过在构建脚本中执行以下操作来解决此问题:

  • 确保构建清除所有以前构建的文件
  • 使用 MSBUILD 编译 .NET 解决方案,为构建指定一个输出文件夹
  • 使用signtool.exe对输出文件夹中的所有二进制文件(EXE、DLL、OCX)进行递归签名。这会签署所有内容,包括第三方库和自动生成的互操作程序集
  • 我的第三方依赖项位于一个单独的lib文件夹中,因此我将所有文件从lib回复制到构建输出文件夹中,覆盖构建复制到那里的副本。这样这些文件不再被签名,但我们的程序集仍然是

我的问题是,有没有更好的方法来做到这一点?我能想到的唯一另一种选择是在每个需要签名的程序集上单独调用signtool.exe,但这可能会很痛苦,因为项目的数量和其中发生的更改量(程序集被重命名、移动、获取随着项目的发展而删除)。另外,我不想猜测特定程序集是否已签名,因此循环浏览文件并批量签名对我来说最有意义。

然而,与此同时,随意签署我们没有使用我们的代码签名证书创建的文件似乎是不正确的(在道德上、法律上或其他方面)。

或者也许我完全以错误的方式去做这件事?

0 投票
5 回答
8240 浏览

authenticode - SignTool 意外的内部错误

我正在使用以下命令运行 SignTool:signtool sign /f keyfile.pfx /p mypassword pathToMsiFile.msi,我收到以下错误:

SignTool 错误:发生了意外的内部错误。错误信息:“错误:Store::ImportCertObject() 失败。” (-2146893792/0x80090020)

它直到一天前才起作用,我不知道可能发生了什么变化......

任何想法都会很棒,谢谢!


我设法修复它。显然用户已损坏。

在使用微软的这个 KB修复用户之后,一切都恢复正常了。

0 投票
2 回答
987 浏览

c# - 可以使用 X509Certificate 对 .NET 程序集进行签名吗?

我相信我对 X509Certificate 有基本的了解,并为我的开发环境创建了证书和私钥。现在更加熟悉 X509Certificate 类和其他相关权限。

因此,在此过程中,我决定在我的系统上安装证书后对其进行测试。然后使用以下代码,我尝试验证证书身份验证的检查过程:

当然,正如预期的那样,内部代码块不会执行。所以我想用证书密钥简单地签署我的程序集,但“简单”并不像我预期的那么简单。

我使用以下代码将证书分配给我的应用程序证据:

但这似乎也不起作用。接下来,我检查了我的项目的属性,看看是否有任何方法可以使用 X509Certificate 密钥对其进行签名,但没有。我看到的唯一接近的选项是使用 Click Once 清单签名;但“从文件中选择”选项正在寻找 .pfx 扩展名。所以我想也许这种方法只适用于支持 Click-Once 生成的证书?

根据 BOL,“如果您有其他格式的密钥文件或证书,请将其存储在 Windows 证书存储中并选择前面过程中描述的证书。” 我在 Trusted Root Certificate Authorities 存储中安装了 X509Certificate。那不是 Windows 证书存储吗?因为证书存储窗口中没有显示任何内容。

除非我使用了错误的关键字组合,否则搜索在线资源也没有什么收获。现在我可以创建另一个 X509Certificate 和密钥,确保密钥的扩展名是 .pfx,但我想确保我在正确的解决方案上,然后再无偿转动我的轮子,我不相信这会是答案.

那么,可以使用 X509Certificate 对 .NET 程序集进行签名吗?如果是这样,有哪些文档可以帮助执行此任务?

0 投票
1 回答
759 浏览

.net-4.0 - .Net 代码签名 - 我可以使用 AD 证书吗?

我正在开发一个内部项目,该项目使用一堆 OLEDB 提供程序,其中一些具有 UI。最大的挑战是我需要在清单中请求 uiAccess=true 如果代码经过数字签名,这只有在 Windows 上才有可能。此应用程序仅在内部使用。我假设 AD 的主域控制器已经充当域中所有机器的 CA 并且完全受信任。并且可以为 SQL server 和 Infopath 等某些目的生成代码签名证书。

有谁知道我是否可以使用我的 AD/PDC 颁发的代码签名证书来签署我的 WPF 应用程序(不是 click-Once)并实现这一目标。

感谢您在这个方向上的任何指导。

0 投票
2 回答
4942 浏览

c# - C#:如何检测验证码签名文件的篡改

我正在尝试编写一个 C# 程序来验证 exe 的数字签名。exe 是用验证码证书签名的,我想检测篡改。

我已经能够创建一个 SignedCms 实例,如下所述:Get timestamp from Authenticode Signed files in .NET

我认为 SignedCms.CheckSignature 可以解决问题,但这种方法永远不会引发异常......即使在我修改 exe 的某些位时也不会......

0 投票
2 回答
5496 浏览

c# - 检查给定的可执行文件是否经过数字签名且有效?

在我的C#/.NET应用程序中,我必须检查给定的可执行文件是否经过数字签名 (最好未经Exception测试。)

然后我需要检查其证书是否有效 (基于已安装的根证书)以及文件内容是否对签名有效

中的类太多了BCL,我不知道从哪里开始以及使用什么,到目前为止我发现的任何东西都不能消除我的困惑......

我想做这样的事情,如果 P/Invoke可能的话:

补充说明:

我目前遇到的一个大问题是我没有找到一种简单的方法来获取此类文件的签名。仍然希望有一个提供的、托管的BCL解决方案,因为如果这部分确实丢失了,我会感到惊讶。(对于证书,这可以通过 just 来完成,也可以X509Certificate.CreateFromSignedFile验证)
我不希望将 50% 的工作与P/Invoke代码或其他大型库混合。

我找到了一个AuthenticodeSignatureInformation类,但没有关于将它用于给定可执行文件的信息。

0 投票
1 回答
1671 浏览

code-signing - 为什么签名密钥如此昂贵?

我最近正在寻找一个验证码签名密钥,并且对它们的昂贵程度感到震惊。这让我开始思考——大多数类型的签名密钥,无论是 Authenticode、SSL 等——都非常昂贵。

是否有技术原因导致维护 CA 和生成密钥变得昂贵,或者这归结为简单的垄断经济学?

0 投票
2 回答
885 浏览

.net - 强命名或 Authenticode 签署新程序集

最终用户要求我将“强命名”添加到我的一个组件中,因为他们想从强命名程序集中引用它。

我已经有一个验证码证书,所以我想知道 - 为了让我的组件可以被他们的强命名组件使用,我只用我的验证码密钥对组件进行签名就足够了吗?

还是我必须对程序集“强名称签名”(使用 Al.exe)才能将其视为“强名称”?

我找不到任何明确的“强名称 vrs 验证码”文档。

0 投票
4 回答
2503 浏览

c# - 没有强命名的代码签名是否会让您的应用程序容易被滥用?

试图了解身份验证代码签名和强命名。

我是否认为如果我对一个引用几个 dll(非强命名)的 exe 进行代码签名,恶意用户可以替换我的 DLL 并以看起来好像是由我签名但正在运行的方式分发应用程序他们的代码?

假设这是真的,您似乎真的不想在没有强命名整个事情的情况下签署 .NET 应用程序,否则您让人们能够以您编写的应用程序为幌子执行代码?

我不确定的原因是,我在网上找到的所有文章(包括关于使用 SN+Authenticode 的 MSDN 文档)似乎都没有提到这一点,这似乎是一个相当重要的理解点(如果我理解正确的话) ?

0 投票
1 回答
102 浏览

code-signing - 我可以签署一个启动另一个的 .exe 吗?

我正在开发一个安装程序(一个 .exe),它可以提取并启动另一个安装程序。如果我使用 Authenticode 证书对第一个 .exe 进行签名,嵌入式安装程序是否也需要签名?我需要能够在各种版本的 Windows(包括打开 UAC 的 Vista)上运行我的安装程序,并且用户体验需要无缝。

谢谢。