前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >吃透HTTP原理,教你建立安全的HTTPS网站

吃透HTTP原理,教你建立安全的HTTPS网站

作者头像
博文视点Broadview
发布于 2023-05-06 12:01:04
发布于 2023-05-06 12:01:04
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

👆点击“博文视点Broadview”,获取更多书讯

1、讲解Python Web开发,必定离不开HTTP。有多少人知道HTTP的工作流程呢?

2、我们访问网站,网站服务器把内容反馈给我们。网站服务器是什么?

3、都说HTTP网站不安全,要变成HTTPS的。如何建立HTTPS网站?

本文就针对以上问题做简单解答,更详细的内容请阅读《Python高效开发实战――Django、Tornado、Flask、Twisted(第3版)》一书。

PART.

01

HTTP流程

HTTP是Web浏览器与Web服务器之间通信的标准协议,是Internet上能够可靠地交换文件的重要基础。HTTP的基本交互流程如图1所示。

图1 HTTP的基本交互流程

每个HTTP站点都有一个服务器进程监听着TCP的HTTP端口,HTTP端口默认为80,也可由服务器进程设置为其他端口。

当服务器发现有客户端建立连接并提交了一个 HTTP 请求(Request)后,就根据请求的内容执行相应的操作,并将结果返回给客户端(Response)。

通常客户在浏览器中发起一次网络访问的步骤如下。

(1)输入网址并按Enter键,比如访问http://mysite:8080/app/index.html。

(2)浏览器通过域名系统查询mysite的真实IP,比如212.34.98.20。

(3)向服务器212.34.98.20的8080端口发起TCP连接请求并建立连接。

(4)发送HTTP请求的内容,包括访问的地址/app/index.html、访问方式GET、浏览器本身的产品名等。

(5)服务器返回/app/index.html中的数据作为Response发送给客户端。如果请求的不是一个文件,则服务器需要执行相应的代码,动态生成且返回给客户端。

(6)浏览器接收到结果后关闭与服务器的TCP连接。

(7)浏览器将接收到的结果呈现在显示器上。

注意:域名解析本身不是HTTP的一部分,客户端应在向服务器建立TCP连接之前就通过DNS服务器完成域名解析工作。

以上是最典型的HTTP流程,当今的HTTP版本还允许客户端在一次HTTP请求完成后不关闭TCP连接,以便第2次发送HTTP请求时复用该连接,从而达到减少系统整体开销的目的,此技术在HTTP中叫作keep-alive。

PART.

02

基于HTTP的网站开发

经过几十年的发展,已经出现几个成熟的处理HTTP的知名Web服务器。

这些Web服务器可以解析(handle)HTTP,当Web服务器接收到一个HTTP请求时,会根据配置的内容返回一个静态HTML页面或者调用某些代码动态生成返回结果。

Web服务器把动态响应(dynamic response)产生的委托(delegate)给其他一些程序,例如Python代码、JSP(JavaServer Pages)脚本、Servlets、ASP(Active Server Pages)脚本等。

无论它们的目的如何,这些服务器端(server-side)的程序通常会产生一个HTTP响应让浏览器浏览。

由于目标操作系统、应用场景及商业目的的不同,当今主流的Web服务器各有特色,将它们的特性简单地概括如下。

  • Apache:是世界上用得最多的Web服务器,市场占有率达60%左右。由于其卓越的性能,Tomcat或JBoss等很多其他Web服务器使用Apache为自己提供HTTP接口服务。
  • Nginx:是一款轻量级、高性能的HTTP和反向代理服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
  • IIS:微软的Web服务器产品。由于Windows的影响,IIS是目前最流行的Web服务器产品之一,它的最大优势当然是对微软ASP.net及其周围产品的支持。
  • Tomcat:是一个开源服务器,是Java Servlet 2.2和JavaServer Pages 1.1技术的标准实现。
  • JBoss:是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB 3的规范。但JBoss的核心服务不包括支持Servlet、JSP的Web容器,一般与Tomcat或Jetty绑定使用。

当前的主流Web服务器都实现了主流语言的可调用接口标准,这些标准如下。

  • CGI:Common Gateway Interface,CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
  • ISAPI:Internet Server Application Program Interface,是微软提供的一套面向Web服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,例如提供了过滤器应用程序的接口。
  • WSGI:Web Server Gateway Interface,是一套专为Python语言制定的网络服务器标准接口。本书将要学习的Python Web框架均以WSGI为基础标准。

