前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你还没有迁移到 HTTPS 吗?

你还没有迁移到 HTTPS 吗?

作者头像
somenzz
发布于 2020-11-25 02:26:09
发布于 2020-11-25 02:26:09
73800
代码可运行
举报
文章被收录于专栏:Python七号Python七号
运行总次数:0
代码可运行

阅读本文大概需要 3.6 分钟。

我看到很多项目开发的网站,都是以 HTTP 方式进行访问,不过都是在公司内部使用,就算不安全也影响不大。但是一旦接入互联网,那就是另一回事了,只要你的网站需要用户注册,传输卡号、密码等敏感信息,建议都迁移到 HTTPS,下面就来具体聊一聊迁移到 HTTPS 的必要性及相关迁移的方法。

1、HTTP 与 HTTPS

超文本传输协议即 HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了 WEB 浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP 协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

为了解决 HTTP 协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议 HTTPS,为了数据传输的安全,HTTPS 在 HTTP 的基础上加入了 SSL 协议,SSL 依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

虽然 HTTPS 比 HTTP 多了一个 S,但在具体的通信过程是比较复杂的,如下图所示:

具体有以下步骤:

1、客户使用 HTTPS 的 URL 访问 WEB 服务器,要求与 WEB 服务器建立 SSL 连接。

2、WEB 服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

3、客户端的浏览器与 WEB 服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级。

4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

5、WEB 服务器利用自己的私钥解密出会话密钥。

6、WEB 服务器利用会话密钥加密与客户端之间的通信。

2、不迁移能行吗?

如果网站仅做信息展示,不传输敏感信息,迁移不迁移都影响不大。但是大部分网站都需要用户留存,这就需要传输用户信息,用户信息基本都是敏感信息,需要加密传输,防止中间人截获,这就需要用到 HTTPS。

另外,如果你的网站不是 HTTPS,主流的浏览器都会提示用户,这是一个不安全的网站,给用户一定的访问心理压力,胆小的就不在访问你的网站了。谷歌等主流搜索引擎也会降低非 HTTP 网站的搜索结果排名,导致你的网站几乎搜索不到。

因此,迁移到 HTTPS 已经势在必行。

3、如何迁移

首先,要申请一个证书,至于为什么非要申请证书,请查看博客: https://blog.csdn.net/fangqun663775/article/details/55189107,这里不多说。

大型网站,出于形象考虑,可以向传统证书颁发机构申请证书,如 CA,DigiCert 等。中小型网站可以使用 Let’s Encrypt 这样的免费证书。 Let’s Encrypt 一直在推动证书的自动化部署,为此还实现了专门的 ACME 协议(RFC8555)。有很多的客户端软件可以完成申请、验证、下载、更新的一条龙操作,比如 Certbot、acme.sh 等等,都可以在 Let’s Encrypt 网站上找到,用法很简单,相关的文档也很详细,几分钟就能完成申请。

其次,配置 HTTPS,这里贴下 nginx 的配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
listen                443 ssl;

ssl_certificate       xxx_rsa.crt;  #rsa2048 cert
ssl_certificate_key   xxx_rsa.key;  #rsa2048 private key

ssl_certificate       xxx_ecc.crt;  #ecdsa cert
ssl_certificate_key   xxx_ecc.key;  #ecdsa private ke

这在 Nginx 上非常简单,只要在 listen 指令后面加上参数 ssl,再配上刚才的证书文件就可以实现最基本的 HTTPS。

为了提高 HTTPS 的安全系数和性能,你还可以强制 Nginx 只支持 TLS1.2 以上的协议,打开 Session Ticket 会话复用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssl_protocols               TLSv1.2 TLSv1.3;

ssl_session_timeout         5m;
ssl_session_tickets         on;
ssl_session_ticket_key      ticket.key;

密码套件的选择方面,建议是以服务器的套件优先。这样可以避免恶意客户端故意选择较弱的套件、降低安全等级,然后密码套件向 TLS1.3 看齐,只使用 ECDHE、AES 和 ChaCha20,支持 False Start。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssl_prefer_server_ciphers   on;


ssl_ciphers   ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE+AES128:!MD5:!SHA1;

更具体详细的优化配置还可以参考 nginx 官方文档。

配置完成后可以访问 https://www.ssllabs.com/ 来测试你的网站的安全程度,它会模拟多个客户端发起测试,给出一个综合的评分。

4、重定向问题

