IIS发布的网站和VS调试不能访问处理(HSTS介绍)

小占时光 2024-11-29 10:28:18 973


背景

       最近开发项目过程中,项目突然不能访问了,vs调试也不能成功,日志也没有。但.net 8的项目又能成功,真是一头雾水啊,问题在哪里都没找到。最后找到的原因,真是哭笑不得,因为某一个项目配置添加了HSTS,导致了所有localhost访问的网站,全部不能访问了。

      作为经验教训,一定要好好记下来。因为公司有很多项目,所以会有交叉开发的情况,有时候就会打开其他项目修改代码或者测试。其中一个项目就做了HSTS的配置,因为之前没有弄过着个配置,所以不知道它的作用,现在终于了解。

问题表现

      问题的表现就是上面描述的那样,不仔细看还不知道,是被强制跳转https 了,现在地址栏都不显示https或http了,所以不容易发现。调试浏览器就可以看到下面的情况了。第一个localhost使用得是http,但浏览器强制307跳转到htpps了,虽然都是localhost,但协议已经变了,本地发布一般会使用证书,所以https无法访问。

 

解决办法就是安装证书让https可以访问,另外就是删除localhost 的HSTS。

安装证书网上的教程很多,IIS自己都可以发布一个,给本地访问使用。删除HSTS也很简单。介绍一下HSTS,这才是问题的核心。

HSTS(HTTP Strict Transport Security)

            HSTS(HTTP Strict Transport Security) 是一种Web安全策略机制,用于告知浏览器只能通过 HTTPS 协议访问一个网站,而不允许通过 HTTP 协议访问。这是为了防止一些常见的攻击方式,如 SSL剥离攻击(SSL Stripping),确保网站的所有请求都经过加密的HTTPS连接。

HSTS的工作原理:

1、服务器启用HSTS:

网站服务器通过在响应头中包含一个特殊的 Strict-Transport-Security 头部来启用HSTS。例如:

Strict-Transport-Security: max-age=31536000; includeSubDomains

这个头部的意思是,网站要求浏览器仅通过HTTPS访问,并且要求该策略在 31536000秒(即一年) 内生效。此外,includeSubDomains 指定该策略也适用于所有子域名。

2、浏览器的行为:

当浏览器首次访问支持HSTS的HTTPS网站时,服务器返回这个 Strict-Transport-Security 头部,浏览器将把该站点的所有后续请求都强制转为HTTPS连接。
即使用户在地址栏中输入的是 http://,浏览器也会自动将其转换为 https://,从而避免了通过不安全的HTTP协议访问。

3、防止SSL剥离攻击:

SSL剥离攻击是一种攻击方式,攻击者通过拦截和修改从浏览器到服务器的通信,将原本的HTTPS请求劫持为HTTP请求,导致敏感数据在未加密的HTTP连接中传输,从而泄露信息。
HSTS有效阻止了这种攻击,因为一旦浏览器知道该网站支持HSTS,所有后续请求都会通过HTTPS而不是HTTP进行,攻击者无法轻易劫持连接。

HSTS的常用参数:
max-age=<seconds>:指定HSTS策略的有效期(以秒为单位)。浏览器在这段时间内强制使用HTTPS访问该站点。
includeSubDomains:表示HSTS策略不仅适用于根域名,还适用于所有子域名。
preload:这是一个可选标记,表示网站希望将其域名列入浏览器的HSTS预加载列表。预加载列表是浏览器厂商维护的一个固定列表,在浏览器首次访问时就知道哪些网站支持HSTS,从而立即启用HTTPS,而无需等待服务器返回头部。

使用HSTS的优势:
1、增强安全性:通过强制使用HTTPS协议,确保所有的数据都经过加密传输,防止中间人攻击。
2、防止SSL剥离攻击:阻止攻击者通过降级攻击让用户与网站之间的连接回退到HTTP。
3、提高用户信任:HSTS是一个标准化的安全措施,显示网站对数据保护的重视,增强用户对网站的信任。

使用HSTS的注意事项:
1、一旦启用,不能轻易撤销:一旦浏览器缓存了HSTS规则,用户在设置的 max-age 时间内都必须通过HTTPS访问该网站。如果站点后来禁用HSTS,用户的浏览器可能仍会将其请求转向HTTPS,直到缓存过期。
2、预加载列表的应用:如果启用了 preload 标记并且将网站提交到HSTS预加载列表,网站必须始终使用HTTPS,否则可能会影响访问。
示例:
假设你的服务器想要启用HSTS,可以在HTTP响应中添加如下头部:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

浏览器这样做会:

  1. 强制浏览器在未来一年内(max-age=31536000)使用HTTPS访问该站点。
  2. 确保所有子域名(includeSubDomains)也遵循该策略。
  3. 提交到浏览器的HSTS预加载列表(preload)。

SSL剥离攻击(SSL Stripping)

     SSL剥离攻击(SSL Stripping) 是一种中间人攻击(Man-in-the-Middle Attack),攻击者通过劫持客户端与服务器之间的通信,将原本的 HTTPS(加密的安全连接)降级为 HTTP(未加密的连接),从而使得敏感数据(如用户名、密码、信用卡信息等)以明文形式传输,容易被攻击者窃取。

攻击过程:
1、正常的HTTPS请求:用户向一个网站发送HTTPS请求(例如,https://example.com),该请求会被发送到服务器。
2、攻击者介入:攻击者位于客户端和服务器之间,充当中间人。当浏览器向目标服务器请求建立HTTPS连接时,攻击者拦截并修改请求。
3、降级为HTTP:攻击者将客户端的HTTPS请求转发为HTTP请求(例如,http://example.com),然后将修改后的请求发送到目标服务器。
4、服务器响应:目标服务器返回一个普通的HTTP响应,可能没有加密保护。
5、客户端接收未加密数据:浏览器收到HTTP响应后,认为是一个正常的HTTP响应,因此不会加密数据。这时,所有数据,包括敏感信息,都通过不安全的HTTP连接传输。

删除HSTS 

       网站添加 HSTS 配置,主要是保护网站的安全,在互联网上,这是比较重要的。而对于本地调整却比较麻烦,本地调试所有项目都是使用localhost的,而且基本都没有使用https,这样已设置HSTS,所有网站都不能访问了。

      配置证书可以到网上查找教程,简单介绍一下删除某一个域名的HSTS 删除 。在浏览器地址栏输入下面地址。

google浏览器:chrome://net-internals/#hsts

edge浏览器:edge://net-internals/#hsts

添加要操作的域名,点击“delete”即可。

 

 

 

最后一次修改 : 2025/1/23 上午3:45:33

优秀
123
分享
123
奶茶
123
文章版权声明:版权归原作者(小占时光)所有。未经明确书面许可,严禁任何个人或组织以任何形式进行商业性或非商业性的使用、转载或抄袭。
评论