从客户端浏览器的角度来看,它的每次访问是通过HTTP访问Web服务器从而获得某种服务(下载文件、查看页面、订购商品等)的,但实际上Web服务器仅起到桥梁的作用,即将浏览器的HTTP请求解码,转换成服务器端程序能够识别的接口调用方式,然后将服务器端程序生成的返回封装成HTTP Response,并返回给浏览器。

服务器端程序、Web服务器、客户端之间的关系如图2所示。

图2  服务器端程序

最简单的服务器端程序可以是直接读取某文件或返回固定的网页内容;稍复杂一些的服务器端程序需要处理客户端通过HTTP、URL、HTML中传入的参数、动态执行逻辑代码、在数据库或缓存中读写数据等一系列操作,才能最终生成调用结果。

PART.

03

实战演练

建立安全的HTTPS网站

普通HTTP站点的协议与数据以明文方式在网络上传输,而HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的HTTP通道,即在HTTP下加入SSL层,通过SSL达到数据加密身份认证的功能。

目前几乎所有的银行、证券、公共交通的网站均以HTTPS方式搭建。

OpenSSL是一个强大的免费Socket层密码库,蕴含了主要的密码算法、常用的密钥和证书封装管理功能及SSL协议。目前大多数网站通过OpenSSL工具包搭建HTTPS站点,其步骤如下。

  • 在服务器中安装OpenSSL工具包。
  • 生成SSL密钥和证书。
  • 将证书配置到Web服务器。
  • 在客户端安装CA证书。

本节演示在Linux Ubuntu下OpenSSL的使用方法,以及Nginx在Linux下的证书配置方式。

Windows中OpenSSL的使用方式与Linux中的完全一致,读者可以自行尝试。

1.在服务器中安装OpenSSL工具包

通过如下两条命令安装OpenSSL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# sudo apt-get install openssl# sudo apt-get install libssl-dev

