Windows Networking 6: 关于标准的一些事,WAF和IIS服务器HTTPS工作异常问题

简介:

IIS Web Service 也算是一个主流的HTTP服务软件,有不少MS系的应用在IIS上运行、也有用户使用IIS提供的平台运行他们.Net Framework开发的应用程序。当然,为了网站安全,不少用户选择在IIS server前放一层WAF避免攻击。而这次,我们的一个用户遇到了一个有意思的问题,

问题现象

IIS Web service,上面运行了许多网站应用程序,以SNI区分。在IIS服务器之前放置一层WAF回源。用户反馈,有个IIS Web site通过WAF回源不成功。

现象主要是 在访问网站的时候,浏览器一直在加载,返回502/504等错误码,同时伴有499错误。

排查过程

由于IIS Web service对于我们来说基本上是一个黑盒,且在问题发生的时候基本没有任何错误日志和访问日志,我们基本上采用大胆猜测小心求证的方案来一步步定位问题。作为一整套系统,问题无非出在这几个方面,

网络问题

所有涉及到的IP及其对应端口我们都测试了联通性,telnet/tcpping等都显示连接三次握手正常。

IIS服务器本身问题

通过对IIS 服务器直接访问,我们基本排除服务器处理问题。(以下是我们测试主机的访问记录)

curl -v https://hello.test.domain:8443/ -o /dev/null -s --trace-time --resolve hello.test.domain:8443:ip.add.rss.227

image

WAF网站配置问题

从其它相同配置的网站来看,WAF的配置并没有什么特别之处,即便跟其它正常网站的配置完全一致,问题依旧存在。排查WAF的日志,基本把问题又指回了IIS 服务器,因为日志明确的记录了120s超时的情况,

image

抓包分析

矛盾点出现在WAF和IIS 服务器之间,因此我们通过抓包来分析这两个服务之间的交互情况。可惜,我们第一次抓包的结果无法解密,也就无法完全获知WAF和IIS 服务器的交互内容。为此,我们做了几个尝试,

  1. Windows上导出Certificate和Private Key为PFX,并设置密码。配置在Wireshark的RSA Key中。
  2. Windows IIS 服务器上 禁用Diffie-Hellman加密算法,并重启。
  3. 客户端上配置SSLKEYLOGFILE="C:\temp\sslkey.log",并在客户端的Wireshark中指定。

具体方法网上都有,不一一列举。最终,我们抓到了正常和异常的HTTPS数据流,通过解密后的数据包如下,

正常:客户端直接连接IIS
image

异常:客户端通过WAF连接IIS
image

很容易看到问题在于服务器在一个SSL tunnel中给WAF 发送 HELLO REQUEST,但WAF没有任何回复导致IIS 一直等待在 RE-NEGOTIATE阶段。而正常的情况下,客户端能够正确的处理这个请求,发送CLIENT HELLO。

Review TLS的RFC规范后,我们发现RFC中并未对客户端接收到 HELLO REQUEST 的行为做明确的规定,

https://tools.ietf.org/html/rfc5246

image

在Windows Server 2008 R2的IIS实现中,IIS一直等待响应也未必是一个合适的行为。

解决方案

了解了问题发生的原因,HELLO REQUEST并不一定是必须的,具体我们通过IIS的帮助文档,定位相应的配置Ignore避免了IIS发送HELLO REQUEST,

image

目录
相关文章
|
12天前
|
Windows
【报错】在浏览器输入localhost为什么启动的是Microsoft的IIS windows首页?
【报错】在浏览器输入localhost为什么启动的是Microsoft的IIS windows首页?
|
11天前
|
域名解析 网络协议 应用服务中间件
阿里云服务器配置免费https服务
阿里云服务器配置免费https服务
|
1月前
|
数据采集 缓存 前端开发
http和https请求服务器的时候在请求头部分都带什么到服务器呢?
HTTP和HTTPS请求头基本结构相似,HTTPS多了一层SSL/TLS加密。常见请求头如Accept(指定内容类型)、Authorization(身份验证)、Cookie(会话跟踪)、User-Agent(标识用户代理)等。HTTPS特有的头包括Upgrade-Insecure-Requests(升级到HTTPS)、Strict-Transport-Security(强制使用HTTPS)、Sec-Fetch-*(安全策略)和X-Content-Type-Options、X-Frame-Options等(增强安全性)。实际应用中,请求头会根据需求和安全策略变化。
20 0
|
1月前
|
存储 网络安全 数据安全/隐私保护
Windows Server 2019 IIS HTTPS证书部署流程详解
Windows Server 2019 IIS HTTPS证书部署流程详解
|
1月前
|
Kubernetes 网络安全 Windows
要在云效部署到阿里云服务器上的 Windows Server 上的 IIS
【2月更文挑战第18天】要在云效部署到阿里云服务器上的 Windows Server 上的 IIS
163 4
|
1月前
|
安全 关系型数据库 MySQL
利用windows服务器自带的IIS搭建网站并发布公网访问【内网穿透】
利用windows服务器自带的IIS搭建网站并发布公网访问【内网穿透】
267 0
利用windows服务器自带的IIS搭建网站并发布公网访问【内网穿透】
|
1月前
|
网络安全 Apache PHP
Liunx服务器如何配置https(二)
Liunx服务器如何配置https(二)
35 0
Liunx服务器如何配置https(二)
|
29天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
1月前
|
存储 弹性计算 数据可视化
要将ECS中的文件直接传输到阿里云网盘与相册(
【2月更文挑战第31天】要将ECS中的文件直接传输到阿里云网盘与相册(
415 4
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程