非域计算机上使用 AD 创建的代码签名证书的“未知发布者”

问题描述 投票:0回答:1

我已使用 Active Directory CA 生成与 AuthentiCode 兼容的代码签名证书,并使用它来签署我的 ClickOnce 应用程序和清单。在我加入域的机器上一切正常; ClickOnce 安装对话框将证书的通用名称报告为应用程序的发布者,我得到一个绿色的复选标记。

Success message

但是,在非连接机器上情况有所不同。进展不太顺利。我已在受信任的 CA 存储中安装了根 CA,并在个人和受信任的发布者的存储中安装了代码签名证书的公钥。但当我双击

.application
文件或
setup.exe
时,我仍然收到“不受信任的发布者”。

Error message

这是我的 ClickOnce 设置,非常简单:

Signing tab Publish tab

我已验证我的签名者在其扩展密钥使用属性中具有

Code Signing (1.3.6.1.5.5.7.3.3)
要求,并且我在 AD 证书模板中使用 Microsoft 增强型 RSA 和 AES 加密提供程序

ProcMon 在

Setup.exe
运行时收集绝对令人麻木的数据量;我不知道从哪里开始寻找所有这些。

我不知道还能尝试什么。我发现大量的问答(坦率地说,太多了,无法在此有效列出),适用于涉及加入域和未加入域的计算机上的大牌证书提供商(Sectigo 等)的场景,以及大量的问答涉及已加入计算机上的 AD 证书的场景,但对于我的特定场景(未加入计算机上的 AD 证书),我的结果是空的。

根据此指南,如果我正确地阅读了它(并且我认为我是正确的),则代码签名证书也必须导入到受信任的 CA 中。这很奇怪......我从来没有听说过非 CA 证书必须位于受信任的 CA 商店中,但是很糟糕 - 我不会抱怨。只是我试过了,还是不行。

哦...值得一提...通过这一切,我已经小心确保在当前用户和本地计算机级别导入所有证书,以防万一。

这是设计使然吗? ClickOnce 是否打算禁止非域客户端上的 AD 代码签名证书?

--编辑--

在最后一搏中,我将我的根 CA 导入到中间 CA 存储中,包括当前用户和本地计算机。我得到了相同的结果:“未知发布者。”

ssl clickonce code-signing code-signing-certificate
1个回答
0
投票

我找到了解决方案(实际上,微软支持技术人员找到了它,并告诉我尝试一下)。向她致敬。

我们必须在目标机器上执行此操作:

  1. 通过 控制面板转至 Internet 选项
  2. 选择高级选项卡
  3. 向下滚动到安全部分
  4. 取消选中检查发布者的证书吊销
  5. 点击确定

Uncheck this option

之后,假设我们已在

LM-Trusted CAs
存储中安装了根 CA,ClickOnce 对话框将代码签名证书的通用名称显示为受信任的发布者。除了这两个之外,不需要其他配置,尽管作为可选步骤,我们可以通过将代码签名证书的公钥导入到
LM-Trusted Publishers
存储来完全绕过 ClickOnce 安装对话框。

现在世界一切都好。

Success!

我对此的理论是吊销检查失败,因为我们使用的是私有根 CA。我不知道有什么方法可以立即证实这一点,但这听起来似乎很有道理。

© www.soinside.com 2019 - 2024. All rights reserved.