如何:在使外部列表脱机时消除"无法验证发布者"警报

上次修改时间: 2010年4月29日

适用范围: SharePoint Server 2010

在 Microsoft SharePoint Workspace 2010 或 Microsoft Outlook 2010 中脱机使用外部列表时,默认情况下您会收到一个警告,告知您无法验证发布者。图 1 显示了此警告。

图 1. 无法验证发布者警告

"无法验证发行者"警报

若要成功地使外部列表脱机,用户必须单击"安装",这表示用户信任程序包,即使无法验证程序包的发布者。若要了解此警告在外部列表脱机时出现的原因,则必须了解可使外部列表脱机的过程。

在使外部列表脱机时,SharePoint 会为客户端解决方案生成一个 Visual Studio 2010 中的 Office 开发工具 ClickOnce 包。应使用 Authenticode 证书对每个 Visual Studio 2010 中的 Office 开发工具包进行签名以指定相应包的发布者。用户使用 Visual Studio 2010 中的 Office 开发工具安装程序在其客户端上安装此包,并完成用于验证包是否由受信任的发布者发布的过程。默认情况下,SharePoint 没有可用于对包进行签名的证书。因此,SharePoint 会生成一个自签名证书并使用该证书对包进行签名。由于这是一个新的自签名证书,因此客户端之前不会信任此证书及其发布者,从而无法验证包的发布者。这样一来,Visual Studio 2010 中的 Office 开发工具安装程序会向用户发送提示消息,指示无法验证发布者。

为了防止此警告出现,您必须向 SharePoint 提供一个由受信任的证书颁发机构颁发的 Authenticode 证书,以便对 Visual Studio 2010 中的 Office 开发工具 ClickOnce 包进行签名。本主题演示如何向 SharePoint 提供 Authenticode 证书。若要执行此任务,您需要服务器场中每个前端 Web 服务器的管理员权限。若要了解有关 Visual Studio 2010 中的 Office 开发工具 ClickOnce 包的详细信息,请参阅发布 Office 解决方案。此外,请参阅授予对 Office 解决方案的信任权限,有关授予对 ClickOnce 应用程序的信任权限的详细信息,请参阅受信任的应用程序部署概述。

以下步骤演示如何生成两个证书并将其导入前端 Web 服务器场的证书存储中。

警告注释警告

除非信任某个证书,否则不要将该证书导入生产计算机中。

