返回顶部
首页 > 资讯 > 精选 >启用HTTPS的原理
  • 353
分享到

启用HTTPS的原理

2023-06-08 02:06:46 353人浏览 泡泡鱼
摘要

这篇文章主要讲解了“启用 https 的原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“启用 HttpS 的原理”吧!理解 Mixed ContentHTTPS 网页中加载的 HTTP 资

这篇文章主要讲解了“启用 https 的原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“启用 HttpS 的原理”吧!

理解 Mixed Content

HTTPS 网页中加载的 HTTP 资源被称之为 Mixed Content(混合内容),不同浏览器对 Mixed Content 有不一样的处理规则。

早期的 IE

早期的 IE 在发现 Mixed Content 请求时,会弹出「是否只查看安全传送的网页内容?」这样一个模态对话框,一旦用户选择「是」,所有 Mixed Content 资源都不会加载;选择「否」,所有资源都加载。

比较新的 IE

比较新的 IE 将模态对话框改为页面底部的提示条,没有之前那么干扰用户。而且默认会加载图片类 Mixed Content,其它如 javascriptCSS 等资源还是会根据用户选择来决定是否加载。

现代浏览器

现代浏览器(Chrome、Firefox、Safari、Microsoft Edge),基本上都遵守了 W3C 的 Mixed Content 规范,将 Mixed Content 分为 Optionally-blockable 和Blockable 两类:

Optionally-blockable 类 Mixed Content 包含那些危险较小,即使被中间人篡改也无大碍的资源。现代浏览器默认会加载这类资源,同时会在控制台打印警告信息。这类资源包括:

  • 通过 <img> 标签加载的图片(包括 SVG 图片);

  • 通过 <video> / <audio> 和 <source> 标签加载的视频或音频;

  • 预读的(Prefetched)资源;

除此之外所有的 Mixed Content 都是 Blockable,浏览器必须禁止加载这类资源。所以现代浏览器中,对于 HTTPS 页面中的 JavaScript、CSS 等 HTTP 资源,一律不加载,直接在控制台打印错误信息。

移动浏览器

前面所说都是桌面浏览器的行为,移动端情况比较复杂,当前大部分移动浏览器默认都允许加载 Mixed Content。也就是说,对于移动浏览器来说,HTTPS 中的 HTTP 资源,无论是图片还是 JavaScript、CSS,默认都会加载。

一般选择了全站 HTTPS,就要避免出现 Mixed Content,页面所有资源请求都走 HTTPS 协议才能保证所有平台所有浏览器下都没有问题。

合理使用 CSP

CSP,全称是 Content Security Policy,它有非常多的指令,用来实现各种各样与页面内容安全相关的功能。这里只介绍两个与 HTTPS 相关的指令,更多内容可以看我之前写的《Content Security Policy Level 2 介绍》。

block-all-mixed-content

前面说过,对于 HTTPS 中的图片等 Optionally-blockable 类 HTTP 资源,现代浏览器默认会加载。图片类资源被劫持,通常不会有太大的问题,但也有一些风险,例如很多网页按钮是用图片实现的,中间人把这些图片改掉,也会干扰用户使用。

通过 CSP 的 block-all-mixed-content 指令,可以让页面进入对混合内容的严格检测(Strict Mixed Content Checking)模式。在这种模式下,所有非 HTTPS 资源都不允许加载。跟其它所有 CSP 规则一样,可以通过以下两种方式启用这个指令:

HTTP 响应头方式:

Content-Security-Policy: block-all-mixed-content


<meta> 标签方式:

<meta http-equiv="Content-Security-Policy" content="block-all-mixed-content">


upgrade-insecure-requests

历史悠久的大站在往 HTTPS 迁移的过程中,工作量往往非常巨大,尤其是将所有资源都替换为 HTTPS 这一步,很容易产生疏漏。即使所有代码都确认没有问题,很可能某些从数据库读取的字段中还存在 HTTP 链接。

而通过 upgrade-insecure-requests 这个 CSP 指令,可以让浏览器帮忙做这个转换。启用这个策略后,有两个变化:

  • 页面所有 HTTP 资源,会被替换为 HTTPS 地址再发起请求;

  • 页面所有站内链接,点击后会被替换为 HTTPS 地址再跳转;

跟其它所有 CSP 规则一样,这个指令也有两种方式来启用,具体格式请参考上一节。需要注意的是 upgrade-insecure-requests 只替换协议部分,所以只适用于 HTTP/HTTPS 域名和路径完全一致的场景。

合理使用 HSTS

