65.9K
CodeProject 正在变化。 阅读更多。
Home

保护 BizTalk WCF 服务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (3投票s)

2016 年 8 月 13 日

CPOL

8分钟阅读

viewsIcon

21947

使用 SSL 和客户端证书身份验证及授权来保护 BizTalk WCF 接收位置。

引言

保护 BizTalk WCF 接收位置。

                 我想创建一个 BizTalk WCF 接收位置,该位置使用 SSL 并要求客户端使用证书进行身份验证。我还希望授权访问某些客户端证书;以便并非所有由受信任的颁发机构颁发的客户端都能访问该服务。

涉及的步骤

      这些步骤将针对 BizTalk Server 2013R2 / IIS 8.5

  1. 测试 https URL。 -- 通过此步骤,您的服务已配置为使用 SSL。如果您想使用 Windows 身份验证而不是客户端证书身份验证来验证和授权访问,请转至步骤 11。
  • 使用 Visual Studio,将您的架构发布为 WCF 服务。
    • 启用元数据交换。
    • 创建 BizTalk 接收位置。
    • 启用匿名访问。  
    • Publish (发布)
     
  • 在 IIS 中创建一个新的应用程序池。 将应用程序池的标识更改为使用拥有 BizTalk 访问权限的帐户。
  • 将 IIS 中的 WCF 服务的应用程序池更改为上一步中创建的应用程序池。
  • 启用接收位置并确保服务正常工作。
  • 打开 Internet Information Services 管理器。
  • 在左侧的“连接”列中单击服务器名称,然后双击“服务器证书”。
     
  • 在“操作”窗格中,单击“创建自签名证书”。
  • 按照下图提供详细信息。
  • 单击“确定”,您将在“服务器证书”窗格中看到您的证书。我们要绑定到服务的服务器证书已准备就绪。
     
 
 
  • 在 IIS 中,单击已发布您的服务的网站(在本例中为“默认网站”)。
  • 在“操作”窗格中,单击“绑定”。
  • 在“添加站点绑定”弹出窗口中,单击“添加”。
  • 在“添加站点绑定”弹出窗口中,在“类型”下拉列表中选择 https。在“SSL 证书”下拉列表中选择上一步中创建的证书。
  • 点击“确定”。
     
 
  • 单击“默认网站”下的您的服务/应用程序,然后双击“SSL 设置”。
  • 选中“需要 SSL”复选框。在“客户端证书”中选择“忽略”单选按钮,然后单击“操作”窗格中的“应用”。
     
 
  • 转到 BizTalk 管理控制台,打开步骤 1 中创建的 WCF 接收位置。
  • 单击“配置”,转到“安全”选项卡,从“安全模式”下拉列表中选择“传输”,将“传输安全凭据”保留为“无”,然后单击“确定”。
     
 
  • 回到 IIS;转到您的应用程序的虚拟目录并打开 Web.config 文件。
  • 在“行为”标签中,将 httpsHelpPageEnabled 和 httpsGetEnabled 设置为 true。
  • 重启您的网站。
通过此步骤,您的 WCF 服务已配置为使用 SSL。现在我们将进行测试,然后配置客户端证书身份验证。
 
 
 
 
 Browse the service in internet explorer using https. https:///TestSSLService/testsslservice.svc
 
注意: 在 URL 中使用您计算机的完整名称而不是 localhost。在 URL 中使用 localhost 会引发此错误 --
 
主机 <<您计算机的完整名称>> 的安全证书与您正在查看的页面的名称不匹配。在 IIS 服务器证书中,检查您在步骤 2 中创建的证书的“颁发给”部分。该名称应与您计算机的完整名称匹配。
 
 
 
 
  • 转到 IIS,单击“默认网站”下的您的服务/应用程序,然后双击“SSL 设置”。 
  • 在“客户端证书”下,单击“要求”,然后单击“操作”窗格中的“应用”。 
  • 必须启用匿名身份验证。
     
 
  • 转到 BizTalk 管理控制台;在 WCF 接收位置适配器设置的“安全”选项卡中,将“传输客户端凭据类型”更改为“证书”。
  • 通过此步骤,WCF 服务已配置为使用客户端证书身份验证。但是,任何由受信任的颁发机构颁发的客户端证书都可以用于访问此服务,前提是颁发机构的根证书已安装在您的计算机的“受信任的根证书颁发机构”中。
  • 在接下来的步骤中,我们将设置授权。
 
 
             在此步骤中,我们将首先创建一个根证书,然后创建一个由该根证书签名的客户端证书。
 
 
  • 以管理员模式打开 Visual Studio 命令提示符,并导航到要保存证书文件的位置。(默认路径为 c:\windows\system32 或 c:\windows\sysWow64)。
  • 创建根证书: makecert -n "CN=TestRootCA" -r -sv TestRootCA.pvk TestRootCA.cer
  • 这将提示创建密码;请创建密码。 将此证书安装在客户端和服务器计算机上的“本地计算机”的“受信任的根证书颁发机构”中。
  • 从刚刚创建的 TestRootCA 创建客户端证书。
    • makecert -sk Clientcert -iv TestRootCA.pvk -n "CN=Clientcert_Test" -ic TestRootCA.cer -sr currentuser -ss my -sky signature -pe
  • 此客户端  证书将在当前用户的“个人”存储中创建。
  • E导出客户端证书(包括私钥)。
  • 将其导入到客户端计算机的当前用户“个人”存储中。您应该已经导入了 TestRootCA 证书。 
  • 现在我们有了一个客户端证书,请使用您刚刚导入的客户端证书从 IE 浏览该服务。您可以使用任何具有已链接到服务器的根证书的客户端证书来浏览该服务。
 
