如果从除我以外的任何系统发布,带有代码签名证书的 Clickonce 应用程序被组策略阻止
Clickonce application with code signing cert blocked by group policy if published from any system except mine
环境:
- 带有签名证书的 ClickOnce Winforms 应用程序(Symantec Class 3 SHA256 代码签名 CA)
- 客户端计算机 运行ning windows 7 并且用户所处的组策略不允许本地管理员访问
- 有一个 "Certificate Policy" 应用于该组的代码证书,它应该允许任何具有该证书的应用程序 运行 具有本地管理员权限
- 出于安全原因无法更改组策略
- 最多 6 名开发人员参与并发布此项目
- Visual Studio 2013
症状:
当我从 我的 系统发布应用程序时,它能够按预期自动更新和 运行s。
当任何 other 开发人员发布时,它会自动更新并且应用程序无法启动。转储包含以下错误:
This program is blocked by group policy. For more information, contact your system administrator
如果我从我的机器重新发布,它会按预期进行更新和 运行。
签约:
以下是我们如何将证书应用到应用程序的步骤:
- 项目属性
- 签名标签
- Select 来自文件按钮
- Select项目中包含的证书
- 输入证书密码
问题:
当以相同方式应用证书时,为什么我们只能从一个开发人员的计算机更新 ClickOnce 应用程序而不能更新其他计算机?
除了禁用组策略,我们如何才能在不遇到相同问题的情况下从多台计算机成功发布此应用程序?
我不知道它不起作用的确切原因,但我想说的是,如果 clickonce 可以部署在第三方机器上,并且在同一台机器上,它与从您的机器生成的 clickonce 一起工作,并且不使用从另一台开发机器生成的 clickonce,您已经完成了最困难的部分。
您需要找出两台开发机器之间的差异。好的候选者是注册表或证书存储。
所以对我来说你有这些选择:
- 用其他机器测试(生成和部署)看它是否工作
- 检查 clickonce 的 .csproj 设置是否完全相同
- 尝试在本地商店安装证书,然后使用
"Select from Store"
- 检查证书链是否正确(安装了根证书,证书安装在正确的组中,..)
- 比较两台开发机器上的 registries(如果它们完全不同,可能很难)
- 将生成的 clickonce 文件与文件比较器进行比较,尤其是 .manifest 文件(我已经通过这种方式找到了错误)
为了借鉴 Fabian 的回答,Microsoft 最近使 SHA256 证书向后兼容,因此它们将适用于旧版本的 windows。由于您要发布到 Windows 7 机器,因此您可以检查在服务器 post 发布引用上生成的应用程序文件:
- 算法="http://www.w3.org/2000/09/xmldsig#sha1"
如果说的是sha256,安装时Windows7可能无法识别
如果是这种情况,请尝试更新您的 Visual Studio 版本 - 这应该包含在最新更新中。
环境:
- 带有签名证书的 ClickOnce Winforms 应用程序(Symantec Class 3 SHA256 代码签名 CA)
- 客户端计算机 运行ning windows 7 并且用户所处的组策略不允许本地管理员访问
- 有一个 "Certificate Policy" 应用于该组的代码证书,它应该允许任何具有该证书的应用程序 运行 具有本地管理员权限
- 出于安全原因无法更改组策略
- 最多 6 名开发人员参与并发布此项目
- Visual Studio 2013
症状:
当我从 我的 系统发布应用程序时,它能够按预期自动更新和 运行s。
当任何 other 开发人员发布时,它会自动更新并且应用程序无法启动。转储包含以下错误:
This program is blocked by group policy. For more information, contact your system administrator
如果我从我的机器重新发布,它会按预期进行更新和 运行。
签约:
以下是我们如何将证书应用到应用程序的步骤:
- 项目属性
- 签名标签
- Select 来自文件按钮
- Select项目中包含的证书
- 输入证书密码
问题:
当以相同方式应用证书时,为什么我们只能从一个开发人员的计算机更新 ClickOnce 应用程序而不能更新其他计算机?
除了禁用组策略,我们如何才能在不遇到相同问题的情况下从多台计算机成功发布此应用程序?
我不知道它不起作用的确切原因,但我想说的是,如果 clickonce 可以部署在第三方机器上,并且在同一台机器上,它与从您的机器生成的 clickonce 一起工作,并且不使用从另一台开发机器生成的 clickonce,您已经完成了最困难的部分。
您需要找出两台开发机器之间的差异。好的候选者是注册表或证书存储。
所以对我来说你有这些选择:
- 用其他机器测试(生成和部署)看它是否工作
- 检查 clickonce 的 .csproj 设置是否完全相同
- 尝试在本地商店安装证书,然后使用 "Select from Store"
- 检查证书链是否正确(安装了根证书,证书安装在正确的组中,..)
- 比较两台开发机器上的 registries(如果它们完全不同,可能很难)
- 将生成的 clickonce 文件与文件比较器进行比较,尤其是 .manifest 文件(我已经通过这种方式找到了错误)
为了借鉴 Fabian 的回答,Microsoft 最近使 SHA256 证书向后兼容,因此它们将适用于旧版本的 windows。由于您要发布到 Windows 7 机器,因此您可以检查在服务器 post 发布引用上生成的应用程序文件: - 算法="http://www.w3.org/2000/09/xmldsig#sha1"
如果说的是sha256,安装时Windows7可能无法识别
如果是这种情况,请尝试更新您的 Visual Studio 版本 - 这应该包含在最新更新中。