如果要使用 ClickOnce 部署发布应用程序,则必须使用公钥/私钥对对对来签名应用程序和部署清单,并使用 Authenticode 技术进行签名。 可以使用 Windows 证书存储或密钥文件中的证书对清单进行签名。
仅当使用的是 .NET Framework 4.8.1 或更早版本时,本文中的信息才适用。 如果使用 .NET 5 或更高版本,请按照 ClickOnce 部署 .NET Windows 桌面应用程序中的步骤作。
对于基于 .exe的应用程序,对 ClickOnce 清单进行签名是可选的。 有关详细信息,请参阅本文档的“生成未签名清单”部分。
有关创建密钥文件的信息,请参阅 如何:创建公钥-私钥对。
有关对程序集和应用程序清单进行签名的信息,请参阅 管理程序集和清单签名。
注释
Visual Studio 仅支持具有 .pfx 扩展名的个人信息交换(PFX)密钥文件。 不过,您可以通过在项目属性的签名页面上单击从存储选择,从当前用户的 Windows 证书存储中选择其他类型的证书。
使用证书签名
若要使用此方法,必须具有由证书颁发机构(CA)签名的证书。 证书由第三方认证服务提供商或企业中的授权组织颁发。
转到项目属性窗口(右键单击 解决方案资源管理器 中的项目节点并选择 “属性”)。 在“ 签名 ”选项卡上,选中 “对 ClickOnce 清单进行签名 ”复选框。
单击“ 从应用商店中选择 ”按钮。
此时会显示 “选择证书 ”对话框,并显示 Windows 证书存储的内容。
小窍门
如果单击此处 查看证书属性,将显示“ 证书详细信息 ”对话框。 此对话框包含有关证书和其他选项的详细信息。 单击“ 证书 ”以查看其他帮助信息。
选择要用于对清单进行签名的证书。
小窍门
如果存储中没有任何证书,仍可使用 测试证书进行签名。
此外,还可以在 “时间戳服务器 URL ”文本框中指定时间戳服务器的地址。 这是一个服务器,它提供一个时间戳,用于指定清单签名的时间。 它通常由提供 CA 签名的证书的同一第三方提供。
使用现有密钥文件进行签名
在 “签名 ”页上,选中 “签署 ClickOnce 清单 ”复选框。
单击“ 从文件选择 ”按钮。
此时会显示 “选择文件 ”对话框。
在 “选择文件 ”对话框中,浏览到要使用的密钥文件(.pfx)的位置,然后单击“ 打开”。
注释
此选项仅支持扩展名 为 .pfx 的文件。 如果你有另一种格式的密钥文件或证书,请将其存储在 Windows 证书存储中,然后选择该证书,如前面的过程所述。 所选证书的用途应包括代码签名。
会出现输入密码以打开文件对话框。 (如果 .pfx 文件已存储在 Windows 证书存储中或未受密码保护,则不会提示输入密码。
输入密码以访问密钥文件,然后选择 Enter。
选择 “更多详细信息...” 以查看证书的属性。 ClickOnce 在用户安装应用程序时显示证书时,使用者字段的值显示为发布者。 下面是用户安装 ClickOnce 应用程序时看到的示例:
注释
.pfx 文件不能包含证书链接信息。 如果存在,将发生以下导入错误: 找不到用于解密的证书和私钥。 若要删除证书链接信息,可以使用 Certmgr.msc 并在导出 *.pfx 文件时禁用包含所有证书的选项。
使用测试证书进行签名
测试证书不是由证书颁发机构(CA)签名的,只能用于测试目的。 有关测试证书的详细信息,请参阅 如何使用证书颁发机构帮助用户。
在 “签名 ”页上,选中 “签署 ClickOnce 清单 ”复选框。
若要创建新证书进行测试,请单击“ 创建测试证书 ”按钮。
在“ 创建测试证书 ”对话框中,输入密码来帮助保护测试证书。
注释
请务必选择 sha256RSA 作为 签名算法,除非以 .NET 2.0 为目标。
生成未签名的清单
对于基于应用程序,对 ClickOnce 清单进行 .exe
签名是可选的。 以下过程演示如何生成未签名的 ClickOnce 清单。
重要
未签名的清单可以简化应用程序的开发和测试。 但是,未签名的清单在生产环境中引入了大量安全风险。 仅当 ClickOnce 应用程序在与 Internet 或其他恶意代码源完全隔离的 Intranet 中的计算机上运行时,才考虑使用未签名的清单。
默认情况下,ClickOnce 自动生成已签名的清单,除非从生成的哈希中专门排除一个或多个文件。 换句话说,如果哈希中包含所有文件,则发布应用程序会导致签名清单,即使 清除 ClickOnce 清单 复选框也是如此。
生成未签名的清单,并在生成的哈希中包含所有文件
若要生成包含哈希中所有文件的未签名清单,必须先将应用程序与已签名清单一起发布。 因此,请先按照上述过程之一对 ClickOnce 清单进行签名,然后发布应用程序。
在“ 签名 ”选项卡上,清除 “签署 ClickOnce 清单 ”复选框。
在“ 发布 ”选项卡上,重置发布版本,以便只有一个版本的应用程序可用。 清除复选框,以便在 每次发布时自动递增版本。 默认情况下,每次发布应用程序时,Visual Studio 都会自动递增发布版本的修订号。 有关详细信息,请参阅 “如何:设置 ClickOnce 发布版本”。
发布应用程序。 Visual Studio 告知应用程序已使用与服务器上的现有应用程序不同的密钥进行签名,并询问是否要覆盖它。 选择 是。
生成未签名的清单并从生成的哈希中排除一个或多个文件
在 “签名 ”页上,清除 “签署 ClickOnce 清单 ”复选框。
在“ 发布 ”选项卡上,选择 “应用程序文件 ”按钮以打开 “应用程序文件 ”对话框,并将要从生成的哈希中排除的文件的 哈希 设置为 “排除 ”。
注释
从哈希中排除文件会将 ClickOnce 配置为禁用清单的自动签名,因此无需首先发布带签名的清单,如前面的过程所示。
发布应用程序。