为 SSL 配置 SSRS

Configure SSRS for SSL

我有一个 SSRS 实例,运行 SSRS 2014,我想配置它以通过 SSL 使用。

服务器可用 http://reports.mydomain2.com

我在域 www.mydomain.com 上从 GoDaddy 购买了多 SSL 证书,并添加了报告。mydomain2.com 作为 SAN

我从 GoDaddy 为 IIS 生成了 SSL 证书,将证书导入中级证书颁发机构并在 Personal/Certificates

我启动了 SSRS 配置管理器,我正在尝试设置 SSL 我看到了证书,但是当我 select 它并单击“应用”时,我收到无法绑定 SSL 证书的错误消息

显示的错误是

Microsoft.ReportingServices.WmiProvider.WMIProviderException: An unknown error has occurred in the WMI Provider. Error Code 80070520

 ---> System.Runtime.InteropServices.COMException (0x80070520): A specified logon session does not exist. It may already have been terminated. (Exception from HRESULT: 0x80070520)
   --- End of inner exception stack trace ---
   at Microsoft.ReportingServices.WmiProvider.RSWmiAdmin.ThrowOnError(ManagementBaseObject mo)
   at Microsoft.ReportingServices.WmiProvider.RSWmiAdmin.CreateSSLCertificateBinding(String application, String certificateHash, String ipAddress, Int32 port)
   at ReportServicesConfigUI.WMIProvider.RSReportServerAdmin.CreateSSLCertificateBinding(UrlApplication app, String certificateHash, String ipAddress, Int32 port)

我用命令检查了绑定

netsh http show urlacl

我在端口 443 上找到了一个条目

Reserved URL            : https://+:443/sra_{BA195980-CD49-458b-9E23-C84EE0ADCD75}/
    User: NT SERVICE\SstpSvc
        Listen: Yes
        Delegate: Yes
    User: BUILTIN\Administrators
        Listen: No
        Delegate: No
    User: NT AUTHORITY\SYSTEM
        Listen: Yes
        Delegate: Yes
        SDDL: D:(A;;GA;;;S-1-5-80-3435701886-799518250-3791383489-3228296122-2938884314)(A;;GR;;;BA)(A;;GA;;;SY) 

我不知道这是否有任何区别(如果端口 443 已经绑定,阻止它绑定到 SSRS url 或不

但另一个可能的问题可能是 SSRS 配置管理器不允许我更改 url 以将 SSL 绑定到报告。mydomain2.com。但它试图绑定到证书的默认域。

知道哪里出了问题,我该如何解决?

我找到了解决办法,希望对其他人有帮助。

从 GoDaddy 下载的证书不包含私钥。这是创建证书绑定错误的原因。为了解决这个问题,我不得不在我在 IIS 中生成初始 CSR 的机器上导出带有私钥的证书(我还导出了所有扩展属性,以防万一)

所以我的步骤如下:

  1. 在我生成 CSR 的机器上,我导入了从证书颁发机构收到的证书。
  2. 在同一台机器上,我用私钥导出了证书并将 属性 扩展为 .pfx
  3. 在 SSRS 机器上,我导入了导出的证书
  4. 启动 SSRS 配置管理器,在 Web 服务 URL 部分,select 新导入的证书,然后单击 应用
  5. 如果生成的证书 url 与 SSRS 服务器的 DNS 完全匹配,您应该完成了。
  6. 如果证书的 url 与 SSRS DNS 名称不匹配(但在报告服务器的 url 上有一个 SAN,您将看到 SSL 证书 selected 在 SSRS 配置管理器中设置为未知,ssl url 也设置为未知。
  7. 打开 SSRS 配置文件,RsReportServer.config,并编辑 UrlReservations 条目,为 SSL
  8. 设置所需的 url
<URLReservations>
  <Application>
      <Name>ReportServerWebService</Name>
      <VirtualDirectory>ReportServer</VirtualDirectory>
      <URLs>
          <URL>
              <UrlString>https://reports.mydomain2.org:443</UrlString>
              <AccountSid>....</AccountSid>
              <AccountName>NT Service\ReportServer</AccountName>
          </URL>
          <URL>
              <UrlString>http://+:80</UrlString>
              <AccountSid>....</AccountSid>
              <AccountName>NT Service\ReportServer</AccountName>
          </URL>
      </URLs>
  </Application>
  <Application>
      <Name>ReportManager</Name>
      <VirtualDirectory>Reports</VirtualDirectory>
      <URLs>
          <URL>
              <UrlString>http://+:80</UrlString>
              <AccountSid>....</AccountSid>
              <AccountName>NT Service\ReportServer</AccountName>
          </URL>
          <URL>
              <UrlString>https://reports.mydomain2.org:443</UrlString>
              <AccountSid>....</AccountSid>
              <AccountName>NT Service\ReportServer</AccountName>
          </URL>
      </URLs>
  </Application>
</URLReservations>

您必须只添加或编辑 https 条目(您会在端口 80 上找到 http 条目,您不应该更改),并使用端口 80 条目中的 AccountSid 用于 ssl 上的新条目

  1. 运行 下面的命令可以找到所有有界的 URL。您必须找到用于报告服务器的 urls,并记下 SDDL,在为报告服务器创建 SSL URLs 时将需要它。

    netsh http show urlacl
    
  2. 删除由 SSRS 配置管理器创建的有界 URL,它指向错误的 url(主要 url 证书是为其创建的)

    netsh http delete urlacl url=https://www.mydomain1.org:443/ReportServer
    netsh http delete urlacl url=https://www.mydomain1.org:443/Reports
    
  3. 运行 下面的命令为报表服务器添加正确的 URL。我们需要使用在 entroes 中找到的 SSDL 用于绑定到端口 80 的报表服务器(参见上面的第 8 点)

    netsh http add urlacl url=https://reports.mydomain2.org:443/ReportServer user="NT Service\ReportServer" listen=yes sddl=<....>
    netsh http add urlacl url=https://reports.mydomain2.org:443/Reports user="NT Service\ReportServer" listen=yes sddl=<....>
    

Error : An SSL binding already exists for the specified IP address and port combination.

遇到过以上错误吗?下面是一个简单的修复。

  • 我们需要删除现有的绑定,为了实现这一点,我们需要知道哪个证书实际绑定了它;

  • 在 cmd(命令提示符)中使用以下命令:netsh http show sslcert;

  • 使用以下命令删除绑定:netsh http delete sslcert ipport=0.0.0.0:443;

完成后,再次将 URLSSL 证书 绑定,这次它将通过。测试 URL,它应该可以正常工作。