为SSL配置SSRS

bza*_*fir 3 ssl ssl-certificate reporting-services ssrs-2014

我有一个运行SSRS 2014的SSRS实例,我希望将其配置为通过SSL使用.

该服务器位于http://reports.mydomain2.com

我从域名www.mydomain.com上购买了GoDaddy的多SSL证书,并将reports.mydomain2.com添加为SAN

我从GoDaddy生成SSL证书和IIS一样,将证书导入中间证书颁发机构和个人/证书 在此输入图像描述 在此输入图像描述

我启动了SSRS配置管理器,我正在尝试设置SSL我看到了证书,但是当我选择它并单击Apply我得到错误,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)
Run Code Online (Sandbox Code Playgroud)

我用命令检查了绑定

netsh http show urlacl
Run Code Online (Sandbox Code Playgroud)

我在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) 
Run Code Online (Sandbox Code Playgroud)

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

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

知道什么可能是错的,我该如何解决?

bza*_*fir 9

我找到了解决方案,希望它能帮助别人.

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

所以我的步骤如下:

  1. 在我生成CSR的机器上,我导入从证书颁发机构收到的证书.
  2. 在同一台机器上,我将带有私钥和扩展属性的证书导出到.pfx
  3. 在SSRS机器上,我导入了导出的证书
  4. 启动SSRS配置管理器,在"Web服务URL"部分中,选择新导入的证书,然后单击" 应用"
  5. 如果生成的证书的URL与SSRS服务器的DNS完全匹配,则应该完成.
  6. 如果证书的URL与SSRS DNS名称不匹配(但报告服务器的URL上有SAN,您将看到SSRS配置管理器中选择的SSL证书设置为"未知",ssl URL也设置为"未知". SSRS显示证书和SSL URL未知
  7. 打开SSRS配置文件,RsReportServer.config,并编辑UrlReservations的条目,为SSL设置所需的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>
Run Code Online (Sandbox Code Playgroud)

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

  1. 运行以下命令以查找所有有界URL.您必须找到报告服务器的URL,并记下SDDL,这在为报告服务器创建SSL URL时将需要.

    netsh http show urlacl
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除SSRS配置管理器创建的有界URL,该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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行以下命令为报表服务器添加正确的URL.我们需要使用绑定到端口80的报告服务器的entro中找到的SSDL(参见上面的第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=<....>
    
    Run Code Online (Sandbox Code Playgroud)


小智 6

错误:指定 IP 地址和端口组合的 SSL 绑定已存在。

有没有遇到过上面的错误?一个简单的修复如下。

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

  • 在CMD使用下面的命令(命令提示):netsh http show sslcert;

  • 除去通过使用下面的命令的结合:netsh http delete sslcert ipport=0.0.0.0:443;

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