生成两个证书并将其导入前端 Web 服务器场的证书存储中

  1. 获取由受信任的证书颁发机构(例如 VeriSign)颁发的 Authenticode 证书。有关如何获取用于签名的证书的信息,请参阅 ClickOnce 和 Authenticode。

    证书必须包含一个私有的加密密钥才能用于签名。在此示例中,使用证书创建工具 (Makecert.exe) 生成并保存两个证书,即 ContosoRoot.cer 和 ContosoBCS.pfx。ContosoBCS.pfx 中包含的证书具有一个密钥,该证书用于对 Visual Studio 2010 中的 Office 开发工具 ClickOnce 包进行签名。ContosoRoot.cer 中包含的证书用作证书颁发机构颁发的证书,该证书用于对 ContosoBCS.pfx 中包含的证书进行签名。请注意,ContosoRoot.cer 中的证书没有私钥。

  2. 在服务器场的每个前端 Web 服务器上为 Local Computer 创建一个名为 BusinessConnectivityServices 的证书存储。

    Local ComputerBusinessConnectivityServices 证书存储是一个位置,SharePoint 可在该位置查找用于对 Visual Studio 2010 中的 Office 开发工具 ClickOnce 包进行签名的证书。通过在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates 下添加一个名为 BusinessConnectivityServices 的注册表子项,可以创建该证书存储。或者,可以将以下文本复制并粘贴到文本编辑器(如记事本)中,将其另存为 .reg 文件,然后双击该文件以创建注册表项。

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\BusinessConnectivityServices]
    
  3. 通过使用 Microsoft 管理控制台 (MMC),将 Authenticode 证书 ContosoBCS.pfx 导入所有前端 Web 服务器上的 Local Computer 的证书存储中。

    1. 在前端 Web 服务器上,单击"开始",再单击"运行"。在"运行"对话框中,键入 mmc,并按 Enter。

    2. 在 Microsoft 管理控制台 (MMC) 中,将 Local Computer 的证书管理单元添加到 MMC。

      有关如何添加证书管理单元的信息,请参阅如何:使用 MMC 管理单元查看证书。确保该证书管理单元针对的是 Local Computer 而非 Current User。通过确定 MMC 中"控制台根节点"下的项是否为"证书(本地计算机)"来验证这一点。如果该证书管理单元针对的是 Current User,则项为"证书 - 当前用户"。

  4. 在 MMC 中,在"控制台根节点"\"证书(本地计算机)"下,找到"BusinessConnectivityServices"项,该项是您在上一步骤中通过添加注册表子项创建的。右键单击该项,单击"所有任务",再单击"导入",如图 2 所示。

    图 2. 导入证书

    导入证书

  5. 完成"证书导入向导",将 ContosoBCS.pfx 导入 BusinessConnectivityServices 证书存储中。

    如果颁发用于签名的证书的证书颁发机构尚未在 Current User 的受信任的根证书颁发机构证书存储中,则继续执行下一步骤,以便为证书颁发机构 (ContosoRoot.cer) 导入证书。否则,跳过下一步骤,并继续执行步骤 7。

  6. 在使外部列表脱机的客户端计算机上,将证书颁发机构(如 ContosoRoot.cer)的证书导入当前用户的受信任的根证书颁发机构证书存储中。

    备注

    该证书必须只包含一个公钥。此外,不要将带私钥的证书颁发机构证书导入客户端计算机中。在具有适当的 PKI 基础结构的组织中,证书颁发机构的证书可能已部署到客户端计算机的受信任的根证书颁发机构证书存储。如果确实如此,则可跳过此步骤。

    由于此示例生成了 ContosoRoot.cer 证书,而客户端的存储中没有该证书,因此您应导入该证书。通过 MMC 导入该证书,如图 3 所示。请注意,MMC 此时具有 Current User 的证书管理单元。

    图 3. 导入证书

    导入证书

    在使外部列表脱机时,将发生下列情况之一:

    • 不显示警告。如果用于对 Visual Studio 2010 中的 Office 开发工具 ClickOnce 包进行签名的 Authenticode 证书已导入客户端计算机上的 Current User 的受信任发布者证书存储中,则将安装该包,而不会生成警告。

    • 显示发布者已验证警告。如果未满足上述条件,则将显示指示验证发布者的以下消息,该消息会提供发布者名称。以下是此消息的一个示例。

      图 4. 发布者已验证消息

      "发行者已验证"消息

    警告注释警告

    如果在将 Authenticode 证书导入前端 Web 服务器之前使外部列表脱机,则可能必须从服务器删除旧包,以便生成用新证书签名的包。可通过 SharePoint Designer 执行此操作。例如,若要删除网站 http://contoso 上的外部列表"产品列表"的旧包,可在 SharePoint Designer 中打开 http://contoso,然后单击导航窗格中的"网站对象"下的"所有文件"以打开"所有文件"选项卡。在"所有文件"选项卡上,单击"列表",再单击"产品列表"。您将看到一个名为"ClientSolution"的文件夹。通过选择该文件夹的名称,然后在功能区中单击"删除"来删除该文件夹。此时,如果您使此列表脱机,则将不会显示未验证的发布者警告。

    在以下情况下,无法使外部列表脱机:

    • 导入前端 Web 服务器上的 Local Machine 的 BusinessConnectivityServices 证书存储中的证书不包含私钥。

    • BusinessConnectivityServices 证书存储中有多个证书。

    若要解决这些问题,必须清理证书存储并导入带私钥的证书。

疑难解答提示

导入该证书后,如果您收到错误"由于密钥集不存在,未能发布解决方案外部列表名称",则请确保导入证书存储 LOCAL_MACHINE\BusinessConnectivityServices 中的证书包含私钥。

如果该证书包含私钥并且您仍收到此错误,则用于承载 SharePoint 网站 Web 应用程序的应用程序池的安全帐户可能不具有对从 ContosoBCS.pfx 导入的证书的私钥的访问权。通过在 ContosoBCS 作为证书主题的前端 Web 服务器上运行以下命令,可检查具有该私钥的访问权的用户:

winhttpcertcfg.exe -l -c LOCAL_MACHINE\BusinessConnectivityServices –s ContosoBCS

该命令显示具有该私钥的访问权的帐户和组的列表。

如果本地组 WSS_WPG 和应用程序池的安全帐户都未在该列表中出现,则该应用程序池的安全帐户不具有该私钥的访问权。若要解决此问题,请运行以下命令:

winhttpcertcfg.exe -g -c LOCAL_MACHINE\BusinessConnectivityServices –s ContosoBCS –a <application pool account>

有关 winhttpcertcfg.exe 的详细信息,请参阅 WinHttpCertCfg.exe(一类证书配置工具)(该链接可能指向英文页面)。