使用 HTTPS 和证书连接外部系统





5.00/5 (2投票s)
本文介绍了如何使用 BizTalk 通过 HTTPS(使用 TLS 1.0)和安全证书实现从一个服务器到另一个服务器的连接。
引言
本文解释了如何通过 HTTPS 和 TLS 1.0 协议,实现 BizTalk 服务器与任何其他外部系统之间的安全连接。文章还提到了我们遇到的某些挑战以及如何克服这些问题。文章以一个 BizTalk Server 交互的支付网关为例。
背景
该应用程序与外部支付网关服务器进行交互,安全地来回传输文件。传输的细节是支付详情,这些细节需要安全性,以防止任何有权访问网络的第三方进行入侵或黑客攻击。BizTalk 应用程序的功能如下:
该系统的业务是进行在线保险单购买。用户通过 Web 门户购买保单。在沙特阿拉伯,有两种支付方式:SADAD
(通用支付网关 - https://en.wikipedia.org/wiki/SADAD_Payment_System)和信用卡。SADAD
是沙特阿拉伯的一个集中支付机构,用户无需银行账户或信用卡即可通过该机构管理支付/交易。
当选择 SADAD
作为支付选项时,会生成一个唯一的 SADAD
号码,并提供给用户。然后,用户可以使用此唯一号码在规定的天数内(例如 3 或 10 天)付款。付款可以在银行完成,也可以使用提供的 SADAD
号码在线完成。
保险公司有 BizTalk 集成,用于管理与支付相关的数据传输。
- 账单上传 - 通过此应用程序将账单上传到中央支付网关。当通过 Web 门户购买保单时,这会实时发生。
- 支付通知 - 每当用户为给定的
SADAD
号码完成付款时,中央支付网关会通知我们的公司。收到通知后,BizTalk 会更新内部系统,表明付款已完成,然后生成保单。
以上两个集成都使用 HTTPS
和 TLS 1.0
以及安全证书。最初,它们使用的是 SSL,后来我们从 SSL
升级到了 TLS
。
应用程序和安全设置
支付网关和 BizTalk 服务器使用证书通过 HTTPS/TLS 进行通信。证书嵌入了私钥,应从证书颁发机构获取。证书生成过程如下:
- 在您要连接到支付服务器的 BizTalk 服务器上,从 IIS 创建一个证书请求。
- 在 IIS 中,展开“ServerName”,选择“Server Certificate”,然后双击。
- 单击右侧的“Create Certificate Request”。填写所需的证书信息,然后单击“Next”。现在已生成证书请求文件,并且私钥已存储在服务器中。
- 将“Certificate request file”发送到证书颁发机构,以生成证书。
- 从证书颁发机构接收证书并将其导入我们的服务器。
- 证书颁发机构会将扩展名为 cer 或 crt 的证书文件发送回来。将文件扩展名更改为 cer。
- 在 IIS 中,展开“ServerName”,选择“Server Certificate”。单击右侧的“Complete Certificate Request”。键入从证书颁发机构收到的证书文件的完整路径,并键入创建证书请求文件时使用的“Friendly name”(友好名称)(友好名称应与“Certificate Request Form”中的“Common Name”(公用名称)匹配)。单击 OK。现在已创建证书。
- 将证书分配给 IIS 中的网站
- 在 IIS 中,选择 BizTalk 应用程序所在的网站。单击“Binding…”,然后添加新的 HTTPS 绑定。
- 在 Type 中选择 HTTPS,在 “SSL certificate” 中选择新导入的证书,并在需要时更改端口。
- 单击“Directory Security”中的“View”。将打开一个证书页面,您应该在页面底部看到一个密钥图像,后面跟着“You have a private key that corresponds to this certificate”(您有一个与此证书对应的私钥)的陈述。(如果您看不到,则表示您没有私钥)。
注意:在我们的项目中,证书的目的是包含以下内容:
- 确保远程计算机的身份
- 向远程计算机证明您的身份
- 保护电子邮件消息
- 允许在互联网上进行安全通信
还应将证书添加到适当的证书存储中,例如 Trusted Root(受信任的根)、Intermediate Certificate Authorities(中间证书颁发机构)和 Personal(个人),使用 MMC。导入后,请验证证书树结构是否可见,例如 Root(根)、Intermediate(中间)和 Site Certificate(站点证书)。
在 IIS 中,每个应用程序的 SSL 设置中,应取消选中“Use SSL”(使用 SSL),并选中“'
Require Client Certificate'”(需要客户端证书)选项,以允许使用客户端证书进行身份验证。
在用于连接外部服务器的 BizTalk 发送端口中更新证书的指纹。
通过修改注册表中的以下设置,禁用服务器上的 SSL 协议,只启用 TLS。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"Enabled"=dword:ffffffff
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"Enabled"=dword:ffffffff
更改上述设置后,我们尝试调用接口,但收到了“Forbidden Access”(禁止访问)之类的错误。于是我们查看了 IIS 日志,并检查了确切的错误代码。它是 403 - Access Denied(访问被拒绝)。我们继续检查子错误代码,发现它是 403.13,表示“Client Certificate was revoked”(客户端证书已被吊销)。
Location of IIS Log: C:\inetpub\logs\LogFiles\W3SVC1
2016-02-04 07:24:17 <Target IP> POST /PaymentNotificationReceive/BTSHTTPReceive.dll
- 5755 - <Source IP> Mozilla/4.0+[en]+(WinNT;+I) 403 13 2148081683 18370
这意味着服务器无法确认证书不在证书吊销列表(CRL)中。因此,当证书中提到的 CRL URL 无法访问,或者客户端证书在 CRL URL 中找到时,就会抛出错误。在我们的例子中,CRL URL 从服务器系统无法访问。因此,我们决定禁用此证书的 CRL 检查。
可以通过在注册表中设置以下标志并重启服务器来完成此操作。更改并重启后,一切正常,并且我们与支付网关的连接已成功建立。
禁用 CRL 检查的注册表项
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters\SslBindingInfo\IP:Port]
"DefaultSslCertCheckMode"=dword:00000001
显示 SSL 证书的命令
netsh http show sslcert
关注点
证书吊销列表以及如何在注册表中禁用检查是一次学习经历。
历史
- 2016年3月29日:初始版本