搭建HTTPS网站

9.0.1 HTTPS

HTTPS安全概述

使用http网站时,可能会遭遇劫持和篡改,那么是很不安全的,如果用https协议,数据再传输时都是加密的,黑客无法窃取或篡改数据报文,也避免网站数据泄露。

Openssl

Netscape网景公司创建的第一代浏览器,且为了提高浏览器访问网站的安全性,在TCP/IP层的传输层与应用层之间创建了一个SSL(Secure Sockets Layer),安全套接字层。

SSL是一个库,为了让应用层讲数据传递给传输层之前,调用ssl层的功能,对数据进行加密

但是SSL(v2 v3)是网景公司定义的,协议不够开放,因此TSL(传输层安全协议)出现了,流行的版本是(TSL v1== SSL v3)。

  1. OSI七层模型中,应用层是HTTP协议,在应用层之下就是表示层,也就是TLS协议发挥作用的一层。
  2. TLS协议通过(握手、交换秘钥、告警、加密)等方式做到数据的安全加密。

那么在数据加密解密的过程中,如何确定,信任对方身份呢?这时候必须有一个权威的机构来验证双方的身份。

这个权威机构就是CA机构。

  1. CA中心又称CA机构,即证书授权中心(Certificate Authority ),或称证书授权机构,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

那么CA机构如何办法证书呢?流程如下

1.我们首先要申请证书,然后进行登记(我是谁,我是什么组织,我想干啥),发给登记机构后,通过CSR发给CA,当CA中心通过后,CA中心生成一对公钥私钥公钥会在CA证书链中保存,公钥和私钥证书发给订阅人后,将其部署在WEB服务器(nginx)上。

2.当浏览器访问https网站时,它会请求我们的证书

3.Nginx这样的web服务器会发送公钥证书给浏览器

4.浏览器进行证书验证,是否合法有效

5.CA机构会将过期的证书放在CRL服务器。由于CRL服务验证效率低下,CA还推出了OCSP在线验证证书是否过期。

6.Nginx有一个OCSP的开关,开启后,Nginx主动上OCSP查询证书是否有效。

  1. 证书吊销列表(Certificate Revocation ListCRL)是在网络中使用公钥结构存取服务器的两种常用方法中的一个,另外一个,比较新的,在将来要代替CRL的方法,是在线证书状态查询协议(Online Certificate Status ProtocolOCSP)。  
  2. CRL就像它的名字描述的:一个用户数字验证状态的列表。此列表列出废除的验证以及废除的原因,证书的发放日期和发放的实体,同样包含在列表中。另外,梅尔过列表包含一个下次发布列表的可能时间,当一个用户常数进入一台服务器,服务器将使用CRL列表来决定是否允许或拒绝其进入。  
  3. CRL的缺点就是必须不停的下载和更新列表,以保持列表是最新的,OCSP克服了这种限制,它会实时检测证书状态。

HTTPS证书

  1. Https不支持续费,证书到期需重新申请新并进行替换.
  2. Https不支持三级域名解析, test.m.oldboy.com
  3. Https显示绿色, 说明整个网站的url都是https的。
  4. Https显示黄色, 因为网站代码中包含http的不安全连接。
  5. Https显示红色, 要么证书是假的,要么证书过期。

Nginx搭建自建HTTPS

1.服务器nginx环境准备,确保安装了opensll,且nginx支持ssl模块

创建存放证书的目录

  1. 提示:编译安装nginx时候,
  2. yum install openssl openssl-devel //确保有ssl模块支持
  3. ./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module //编译时候开启nginx支持ssl模块

检查nginx模块状态

[root@yugo ~]# nginx  -V
Tengine version: Tengine/2.2.3 (nginx/1.8.1)
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/opt/tengine223/
nginx: loaded modules:
...
nginx:     ngx_http_ssl_module (static)  //此服务器nginx 已有ssl模块

 

执行命令

  1. //执行这里的命令
  2. mkdir -p /opt/tengine223/ssl_key
  3. cd /opt/tengine223/ssl_key/

2.使用openssl命令充当CA机构,颁发自建证书,学习使用,生成server.key