新的 HTTPS 站点配置好后,原来的 HTTP 站点还不能立即关闭,还有不少用户的书签中存的就是 HTTP 的链接。这就需要由 HTTP 自动跳转到 HTTPS 的技术,nginx 中的配置也非常简单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return 301 https://$host$request_uri;             # 永久重定向
rewrite ^  https://$host$request_uri permanent;   # 永久重定向

但这种方式有两个问题。一个是重定向增加了网络成本,多出了一次请求;另一个是存在安全隐患,重定向的响应可能会被中间人窜改,实现会话劫持,跳转到恶意网站。

不过有一种叫 HSTS 的技术可以解决这个问题(HTTP 严格传输安全,HTTP Strict Transport Security),HTTPS 服务器需要在发出的响应头里添加一个 Strict-Transport-Security 的字段,再设定一个有效期,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Strict-Transport-Security: max-age=15768000; includeSubDomains

这相当于告诉浏览器:我这个网站必须严格使用 HTTPS 协议,在半年之内(182.5 天)都不允许用 HTTP,你以后就自己做转换吧,不要再来麻烦我了。

有了 HSTS 的指示,以后浏览器再访问同样的域名的时候就会自动把 URI 里的 http 改成 https ,直接访问安全的 HTTPS 网站。这样中间人就失去了攻击的机会,而且对于客户端来说也免去了一次跳转,加快了连接速度。

写在最后

你的网站服务是基于 HTTPS 么?从 HTTP 到 HTTPS 是大势所趋,如果你们还在用 HTTP 提供服务,是时候进行迁移了。

(完)

专注于Python技术分享

