ClickOnce 和 Authenticode

Authenticode 是一种Microsoft技术,它使用行业标准加密通过数字证书对应用程序代码进行签名,以验证应用程序的发布者的真实性。 通过对应用程序部署使用 Authenticode,ClickOnce 可降低特洛伊木马的风险。 特洛伊木马是一种病毒或其他有害程序,恶意第三方误报为来自既定可信来源的合法程序。 使用数字证书对 ClickOnce 部署进行签名是一个可选步骤,用于验证程序集和文件是否不会被篡改。

以下部分介绍了 Authenticode 中使用的不同类型的数字证书、如何使用证书颁发机构(CA)验证证书、证书中的时间戳角色以及可用于证书的存储方法。

验证码和代码签名

数字证书是包含加密公钥/私钥对的文件,以及描述颁发证书的发布者和颁发证书的代理的元数据。

有各种类型的 Authenticode 证书。 每个都针对不同类型的签名进行了配置。 对于 ClickOnce 应用程序,必须具有一个验证码证书,该证书对代码签名有效。 如果尝试使用其他类型的证书(如数字电子邮件证书)对 ClickOnce 应用程序进行签名,则它将无法正常工作。 有关详细信息,请参阅 代码签名简介

可以通过以下三种方式之一获取用于代码签名的证书:

  • 从证书供应商购买一个。

  • 从组织中负责创建数字证书的组接收一个。

  • 使用 New-SelfSignedCertificate PowerShell cmdlet 或使用 Windows 软件开发工具包(SDK)随附的 MakeCert.exe 来生成自己的证书。

使用证书颁发机构如何帮助用户

使用 New-SelfSignedCertificate 或 MakeCert.exe 实用工具生成的证书通常称为 自证书测试证书。此类证书的工作方式与 .NET Framework 中的 .snk 文件的工作方式大致相同。 它只包含公钥/私钥对,并且不包含有关发布者的可验证信息。 可以使用自证书在 Intranet 上部署高度信任的 ClickOnce 应用程序。 但是,当这些应用程序在客户端计算机上运行时,ClickOnce 会将这些应用程序标识为来自未知发布服务器。 默认情况下,使用自证书签名并通过 Internet 部署的 ClickOnce 应用程序不能利用受信任的应用程序部署。

相比之下,如果从 CA(例如证书供应商或企业内部的部门)收到证书,证书将为用户提供更多的安全性。 它不仅标识已签名软件的发布者,而且还通过验证颁发该签名的证书颁发机构来确认该标识。 如果 CA 不是根颁发机构,Authenticode 也将“链接”回根颁发机构,以验证 CA 是否有权颁发证书。 为了提高安全性,应尽可能使用 CA 颁发的证书。

有关生成自证书的详细信息,请参阅 New-SelfSignedCertificateMakeCert

时间 戳

用于对 ClickOnce 应用程序进行签名的证书在一定时间长度(通常为 12 个月)后过期。 为了删除不断使用新证书重新对应用程序重新签名的需要,ClickOnce 支持时间戳。 使用时间戳对应用程序进行签名时,即使在证书过期后,只要时间戳有效,证书仍将继续被接受。 这允许具有过期证书但有效的时间戳的 ClickOnce 应用程序下载并运行。 它还允许具有过期证书的已安装应用程序继续下载和安装更新。

若要在应用程序服务器中包含时间戳,时间戳服务器必须可用。 有关如何选择时间戳服务器的信息,请参阅 如何:对应用程序和部署清单进行签名

更新过期的证书

在 .NET Framework 的早期版本中,更新证书已过期的应用程序可能会导致该应用程序停止运行。 若要解决此问题,请使用以下方法之一:

  • 更新 .NET Framework 3.5 或更高版本。

  • 卸载应用程序,并使用有效的证书重新安装新版本。

存储证书

  • 可以将证书存储为文件系统上的 .pfx 文件,也可以将它们存储在密钥容器中。 Windows 域上的用户可以有多个密钥容器。 默认情况下, MakeCert.exe 会将证书存储在个人密钥容器中,除非指定应将其保存到 .pfxMage.exeMageUI.exe,用于创建 ClickOnce 部署的 Windows SDK 工具使你能够使用以任一方式存储的证书。