关于HTTPS网页不能发起HTTP协议请求(OpenSSL 生成密钥方法)

本文主要是介绍关于HTTPS网页不能发起HTTP协议请求(OpenSSL 生成密钥方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景描述

当 HTTPS 协议的网站中使用了 HTTP 协议的资源,Chrome 浏览器会发出警告

# Warning:
Mixed Content: The page at 'https://aaa' was loaded over HTTPS, but requested an insecure image 'http://bbb'. This content should also be served over HTTPS
# 混合内容:'https://aaa' 页面已通过 HTTPS 加载,但是请求了不安全的图片 'http://bbb'。此内容应该也通过 HTTPS 提供

注意:这是警告,页面还是会正常展示,但是 Ajax 请求地址必须是 HTTPS 协议。

模拟场景:搭建 HTTPS 站点

通过 http-server 或 serve 可以很容易开启一个 HTTP 协议的 web 站点,但要开启一个 HTTPS 协议的站点,还需要 SSL 密钥和证书。

OpenSSL 创建 SSL 密钥和证书工具

OpenSSL 工具可以创建 SSL 密钥和证书。

安装参考:windows安装OpenSSL

使用官方安装包,步骤很繁琐,所以推荐别人做的便捷版安装包:http://slproweb.com/products/Win32OpenSSL.html

在这里插入图片描述

我下载的是 Light 版本,只需一直下一步即可安装。

在这里插入图片描述

配置环境变量:

在这里插入图片描述

在这里插入图片描述

测试:

openssl version
# OpenSSL 1.1.1i  8 Dec 2020

生成证书和密钥

OpenSSL 官方手册

# 生成一个证书密钥对 key.pem 和 cert.pem,有效期约10年(准确地说是3650天)
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
# 会询问地区、机构、名称信息,可随意写

执行完成后,会在命令行目录下生成两个文件:

  • 证书 cert.pem
  • 密钥 key.pem

开启 HTTPS 协议的 web 服务

创建两个web站点目录:

├─ http	# 用于开启一个http协议的站点(端口3000),存放静态资源
│   ├─ data.json		# 存储测试数据,用于 Ajax 请求
│   └─ image.jpg		# 静态资源文件
└─ https # 用于开启一个https协议的站点(端口5000),用于加载http协议的资源├─ cert.pem			# SSL 证书├─ index.html		# 站点首页└─ key.pem			# SSL 密钥

http/data.json

{"foo": "bar"
}

https/index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Document</title></head><body><h1>加载 HTTP 协议的图片</h1><img src="http://localhost:3000/image.jpg" width="300" /><script src="https://cdn.jsdelivr.net/npm/axios@0.21.1/dist/axios.min.js"></script><script>// 发起 HTTP 协议的 Ajax 请求axios({method: 'GET',url: 'http://localhost:3000/data.json',})</script></body>
</html>

本例使用 serve 开启服务。

# 全局安装 serve
# npm i -g serve# 开启 https 协议的 web 服务,监听5000端口,指定ssl证书和密钥
serve ./https -l 5000 --ssl-cert ./https/cert.pem --ssl-key ./https/key.pem# 新打开一个命令行窗口
# 开启 http 协议的 web 服务,监听3000端口
serve ./http -l 3000# 使用 Chrome 浏览器访问 https://localhost:5000

在这里插入图片描述

原因

当连接到一个提供无效证书的网站时,较旧的浏览器会使用一个对话框询问用户是否继续,而较新的浏览器会在整个窗口中显示警告。

Google Chrome、Internet Explorer、Firefox等浏览器在网站含有由加密(HTTPS)和未加密(HTTP)内容组成的混合内容时,会发出警告。

所以这个报错和警告,是浏览器为了安全性对于 混合内容 做出的处理行为。

混合内容

一个含有 HTTP 明文内容的 HTTPS 页面 称为 混合内容(mixed content)。

反之,在 HTTP 页面包含 HTTPS 资源则没有问题。

混合内容的类型及风险

混合内容有两种类型:被动/显示型混合内容(mixed passive/display content)主动型混合内容(mixed active content)

两者的区别在于内容遭中间人攻击篡改后,其最坏情况下的威胁程度。

如果是被动型混合内容,威胁程度低(可能有错误内容、或者用户的 cookie 操作窃取)。

如果是主动型混合内容,威胁就可能会变成网络钓鱼、敏感资料泄漏、被重定向到恶意网站等等。

  • 被动型混合内容
    • 指在 HTTPS 页面中,但无法改变其他部分的 HTTP 内容。
    • 例如:
      • <img><audio><video>src属性)
      • <object>(如果 <object>发起 HTTP 请求)
  • 主动型混合内容
    • 指有权访问HTTPS 页面的 Document 对象的内容。
    • 这种内容可以改变 HTTPS 页面行为、窃取用户敏感信息、拦截 HTTP 协议的请求、篡改或恶意植入JS代码等。
    • 例如:
      • <script>(src 属性)
      • <link>href属性)
      • <iframe>(src 属性)
      • XMLHttpRequest (Ajax 请求)

浏览器策略

基于混合内容的风险,浏览器会在网站含有混合内容时,会在控制台显示警告或错误提示,并阻止主动型混合内容。

Chrome 81 后,被动型混合内容地址将自动由 http:// 升级为 https://,如果无法通过 https:// 加载,则Chrome 会阻止它们。

更多详细参考

  • 混合内容 - MDN
  • 混合内容 & https 升级攻略
  • What is mixed content?
  • Chrome 81 正式发布 !消灭混合内容最后一步~
  • HTTPS - wiki

这篇关于关于HTTPS网页不能发起HTTP协议请求(OpenSSL 生成密钥方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097967

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验