ClickOnce 和 Authenticode
“Authenticode”是一种 Microsoft 技术,该技术使用行业标准的加密技术,采用数字证书对应用程序代码进行签名,数字证书用于验证应用程序发行者的真实性。 通过对应用程序部署使用 Authenticode,ClickOnce 可降低特洛伊木马程序入侵的风险。特洛伊木马程序是一种病毒或其他有害程序,恶意第三方将其伪装为来自已确认且可信任的源的合法程序。 用数字证书为 ClickOnce 部署签名是一个可选步骤,用于验证是否未篡改程序集和文件。
以下各节描述在 Authenticode 中使用的不同类型的数字证书、如何使用证书颁发机构 (CA) 验证证书、时间戳在证书中的角色以及可用于证书的存储方法。
Authenticode 和代码签名
“数字证书”是一个文件,该文件包含一个加密公钥/私钥对以及元数据,元数据描述将该证书颁发给哪个发行者和颁发该证书的机构。
有各种类型的 Authenticode 证书。 每种证书针对不同类型的签名进行了配置。 对于 ClickOnce 应用程序,您必须具有对代码签名有效的 Authenticode 证书。如果尝试用另一种类型的证书(如数字电子邮件证书)对 ClickOnce 应用程序进行签名,则该证书将无效。 有关更多信息,请参见 Introduction to Code Signing(代码签名简介)。
可以通过以下三种方式之一获取证书以用于代码签名:
从证书供应商处购买证书。
从您的组织中负责创建数字证书的小组那里接收证书。
使用 Windows 软件开发包 (SDK) 附带的 MakeCert.exe 生成自己的证书。
使用证书颁发机构对用户的好处
使用 MakeCert.exe 实用工具生成的证书通常称为“自发证书”或“测试证书”。 这种证书的工作方式与 .snk 文件在 .NET Framework 中的工作方式基本相同。 它仅包含一个加密的公钥/私钥对,并不包含任何有关发行者的可验证信息。 您可以使用自发证书在 Intranet 上部署具有高度信任的 ClickOnce 应用程序。然而,当这些应用程序在客户端计算机上运行时,ClickOnce 会将它们确定为来自未知发行者。 默认情况下,用自发证书签名并通过 Internet 部署的 ClickOnce 应用程序无法利用受信任的应用程序部署。
相反,从 CA(如证书供应商或您的企业中的部门)收到的证书会为您的用户提供更高的安全性。 该证书不仅会标识已签名软件的发行者,还会通过与签发该证书的 CA 进行核实来验证发行者的身份。 如果该 CA 不是根颁发机构,则 Authenticode 还会沿证书链回溯到根颁发机构来验证该 CA 是否被授权颁发证书。 为了获取更高的安全性,在任何可能的时候都应使用由 CA 颁发的证书。
有关生成自发证书的更多信息,请参见Makecert.exe(证书创建工具)。
时间戳
用于对 ClickOnce 应用程序签名的证书在某个时间段之后将会到期,这个期限通常为十二个月。 为了省去使用新的证书不断地对应用程序重复签名的工作,ClickOnce 支持时间戳。 如果使用时间戳对应用程序进行签名,则只要时间戳是有效的,即使应用程序的证书已到期,也会继续接受该证书。 这将允许证书已过期但时间戳有效的 ClickOnce 应用程序下载并运行。还允许证书过期的已安装应用程序继续下载并安装更新。
若要在应用程序服务器中包含时间戳,时间戳服务器必须是可用的。 有关如何选择时间戳服务器的更多信息,请参见如何:对应用程序和部署清单进行签名。
更新过期证书
在 .NET Framework 的早期版本中,更新其证书已过期的应用程序可能导致应用程序无法正常工作。 若要解决此问题,请使用以下方法之一:
在 Windows XP 上,将 .NET Framework 更新为版本 2.0 SP1 或更高版本;在 Windows Vista 上,将 .NET Framework 更新为版本 3.5 或更高版本。
卸载应用程序,并用有效证书重新安装新的版本。
创建更新证书的命令行程序集。 有关此过程的分步说明可以在 Microsoft 支持文章 925521 中找到。
存储证书
- 可以将证书在文件系统上存储为 .pfx 文件,也可以将证书存储在密钥容器中。 Windows 域上的用户可以拥有若干数目的密钥容器。 默认情况下,MakeCert.exe 会将证书存储在您个人的密钥容器中,除非您指定让 MakeCert.exe 将证书保存到 .pfx 中。 用于创建 ClickOnce 部署的 Windows SDK 工具 Mage.exe 和 MageUI.exe 允许您使用以上述任一方式存储的证书。