在网站全站 HTTPS 后,如果用户手动敲入网站的 HTTP 地址,或者从其它地方点击了网站的 HTTP 链接,依赖于服务端 301/302 跳转才能使用 HTTPS 服务。而第一次的 HTTP 请求就有可能被劫持,导致请求无法到达服务器,从而构成 HTTPS 降级劫持。

HSTS 基本使用

这个问题可以通过 HSTS(HTTP Strict Transport Security,RFC6797)来解决。HSTS 是一个响应头,格式如下:

Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]


max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过 HTTPS 协议来访问。也就是对于这个网站的 HTTP 地址,浏览器需要先在本地替换为 HTTPS 之后再发送请求。

includeSubDomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过 HTTPS 协议来访问。

preload,可选参数,后面再介绍它的作用。

HSTS 这个响应头只能用于 HTTPS 响应;网站必须使用默认的 443 端口;必须使用域名,不能是 IP。而且启用 HSTS 之后,一旦网站证书错误,用户无法选择忽略。

HSTS Preload List

可以看到 HSTS 可以很好的解决 HTTPS 降级攻击,但是对于 HSTS 生效前的首次 HTTP 请求,依然无法避免被劫持。浏览器厂商们为了解决这个问题,提出了 HSTS Preload List 方案:内置一份列表,对于列表中的域名,即使用户之前没有访问过,也会使用 HTTPS 协议;列表可以定期更新。

目前这个 Preload List 由 Google Chrome 维护,Chrome、Firefox、Safari、IE 11 和 Microsoft Edge 都在使用。如果要想把自己的域名加进这个列表,首先需要满足以下条件:

  • 拥有合法的证书(如果使用 SHA-1 证书,过期时间必须早于 2016 年);

  • 将所有 HTTP 流量重定向到 HTTPS;

  • 确保所有子域名都启用了 HTTPS;

  • 输出 HSTS 响应头:

    • max-age 不能低于 18 周(10886400 秒);

    • 必须指定 includeSubdomains 参数;

    • 必须指定 preload 参数;

即便满足了上述所有条件,也不一定能进入 HSTS Preload List,更多信息可以看这里。通过 Chrome 的 chrome://net-internals/#hsts 工具,可以查询某个网站是否在 Preload List 之中,还可以手动把某个域名加到本机 Preload List。

对于 HSTS 以及 HSTS Preload List,我的建议是只要你不能确保永远提供 HTTPS 服务,就不要启用。因为一旦 HSTS 生效,你再想把网站重定向为 HTTP,之前的老用户会被无限重定向,唯一的办法是换新域名。

CDN 安全

对于大站来说,全站迁移到 HTTPS 后还是得用 CDN,只是必须选择支持 HTTPS 的 CDN 了。如果使用第三方 CDN,安全方面有一些需要考虑的地方。

合理使用 SRI

HTTPS 可以防止数据在传输中被篡改,合法的证书也可以起到验证服务器身份的作用,但是如果 CDN 服务器被入侵,导致静态文件在服务器上被篡改,HTTPS 也无能为力。

W3C 的 SRI(Subresource Integrity)规范可以用来解决这个问题。SRI 通过在页面引用资源时指定资源的摘要签名,来实现让浏览器验证资源是否被篡改的目的。只要页面不被篡改,SRI 策略就是可靠的。

有关 SRI 的更多说明请看我之前写的《Subresource Integrity 介绍》。SRI 并不是 HTTPS 专用,但如果主页面被劫持,攻击者可以轻松去掉资源摘要,从而失去浏览器的 SRI 校验机制。

了解 Keyless SSL

另外一个问题是,在使用第三方 CDN 的 HTTPS 服务时,如果要使用自己的域名,需要把对应的证书私钥给第三方,这也是一件风险很高的事情。

CloudFlare 公司针对这种场景研发了 Keyless SSL 技术。你可以不把证书私钥给第三方,改为提供一台实时计算的 Key Server 即可。CDN 要用到私钥时,通过加密通道将必要的参数传给 Key Server,由 Key Server 算出结果并返回即可。整个过程中,私钥都保管在自己的 Key Server 之中,不会暴露给第三方。

感谢各位的阅读,以上就是“启用 HTTPS 的原理”的内容了,经过本文的学习后,相信大家对启用 HTTPS 的原理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 启用HTTPS的原理