[root@yugo ssl_key]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
................................+++
.........+++
e is 65537 (0x10001)
//我这里密码都是1234
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

 

3.生成自签证书server.crt,同时去掉私钥的密码

[root@yugo ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
...........................+++
......................................................................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN            //国家名称(2个字母代码
State or Province Name (full name) []:BJ        //省/市/自治区名称(全名)
Locality Name (eg, city) [Default City]:BJ        //地点名称(例如,城市)[默认城市]
Organization Name (eg, company) [Default Company Ltd]:EDU    //组织名称(如公司)【默认公司】
Organizational Unit Name (eg, section) []:PY    //组织单位名称(例如,部门)[]
Common Name (eg, your name or your server's hostname) []:YU    //公用名(您的名称或服务器主机名)
Email Address []:yc_uuu@163.com                    //电子邮件地址
//参数解释
# req  -->用于创建新的证书
# new  -->表示创建的是新证书
# x509 -->表示定义证书的格式为标准格式
# key  -->表示调用的私钥文件信息
# out  -->表示输出证书文件信息
# days -->表示证书的有效期

 

4.配置nginx支持https

    server {
        listen       443 ssl;
        server_name  pythonav.cn;
        ssl on;
        #证书文件
        ssl_certificate      /opt/tengine223/ssl_key/server.crt;
        #私钥文件
        ssl_certificate_key  /opt/tengine223/ssl_key/server.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            root    /opt/_book;
            index  index.html index.htm;
        }
    }
}

 

5.此时重启nginx,加载https服务

  1. nginx -s reload

6.浏览器访问https://pythonav.cn/由于这个证书我们自己签发的,浏览器肯定不认同,因此是红色告警。

使用腾讯云搭建https网站

腾讯云SSL是一个新的证书颁发机构(CA),它提供了一种获取和安装免费TLS /SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。您可以在腾讯云Web页面轻松获取免费的SSL证书,无论您选择哪种Web服务器软件。

1.获取ssl证书,要先注册腾讯云服务器

新用户请单击腾讯云官网顶部的【注册】按钮,进入注册页面。

https://console.qcloud.com/

2.注册完成后可以进入ssl证书控制台申请证书
https://console.qcloud.com/ssl

第二步,填写申请域名 www.pythonav.cn

第三步,自动dns解析,确保你的服务器域名已经备案

第四步,证书确认通过后,会提供证书下载地址

第五步,下载腾讯颁发的证书,会得到一个压缩文件www.pythonav.cn.zip

  1. [root@yugo txssl]# ls
  2. Apache IIS Nginx Tomcat www.pythonav.cn.csr www.pythonav.cn.zip

第六步,解压缩证书,我们用的是Nginx的配置

第七步,配置nginx,结合腾讯云颁发的证书,这个是受信任的

    server {
        listen       443 ssl;
        server_name  pythonav.cn;
        ssl on;
        #证书文件
        ssl_certificate      /opt/tengine223/txssl/Nginx/1_www.pythonav.cn_bundle.crt;
        #私钥文件
        ssl_certificate_key  /opt/tengine223/txssl/Nginx/2_www.pythonav.cn.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            root    /opt/_book;
            index  index.html index.htm;
        }
    }

 

第八步,确保服务的防火墙打开443端口,重启nginx

  1. nginx -s reload

第九步,访问服务器

 

9.0 HTTP介绍

Web服务基础知识

  1. 我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等。
  2. 当我们输入www.oldboyedu.com/时候,很快就能看到老男孩教育的官网了,这一切看起来很平淡无奇,背后又是什么道理呢?
  3. 普通人可以不知道,但是咱们作为it开发人员,必须得掌握清楚背后的技术。