命令运行成功后,OpenSSL命令和配置文件将被安装到Linux系统目录中。

  • OpenSSL命令:/usr/bin/openssl。
  • 配置文件:/usr/lib/ssl/*。

2.生成SSL密钥和证书

通过如下步骤生成CA证书ca.crt、服务器密钥文件server.key和服务器证书server.crt:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 生成CA 密钥# openssl genrsa -out ca.key 2048
// 生成CA证书,days参数以天为单位设置证书的有效期。在本过程中会要求输入证书的所在地、公司名、站点名等# openssl req -x509 -new -nodes -key ca.key -days 365 -out ca.crt
// 生成服务器证书RSA的密钥对# openssl genrsa -out server.key 2048// 生成服务器端证书CSR,本过程中会要求输入证书所在地、公司名、站点名等# openssl req -new -key server.key -out server.csr// 生成服务器端证书 ca.crt# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365

上述命令生成服务器端证书时,必须在Common Nanme(CN)字段中如实输入站点的访问地址。即如果站点通过www.mysite.com访问,则必须定义CN=www.mysite.com;如果通过IP地址访问,则需设置CN为具体的IP地址。

3.配置Nginx HTTPS服务器

在站点配置文件/etc/nginx/sites-enabled/default中添加如下server段,可以定义一个基于HTTPS的接口,该接口的服务器端程序仍旧为uWSGI接口127.0.0.1:3011。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {listen       443;       # HTTPS服务端口server_name 0.0.0.0;      # 本机上的所有IP地址ssl                  on;ssl_certificate  /etc/nginx/ssl/server.crt;ssl_certificate_key  /etc/nginx/ssl/server.key;

location \ {uwsgi_pass http://127.0.0.1:3011;}}

其中需要注意的是参数ssl_certificate和ssl_certificate_key需要分别指定生成的服务器证书和服务器密钥的全路径文件名。

至此,我们已经可以使用浏览器访问服务器的443端口进行HTTPS加密通信了。

再也不用为如何学习Python迷茫了,《Python高效开发实战——Django、Tornado、Flask、Twisted(第3版)》一书本着“纯碎干货,实用至上”的原则,让我们成为真正的全栈开发人才。

▊《Python高效开发实战——Django、Tornado、Flask、Twisted(第3版)

刘长龙 著

  • 畅销书Python Web编程集大成之作,全面升级
  • Python 3.8、Django 3、Tornado 6、Flask 1.1.2、Twisted 20
  • 作者多年Python项目实践经验及代码编写技巧分享
  • 助你零基础完成网站搭建、数据库设计、前后端开发

本书分为3篇:上篇是Python基础,带领初学者实践Python开发环境,掌握基本语法,同时对网络协议、Web客户端技术、数据库建模等网络编程基础进行深入浅出的学习;中篇是Python框架,学习当前***的Python Web框架,即Django、Tornado、Flask和Twisted,达到对各种Python网络技术融会贯通的目的;下篇是Python框架实战,分别使用4种框架进行项目实践,利用其各自的特点开发适用于不同场景的网络程序。本书内容精练、重点突出、实例丰富、讲解通俗,是广大网络应用设计和开发人员不可多得的一本参考书。

(京东满100减50,快快扫码抢购吧!)

抽奖赠书

按以下方式与博文菌互动,即有机会获赠《Python高效开发实战——Django、Tornado、Flask、Twisted(第3版)》一书!

活动方式:关注下方“博文视点Broadview”公众号,在后台回复“python抽奖”参与活动,届时会在参与的小伙伴中抽取1名幸运鹅!

活动时间:截至9月8日(周三)开奖。

快快拉上你的小伙伴参与进来吧~~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连

 热文推荐  
地表最强:iOS安全黑宝书中文版来袭
Spring数据库事务典型错误用法剖析
当知识图谱遇上预训练语言模型
书单 | 近期重磅新书,带你牛,带你富!


▼点击阅读原文,查看本书详情~
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
使用Python实现智能食品消费市场分析的深度学习模型
这里推荐一篇实用的文章:《HBase中的数据一致性与故障恢复策略》,作者:【数字扫地僧】。
Echo_Wish
2024/12/07
1220
使用Python实现智能食品消费市场分析的深度学习模型
使用 Python 实现智能地震预警系统
地震是一种极具破坏性的自然灾害,提前预警能够有效减少人员伤亡和财产损失。随着深度学习技术的快速发展,我们可以利用这种技术来建立智能地震预警系统。本文将详细介绍如何使用 Python 和深度学习模型来实现智能地震预警系统。
Echo_Wish
2024/10/25
2650
使用 Python 实现智能地震预警系统
使用Python实现智能食品价格预测的深度学习模型
这里推荐一篇实用的文章:《大数据Flink进阶(五):Flink开发环境准备》,作者:【Lansonli】。
Echo_Wish
2024/11/21
1370
使用Python实现智能食品价格预测的深度学习模型
使用Python实现智能食品消费偏好分析的深度学习模型
这里推荐一篇实用的文章:《Next.js高级表单处理:整合Server Actions、FormData、react-hook-form和zod》,作者:【老码小张】。
Echo_Wish
2024/12/04
790
使用Python实现智能食品消费偏好分析的深度学习模型
使用Python实现智能食品消费者行为分析的深度学习模型
这里推荐一篇实用的文章:《Java 语法糖:让开发更丝滑的“幕后操作”》,作者:【繁依Fanyi】。
Echo_Wish
2024/12/01
1020
使用Python实现智能食品消费者行为分析的深度学习模型
使用Python实现智能食品消费趋势预测的深度学习模型
这里推荐一篇实用的文章:《动态网格图片展示中的自适应逻辑》,作者:【繁依Fanyi】。
Echo_Wish
2024/12/02
1370
使用Python实现智能食品消费趋势预测的深度学习模型
使用Python实现智能食品消费习惯预测的深度学习模型
本文介绍了将数据库数据同步到缓存的常用方法和重要性,旨在提升系统性能和减轻数据库负担。
Echo_Wish
2024/12/10
1290
使用Python实现智能食品消费习惯预测的深度学习模型
使用Python实现智能食品安全追溯系统的深度学习模型
这里推荐一篇实用的文章:《SQL注入全解析:从攻击到防范》,作者:【Towserliu】。
Echo_Wish
2024/11/25
1460
使用Python实现智能食品安全追溯系统的深度学习模型
使用Python实现智能食品供应链优化的深度学习模型
这里推荐一篇实用的文章:《小白如何从 0 到 1 掌握部署一个 Web 应用到 Kubernetes 中》,作者:【Lorin 洛林】。
Echo_Wish
2024/11/26
1230
使用Python实现智能食品供应链优化的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
这里推荐一篇实用的文章:《【重修Python】Map & Reduce》,作者:【花花Binki】。
Echo_Wish
2024/12/09
1230
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费模式预测的深度学习模型
这里推荐一篇实用的文章:《⚡️ 一个LED灯的自述:我是如何被5层代码点亮的》,作者:【程序员吾真本】。
Echo_Wish
2024/12/12
1020
使用Python实现智能食品消费模式预测的深度学习模型
使用Python实现智能食品物流管理的深度学习模型
这里推荐一篇实用的文章:《【Linux】常用指令详解一(mkdir -p、mkdir、cd +[目录名]、pwd)》,作者:【池央】。
Echo_Wish
2024/11/27
840
使用Python实现智能食品物流管理的深度学习模型
使用Python实现智能食品浪费管理的深度学习模型
这里推荐一篇实用的文章:《7B?13B?175B?解读大模型的参数》,作者:【半吊子全栈工匠】。
Echo_Wish
2024/11/22
1280
使用Python实现智能食品浪费管理的深度学习模型
使用Python实现智能食品库存管理的深度学习模型
这里推荐一篇实用的文章:《Spring Boot 应用的 GitLab CI/CD Docker 部署全过程》,作者:【種法龍】。
Echo_Wish
2024/11/28
1530
使用Python实现智能食品库存管理的深度学习模型
使用Python实现智能食品市场预测的深度学习模型
本文探讨了如何保证消息队列消费的幂等性。首先,通过“先判断后更新”和“加锁”两种方式尝试解决同一业务的多次执行问题,指出其在高并发场景下的不足。接着,介绍了使用数据库事务和消息表的方式,通过设置状态字段和事务机制保证业务请求的幂等性。此外,还提出了结合消息队列和延迟队列的方案,通过不断重试和延时处理确保请求最终成功执行。最后,强调了添加重试策略的重要性,以防止请求因宕机或代码问题陷入死循环,全面保障消息队列的消费幂等性。
Echo_Wish
2024/11/18
1420
使用Python实现智能食品市场预测的深度学习模型
使用Python实现智能食品消费需求预测的深度学习模型
这里推荐一篇实用的文章:《Prompt提示工程上手指南(六):AI避免"幻觉”(Hallucination)策略下的Prompt》,作者:【fanstuck】。
Echo_Wish
2024/12/06
1380
使用Python实现智能食品消费需求预测的深度学习模型
使用Python实现智能食品销售预测的深度学习模型
这里推荐一篇实用的文章:《一文理解Python的全局解释器锁(GIL)》,作者:【Lorin 洛林】。
Echo_Wish
2024/11/29
1610
使用Python实现智能食品销售预测的深度学习模型
使用Python实现智能食品加工优化的深度学习模型
这里推荐一篇实用的文章:《SpringBoot实战 - 创建自己的auto-configuration》,作者:【JavaEdge】。
Echo_Wish
2024/11/13
1490
使用Python实现智能食品加工优化的深度学习模型
使用Python实现智能食品广告投放优化的深度学习模型
这里推荐一篇实用的文章:《『学习笔记』WebLogic 日志分析与故障排查指南》,作者:【数字扫地僧】。
Echo_Wish
2024/11/19
1530
使用Python实现智能食品广告投放优化的深度学习模型
深度学习在日志分析中的应用:智能运维的新前沿
在现代信息技术环境中,系统日志记录了系统运行的详细信息,是保障系统稳定运行的重要数据来源。通过对日志数据的分析,可以及时发现系统异常和潜在问题,提升运维效率和系统稳定性。随着深度学习技术的迅速发展,深度学习在日志分析中的应用也展现出了强大的潜力和广阔的前景。本文将详细介绍深度学习在日志分析中的应用,并通过具体代码示例展示其实现过程。
Echo_Wish
2024/12/18
2640
深度学习在日志分析中的应用:智能运维的新前沿
推荐阅读
相关推荐
使用Python实现智能食品消费市场分析的深度学习模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档