本文链接: https://lsjlt.com/news/251086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 启用HTTPS的原理
    这篇文章主要讲解了“启用 HTTPS 的原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“启用 HTTPS 的原理”吧!理解 Mixed ContentHTTPS 网页中加载的 HTTP 资...
    99+
    2023-06-08
  • HTTPS原理分析
    这篇文章主要介绍“HTTPS原理分析”,在日常操作中,相信很多人在HTTPS原理分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTTPS原理分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!HTTPS...
    99+
    2023-06-17
  • HTTPS 的加解密原理
    这篇文章主要介绍“HTTPS 的加解密原理”,在日常操作中,相信很多人在HTTPS 的加解密原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTTPS 的加解密原理”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • 怎么启用HTTPS
    怎么启用HTTPS,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 如何启用HTTPS一、准备工作服务器一台(可以购买阿里云轻量应用服务器,比较便宜)SSL证书 (...
    99+
    2023-06-17
  • HTTPS代理的工作原理是什么
    这篇文章将为大家详细讲解有关HTTPS代理的工作原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。主要工作流程...
    99+
    2023-06-15
  • 大型网站的HTTPS实践(一)——HTTPS协议和原理
    前言百度于2015年上线了全站HTTPS的安全搜索,默认会将HTTP请求跳转成HTTPS。从今天开始,我们将会分享多篇系列文章,为大家重点介绍和解析百度的HTTPS最佳实践。HTTPS协议概述HTTPS可以认为是HTTP+TLS。HTTP协...
    99+
    2023-06-03
  • 怎样理解HTTPS工作原理
    怎样理解HTTPS工作原理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当你打开浏览器,访问某个网站,如果网址旁有个小锁,代表访问的网址是安全的,反之不安全。当我们没有看到...
    99+
    2023-06-17
  • express启用https怎么用
    这篇文章将为大家详细讲解有关express启用https怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.申请SSL证书笔者用的是腾讯云,申请的是为期一年免费的证书...
    99+
    2024-04-02
  • HTTPS的优缺点和原理解析
    这篇文章主要讲解了“HTTPS的优缺点和原理解析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTTPS的优缺点和原理解析”吧!HTTPS是什么:HTTPS(全称:Hyper Text Tr...
    99+
    2023-06-10
  • 详解HTTPS 的原理和 NodeJS 的实现
    基本原理 HTTP协议采用明文传输数据,当涉及敏感信息的传送时,极有可能会受到窃听或者中间人的攻击。HTTPS是HTTP与SSL/TLS的组合,即使用加密通讯以及网络服务器的身份鉴定来进行信息的安全传输。...
    99+
    2022-06-04
    详解 原理 HTTPS
  • 服务器如何启用https
    在服务器中启用https的方法首先,在服务器中执行以下命令生成一个RSA私钥;openssl genrsa -des3 -out ssl.key 1024RSA私钥生成好后,继续执行命令生成CSR证书请求文件;openssl req -ne...
    99+
    2024-04-02
  • 分析计算机网络HTTPS原理
    本篇内容介绍了“分析计算机网络HTTPS原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、HTTP 的...
    99+
    2024-04-02
  • 怎样用原生的urllib2+httplib请求Https
    本篇文章给大家分享的是有关怎样用原生的urllib2+httplib请求Https,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。环境python2.7.5# https ser...
    99+
    2023-06-04
  • springboot 同时启用http/https的配置方法
    1. 启用HTTPS 修改配置 application.yml server: # port: 80 port: 443 ssl: enabled: true ...
    99+
    2024-04-02
  • Node.js开启Https的实践详解
    一、首先要去腾讯云申请 申请成功后,你直接下载证书就可以用了。 二、配置nginx 在/etc/nginx/conf.d/下加入你的域名配置比如xxx.com.conf,内容如下 server {...
    99+
    2022-06-04
    详解 Node js
  • HTTPS 的原理是什么,与HTTP有什么区别
    这篇文章主要介绍“HTTPS 的原理是什么,与HTTP有什么区别”,在日常操作中,相信很多人在HTTPS 的原理是什么,与HTTP有什么区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • python web.py启动https端口的方式
    目录python web.py启动https端口补充:python web.py 开启httpspython web.py启动https端口      ...
    99+
    2023-05-18
    python web.py启动https端口 python https端口
  • 网站为什么要启用HTTPS访问
    本篇文章给大家分享的是有关网站为什么要启用HTTPS访问,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 关于http和https,很多人不太了解两者有什么区别,HTT...
    99+
    2023-06-07
  • java Spring的启动原理详解
    目录引入Spring启动过程总结:总结引入 为什么突然说一下Spring启动原理呢,因为之前面试的时候,回答的那可谓是坑坑洼洼,前前后后,补补贴贴。。。 总而言之就是不行,再次看一下...
    99+
    2024-04-02
  • springboot启动的原理是什么
    Spring Boot的启动原理可以分为以下几个步骤: 加载依赖:Spring Boot会根据项目的配置文件(如pom.xml)...
    99+
    2023-10-26
    springboot
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作