下面超哥为你揭晓用户访问网站的基本流程

  1. 老男孩教育某python总监,讲了一天课感觉很累,下了班躺床上打开他的macbook pro,双击浏览器,输入www.pythonav.com网址后,系统首先会查找本地的DNS缓存以及hosts文件信息,确定是否存在www.pythonav.com域名对应的ip解析记录,如果有就直接获取ip进行访问服务器,第一次请求时,dns缓存是没有解析记录的,hosts文件多数是开发临时测试用
  2. 如果本地dns缓存和hosts文件都没有域名解析记录,系统就会把某python总监访问的网址解析请求发送给客户端设置的DNS服务器去解析,也叫做Local DNS,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回给客户端IP地址,如果没有LDNS就会继续请求其他的DNS服务器
  3. LDNS继续从DNS系统的”.”(根)开始请求www.pythonav.com域名的解析,并且根据每个层级的DNS服务器系统进行系列的查找,最终在DNS网络上找到www.pythonav.com域名对应的授权DNS服务器。这个授权DNS服务器就是企业(个人)购买域名时用于管理域名解析的服务器,服务器上有对应的域名(IP)解析。
  4. 此时授权的DNS服务器就会把www.pythonav.com对应的IP解析记录,例如(1.1.1.1)发送给LDNS
  5. 此时LDNS会把解析记录发给浏览器,并且缓存域名和IP的解析记录,便于下一次更快的返回请求
  6. 浏览器获得ip,请求对应的服务器,网站服务器接收到客户端的请求开始响应处理,将内容返回给浏览器,然后某python总监拿出了一盒清风牌抽纸。。。。

图解dns

1.DNS域名解析,获取域名对应服务器IP地址

  1. windows查看dns本地缓存
  2. c:\>ipconfig /displaydns 显示缓存内容
  3. c:\>ipconfig /flushdns 清除DNS缓存
  4. c:\Windows\system32\drivers\etc\hosts hosts解析文件

2.根据ip地址访问网站服务,TCP三次握手

3.用户向网站服务请求信息,HTTP请求报文

4.网站对用户请求进行相应,HTTP相应过程

5.断开网络链接,TCP四次挥手

HTTP协议

  1. Http协议,全称是HyperText Tansfer Protocol,中文叫超文本传输协议,是互联网最常见的协议。Http最重要的是www(World Wide Web)服务,也叫web服务器,中文叫“万维网”。
  2. web服务端口默认是80,另外一个加密的www服务应用https默认端口是443,主要用于支付,网银相关业务

1.什么是超文本?

包含有超链接(Link)和各种多媒体元素标记的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。

html文件->包含各种各样的元素(URL链接)->形成web page简称web页面。

版本

  1. http协议诞生以来有若干个版本,主要是http/1.0 http/1.1
  2. http/1.0规定浏览器和服务器只能保持短暂的连接,浏览器的每次请求都需要和服务器建立一个TCP连接,服务器完成请求后即断开TCP连接,服务器不跟踪每个链接,也不记录请求
  3. http/1.1是对HTTP的缺陷进行重点修复,从可扩展性,缓存,带宽优化,持久连接,host头,错误通知等访问改进。
  4. http/1.1支持长连接,增加了更多的请求头和响应头信息,例如配置请求头的Connection的值为keep-alive,表示请求结果返回后保持连接

Http请求方法

  1. HTTP通信中,每个请求报文都包含一个方法,以告诉web服务器端需要执行哪些操作,这些动作被称为HTTP的请求方法
  1. 1 GET 请求指定的页面信息,并返回实体主体。
  2. 2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  3. 3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  4. 4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
  5. 5 DELETE 请求服务器删除指定的页面。
  6. 6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  7. 7 OPTIONS 允许客户端查看服务器的性能。
  8. 8 TRACE 回显服务器收到的请求,主要用于测试或诊断。

HTTP状态码

  1. HTTp状态码表示web服务器响应http请求状态的数字代码
  2. 常见状态码以及作用是
  3. 1** 信息,服务器收到请求,需要请求者继续执行操作
  4. 2** 成功,操作被成功接收并处理
  5. 3** 重定向,需要进一步的操作以完成请求
  6. 4** 客户端错误,请求包含语法错误或无法完成请求
  7. 5** 服务器错误,服务器在处理请求的过程中发生了错误

HTTP状态码的命令查看

  1. curl -I www.oldboyedu.com
  2. Server: OES
  3. Date: Sun, 12 Aug 2018 04:18:24 GMT
  4. Content-Type: text/html
  5. Content-Length: 152
  6. Connection: keep-alive
  7. Location: https://www.oldboyedu.com/