注意:如果您遇到 403.16 - Forbidden。您的客户端证书不被信任或无效错误,请参考链接
 
解决方案:
向 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL 添加一个新的 DWORD 值:值名称:ClientAuthTrustMode 值类型:REG_DWORD 值数据:2
 
 
通过此步骤,我们已配置并测试了使用客户端证书身份验证的 https WCF 服务。现在我们将配置授权,以便只有授权的客户端证书才能用于访问该服务。
 
 
 
  • 转到“控制面板”->“程序和功能”。单击“启用或关闭 Windows 功能”。
  • In the windows features pop up, navigate to Internet information services, world wide web services, Security.
  • 检查“IIS 客户端证书映射身份验证”和“URL 授权”功能是否已选中。如果没有,请选中它们,然后单击“确定”以安装这些功能。
     
 
  • 转到 IIS,单击已发布您的服务的网站(默认网站)
  • 双击“配置编辑器”。
     
 
 
  • 在“配置编辑器”中,在“节”下拉列表中选择“System.Webserver/security/authentication”下的“IIS 客户端证书映射身份验证”。
  • 将 enabled 标志设置为 True。
  • 单击 manyToOneMappings 字段的省略号。
  • 在“集合编辑器”窗口中单击“添加”。
  • 输入描述和名称的值。填写用户名和密码字段,使用有权访问该计算机的帐户。 在此框中提供错误的密码将导致在调用服务时出现身份验证被拒绝错误。
  • 单击“规则”字段的省略号。
     
 
  • 在弹出窗口中,单击“添加”并输入值,如下图所示。matchCriteria 是您在步骤 6 中创建客户端证书时提供的 CN 值。关闭这两个窗口,然后单击“配置编辑器”窗口中的“应用”。
     
 
  • 通过此步骤,您已将步骤 6 中创建的客户端证书映射到 Windows 帐户。您仍然可以使用任何客户端证书调用服务。如果您使用映射的证书,调用将被身份验证。如果您使用不同的客户端证书,调用将是匿名的。
  • 接下来,我们将授权访问您在上一步中使用的帐户,以便服务不能使用任何其他证书进行调用。
  • 在 IIS 中选择您的 WCF 服务,然后双击“授权规则”。
     
 
  • 编辑现有规则并选择“指定用户”。提供您在上一步中使用的帐户,然后单击“确定”。
  • 最后也是重要的一步。转到 IIS 中的应用程序池,并将托管的管道模式更改为“经典”。
     
 
 
 
  • 重启您的 Web 服务器,并使用不同的客户端证书调用您的服务。如果您使用除上一步中映射的证书以外的任何证书,您将收到授权错误。
  • 以下步骤是为在 SSL 服务上配置 Windows 身份验证而不是客户端证书身份验证。
 
 
  • 确保已安装 Windows 身份验证功能。检查“程序和功能”。
  • 转到“控制面板”->“程序和功能”。单击“启用或关闭 Windows 功能”。
  • In the windows features pop up, navigate to Internet information services, world wide web services, Security.
  • 检查“Windows 身份验证”功能是否已选中。如果没有,请选中它,然后单击“确定”以安装这些功能。
  • 在 IIS 中,选择您的服务,然后双击“身份验证”。禁用“匿名”,并启用“Windows 身份验证”。
  • 选择您的服务,然后单击“SSL 设置”,确保“客户端证书”设置为“忽略”。
  • 选择您的服务,然后双击“授权规则”。
  • 编辑现有规则并选择“指定用户”。提供您要用于访问服务的帐户,然后单击“确定”。
     
 
  • 在 BizTalk 管理控制台中,转到适配器配置的“安全”选项卡,并将“传输客户端凭据类型”更新为“Windows”。
  • 最后也是重要的一步。转到 IIS 中的应用程序池,并将托管的管道模式更改为“经典”。
  • Restart your website and test.
 
© . All rights reserved.