欢迎订阅、在看、转发

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文读懂https中密钥交换协议的原理及流程
http与https区别:HTTP 由于是明文传输,所以在安全性上存在以下三个风险:
绿盟科技研究通讯
2022/06/06
8.7K0
一文读懂https中密钥交换协议的原理及流程
HTTP面试题 - HTTPS优化
本节介绍HTTPS优化是一个不小的话题,关于优化的讨论是在其他软硬件合理配置的前提下进行的,而关于HTTPS,我们常常会想它肯定要比HTTP要慢,实际上一个优化良好的HTTPS有时候要比HTTP要快很多。
阿东
2022/12/06
7100
HTTP面试题 - HTTPS优化
Linux下Nginx配置SSL以及301重定向
Nginx配置文件,位置/etc/nginx/sites-enabled下的default文件
no怕不了木
2023/10/26
1.1K0
HTTP与HTTPS的区别,详细介绍[通俗易懂]
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
全栈程序员站长
2022/07/01
5K0
HTTP与HTTPS的区别,详细介绍[通俗易懂]
详解 HTTP2.0 及 HTTPS 协议
众所周知, HTTP协议是没有安全加密的协议,因为使用明文传输,所以使用HTTP协议的站点很容易会被窃听、篡改,劫持;而伴随着互联网的发展,网络上承载了越来越多也越来越重要的数据,金融,商业,支付,机密数据等等,数据安全的重要性越来越凸显,越来越多的网站通过启用HTTPS来保障web数据传输的安全性。此外,HTTP2.0 作为新一代的WEB协议,以重量级的新特性带来更好,性能更高的web服务体验。本文基于运维视角在阐述解析HTTP2.0协议相比较HTTP1.1的优点的同时讲述HTTPS协议的原理,并结合实际业务场景作为案例,目的是可以通过本文掌握HTTP2.0及HTTPS协议,了解原理,具备定位排查问题,调优的能力。
玖柒的小窝
2021/11/28
4.4K0
详解 HTTP2.0 及 HTTPS 协议
HTTPS安全优化配置最佳实践指南简述
描述: 当下越来越多的网站管理员为企业站点或自己的站点进行了SSL/TLS配置, SSL/TLS 是一种简单易懂的技术,它很容易部署及运行,但要对其进行安全部署的情况下通常是不容易。
全栈工程师修炼指南
2022/09/29
2.9K0
HTTPS安全优化配置最佳实践指南简述
从零到一快速搭建个人博客网站(域名自动跳转www,二级域名使用)(二)
本篇文章是对上篇文章从零到一快速搭建个人博客网站(域名备案 + https免费证书)(一)的完善,比如域名自动跳转www、二级域名使用等。
yangwq
2021/02/05
3K0
HTTPS 基本原理和配置 - 2
这里有一些基本的原语(或叫做指令),你可以使用:ssl_certificate、ssl_certificate_key、ssl_protocols 和ssl_ciphers。
东风微鸣
2022/04/22
9000
HTTPS 基本原理和配置 - 2
HTTPS你不要这么慢了
选择支持AES-NI特性的CPU,该CPU在指令级别优化了AES算法,加速了数据的加解密过程。
shysh95
2021/11/25
1.4K0
HTTPS你不要这么慢了
HTTPS 基本原理和配置 - 1
〇、概述 作为概述,以下是本文要讲的内容。HTTPS 是什么? 每个人都可能从浏览器上认出 HTTPS,并对它有好感。然后再讲一遍基础知识,再详细讲一下协议版本,密码套件(Cipher Suites)
东风微鸣
2022/04/22
7640
HTTPS 基本原理和配置 - 1
016.Nginx HTTPS
超文本传输安全协议HTTPS(Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。
木二
2020/07/22
1K0
【RSA】HTTPS中SSL/TLS握手时RSA前后端加密流程
SSL/TLS层在网络模型的位置,它属于应用层协议。接管应用层的数据加解密,并通过网络层发送给对方。
天天Lotay
2023/03/16
1.5K0
【RSA】HTTPS中SSL/TLS握手时RSA前后端加密流程
HTTPS 握手会影响性能吗?废话,肯定会
由裸数据传输的 HTTP 协议转成加密数据传输的 HTTPS 协议,给应用数据套了个「保护伞」,提高安全性的同时也带来了性能消耗。
小林coding
2022/10/27
1.3K0
HTTPS 握手会影响性能吗?废话,肯定会
深入理解SSL协议:从理论到实践
这是一篇关于SSL协议的技术文章,有理论知识,但又兼具一定的实战性,文章的主要内容分享了SSL协议的核心概念、工作原理、常见的应用场景,以及就https这种实际应用场景,又着重分享具体的工作原理以及如何实现https访问网站。无论你是信息安全技术的初学者,还是专业人士,相信这篇文章都能给你带来一些帮助或启示。如果有失误之处,烦请在评论区指出,以便共同成长和进步。
大漠天涯
2024/03/28
3.2K0
如何在Linux服务器部署自己的网站?
1、下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz
执行上下文
2022/07/26
2.8K0
透视HTTPS建造固若金汤的城堡
为什么有 HTTPS?因为 HTTP 不安全! 现在的互联网已经不再是 “田园时代”,“黑暗森林” 已经到来。上网的记录会被轻易截获,网站是否真实也无法验证,黑客可以伪装成银行网站,盗取真实姓名、密码、银行卡等敏感信息,威胁人身安全和财产安全。
Bug开发工程师
2020/09/22
5220
透视HTTPS建造固若金汤的城堡
真正“搞”懂HTTPS协议17之TLS握手
  经过前两章的学习,我们知道了通信安全的定义以及TLS对其的实现~有了这些知识作为基础,我们现在可以正式的开始研究HTTPS和TLS协议了。嗯……现在才真正开始。
zaking
2023/02/16
2.9K0
真正“搞”懂HTTPS协议17之TLS握手
CentOS7中Nginx免费开启https
名词解释 HTTPS(超文本传输安全协议)是一种互联网通信协议,可保护用户计算机与网站之间传输的数据的完整性和机密性。用户在访问网站时都希望获得安全私密的在线体验。 Lets Encrypt 是由 Internet Security Research Group (ISRG) 开发的免费开放的证书颁发机构。Lets Encrypt 颁发的证书如今几乎得到所有浏览器的信任。 前提条件 你有一个指向你的公共服务器 IP 的域名。在本教程中,我们将使用rumenz.com. 你已经安装 Nginx 安装Certb
玖柒的小窝
2021/10/21
7080
CentOS7中Nginx免费开启https
传输安全HTTPS
为什么要有 HTTPS?简单的回答是:“因为 HTTP 不安全”。HTTP 怎么不安全呢?
真正的飞鱼
2023/03/13
5840
传输安全HTTPS
【HTTP】HTTPS TLS 1.2
在个人过去的读书笔记中已经介绍过一次,在这一篇文章中介绍了HTTP1.1的缺点,以及SSL、TLS的历史,之后介绍了有关SSL加密的主要加密方案:公开密钥加密 和 共享密钥加密,最后简单介绍了HTTPS的交互过程,但是书中的过程比较粗,这节我们讲细一点点。
阿东
2022/09/12
1.3K0
相关推荐
一文读懂https中密钥交换协议的原理及流程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验