HTTP报文

什么是HTTP请求报文

  1. HTTP请求由请求行,请求头部,空行,请求报文主体几个部分组成

HTTP报文:它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。

  1. 请求报文的格式:
  2. 起始行: <method> <request-URL> <version>
  3. 头部: <headers>
  4. 主体: <entity-body>

GET请求报文示例:

  1. GET /books/?sex=man&name=Professional HTTP/1.1
  2. Host: www.example.com  主机名
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1  客户端类型
  4. Accept-Encoding:gzip,deflate    支持压缩
  5. Accept-Language:zh-cn  支持语言类型
  6. Connection: Keep-Alive  长链接

请求行

  1. 请求报文第一行,表示客户端想要什么
  2. 由请求方法 url 协议版本   组成

请求头部

  1. 请求头由
  2. 关键字 : 组成
  3. 通过客户端把请求相关信息告诉服务器

空行

  1. 请求头信息之后是一个空行,发送回车和换行符,通知web服务器以下没有请求头信息了

请求报文主体

  1. POST / HTTP/1.1
  2. Host: www.example.com
  3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
  4. Gecko/20050225 Firefox/1.0.1
  5. Content-Type: application/x-www-form-urlencoded
  6. Content-Length: 40
  7. Connection: Keep-Alive
  8. sex=man&name=Professional
  1. 请求体中包含了要发送给web服务器的数据信息,请问报文主体不用于get方法,而是用于post方法。
  2. post方法适用于客户端填写表单的场合。

HTTP响应报文

HTTP 响应与 HTTP 请求相似,HTTP响应也由3个部分构成,分别是:

  • 状态行
  • 响应头(Response Header)
  • 响应正文

状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。

  1. 状态行,用来说明服务器响应客户端的状况,一般分为协议版本号,数字状态码,状态情况
  1. 响应头部
  2. 常见响应头信息
  3. Connection: Keep-Alive
  4. Content-Encoding: gzip
  5. Content-Type: text/html;charset=utf-8
  6. Date: Mon, 13 Aug 2018 06:06:54 GMT
  7. Expires: Mon, 13 Aug 2018 06:06:54 GMT
  1. 空白行
  2. 通知客户端空行以下没有头部信息了
  3. 响应报文主体
  4. 主要包含了返回给客户端的数据,可以是文本,二进制(图片,视频)

HTTP响应例子

  1. HTTP/1.1 200 OK
  2. Server:Apache Tomcat/5.0.12
  3. Date:Mon,6Oct2003 13:23:42 GMT
  4. Content-Length:112
  5. <html>...

URl介绍

url中文叫“统一资源标识符”,是一个用于标识某一互联网资源名称的字符串,在世界范围内标识定位某一个唯一信息资源。

那什么是URL,URL简称统一资源定位符。那URL的组成部分是由协议, 域名:端口, 路径和文件名

例如

  1. #访问一张郭达的照片
  2. http://www.pythonav.cn/man.jpg

url主要用在各种www客户端和服务器程序上,url可以用一种统一的格式来描述各种信息资源,包括文件,服务器地址和目录等

url组成

  1. 协议
  2. 主机ip或域名
  3. 主机资源具体地址

第一部分用”://“隔开,第二部分用”/“符号隔开

静态网页资源

在网页设计中,纯HTMl格式的网页(包含图片,视频,JS,CSS等样式)通常被称作“静态网页”。

静态网页是相对于动态网页而言的,是指没有后台数据库,不包含程序,不可交互的网页。

  1. 静态网页的特点
  2. 开发人员写了什么,显示就是什么,一旦编写完成,就不会有任何改变。静态网页一般适用于更新较少的展示型网页,例如(酒水,家具,水果等宣传页),是很多中小网站的展示方式。

静态网页资源对应文件扩展名为

  • 纯文本文件,如.htm .html .xml .js .css
  • 图片或数据文档,如 .jpg .gif .bmp .txt .ppt
  • 视频类文件 .mp4 .avi .flv 等

静态网页重要特性

  • 每个页面有一个固定的url地址,url地址不含有问号”?”或”&”等符号
  • 网页一经发布到服务器,网页内容是保存在服务器文件系统上的,每个网页都是独立的一个文件
  • 网页内容固定不变,容易被搜索引擎收录(优点)
  • 网页没有数据库支撑,在网站制作和维护上工作量很大(缺点)
  • 网页的交互性很差,缺少程序的功能实现(缺点)
  • 客户端解析网址时,由于不需要读取数据库,因此服务器端可以接受更高的并发访问。请求到来时,直接从磁盘上返回数据。(优点)

举例(吃火锅,现成的蔬菜)

有关高并发架构思想

  1. 在高并发,高访问量的场景下做架构优化时,比较关键的就是把动态网页转化成静态网页,而不是直接请求数据库和动态服务器,并且可以吧静态内容推到缓存中,这样就提升用户体验,节约服务器压力成本。

动态网页资源

  1. 动态网页是和静态网页相对而言的,动态网页的url后缀一般是.asp .aspx .php .js .cgi
  2. 并且动态网页都有标志性的符号"? &",后端都有数据库的支持。

动态网页地址

  1. 添加新随笔
  2. https://i.cnblogs.com/EditPosts.aspx?opt=1

动态网页资源特点

  1. 网页以数据库技术为支撑,大大降低网站维护的工作量
  2. 动态网页技术的网站可以实现更多的功能,如用户注册,用户登录,投票,用户管理,博客管理等
  3. 动态网页不是独立存在服务器上的网页文件,用户请求动态程序时,服务器解析程序并且可能读取数据库返回一个完整的网页内容
  4. 搜索引擎(爬虫)一般不会抓取网址中的“?”后面的内容,因此企业都会做伪静态技术页面

举例(饭店炒菜,现做)

网站流量术语

网站统计一般以数值较大的IP,PV统计,比较好看

IP

  1. IPInternet Protocol,这里是指独立ip数,不同的ip地址的计算机访问网站时被计算的总次数。
  2. 独立ip数是网站流量的一个重要指标。
  3. 一般相同ip地址的客户端访问网站页面一天内只会被计算一次。
  4. 这里的ip指的是是固定的公网ip
  5. 比如咱们整个班级的学生,都是通过路由器NAT出口的,公网捕捉到的IP地址都来自于同一个。

PV

  1. pvPage View)即是页面浏览量,不管客户端是不是相同,也不管ip是否相同,用户只要访问网站页面就会被计算PV,一次计算一个PV
  2. pv的度量方法就是客户端从浏览器发出一个web请求(request),服务器接收请求返回一个页面给客户端,这样就产生一个pv
  3. 页面刷新一下,就是一个PV

举例

  1. 例如武佩奇去访问百合网想找一个知心朋友,你觉得他能产生多少PV
  2. 答案可能是十几个到几十个。一个用户的访问PV量和网站的业务成正比的,武佩奇可能点击18岁左右的女性,28岁左右的女性,也可能点击18岁的小伙子。。。。因此他访问的页面会很多,自然pv也会增多

UV

  1. UVunique visitor,同一个客户端(pc或移动端)访问网站被计算为一个访客。
  2. 一天内相同的客户端访问同一个网站只计一次uvuv是以cookie等技术为统计依据,实际统计存在误差。
  3. 一台计算机可能有多人使用,因此uv也不是最准确的。

并发数

  1. 并发数指系统同时能处理的请求数量,也反应了系统的负载能力

响应时间

  1. 响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间。

QPS

  1. Query Per Second
  2. 每秒查询数
  3. 服务器在一秒内处理了多少个请求,显然数字越大代表服务器的负载越高,处理能力越强。

Http相关术语pv、ip、uv 假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2次(发2次请求), 请问对应的pv,uv,ip分别是多少

PV:页面浏览量, 400 100人 2个设备 访问2次 =400数
uv:独立的客户, 200 100人2个设备=200数
ip:独立IP, 1个 同一个NAT出口,独立IP为1

 

posted @ 2022-08-07 12:49  silencio。  阅读(1972)  评论(0编辑  收藏  举报