当前位置:首页 > 网站技术 > 前端技术 > 正文内容

https协议知识汇总

小彬2020-08-14前端技术75

1、https协议

超文本传输安全协议。也称HTTP over TLS,HTTP over SSL, HTTP over Secure

通过计算机网络进行安全通信的传输协议

OSI模型中的应用层协议

隶属于TCP/IP协议族

HTTP协议的安全版本

HTTP协议负责通信与传输+安全传输协议保证安全

默认端口443

提供网站服务器的安全认证

保护交换数据的隐私和安全性


OSI模型 https://baike.baidu.com/item/OSI%E6%A8%A1%E5%9E%8B/10119902?fr=aladdin

7应用层

6表达层

5会话层

4传输层

3网络层

2数据链路层

1物理层


2、HTTPS与HTTP的优势和劣势


HTTPS协议与HTTP协议的相同点

◆同属于TCP/IP协议族的应用层协议

具有TCP协议面向连接、可靠传输、流量控制等特点

◆协议是无状态的

需要通过cookie或session等会话机制来保存状态

◆请求与相应内容的格式相同

请求行+请求头+空行+请求数据 &状态行+响应头+空行+响应数据 

◆广泛用于互联网上的数据传输

支持B/S与C/S架构的应用


HTTPS协议与HTTP协议的不同点

◆协议头和默认端口不同

https://www.bin012.com[:443] vs http://www.bin012.com[:80]

◆HTTPS协议需要使用安全证书

安全证书由证书颁发机构(CA证书)签发

◆协议栈不用

http->tcp->ip->...

https->ssl/tls->tcp->ip>...

HTTPS协议多了安全传输协议层

◆资源消耗不用

HTTPS 计算量大 vs HTTP计算量少

◆内容传输方式不同

HTTPS加密传输 vs HTTP明文传输

◆应用场景不同

HTTPS普通+特殊(安全、私密等)应用场景 vs HTTP 普通应用场景


HTTPS协议的优势

◆数据完整性  内容传输经过完整性校验

◆数据私密性  内容经过对称加密,加解密钥具有唯一性

◆身份认证  第三方无法伪造服务端/客户端身份

◆实用性强  提供安全、隐私的信息传输,应用场景丰富


HTTPS协议的劣势

◆成本提高 增加证书购置成本、提高应用配置部署成本

◆性能损耗 增加延时、消耗更多系统资源



3、HTTPS协议发展历史

◆严格地讲,HTTPS并不是一个单独的协议,而是对工作在一加密连接(SSL或TLS)之上的常规HTTP协议的称呼。

◆HTTPS协议的发展历史可以从HTTP协议与安全传输协议的历史两个方面阐述。


HTTP协议发展历史

HTTP/0.9

◆1991 年发布

◆主要规定了通信格式,不涉及数据包传输

◆客户端只有GET请求方法

◆服务端只能返回HTML格式的字符串内容


HTTP/1.0

◆1996年发布

◆引入了POST和HEAD请求方法

◆添加请求与响应中的头信息( HTTP header )

◆其他的新增功能还包括状态码、多字符集支持、多部分发送、权限、缓存、内容编码等


HTTP/1.1

◆1997年发布

◆增加Host请求头字段,支持虚拟主机

◆引入了PUT、PATCH、 OPTIONS 和DELETE请求方法

◆其他的新增功能还包括持久连接、管道机制、分块传输等


HTTP/2

◆2015年发布

◆完全的二进制协议

◆引入了多工、头信息压缩、服务器推送等新功能


安全传输价议发展历史

SSL 1.0

◆1994年由Netscape(网景公司)公司设计

◆最早应用于Navigator浏览器

◆由于存在严重安全漏洞,从未正式发布


SSL 2.0

◆1995年由Netscape公司设计并发布

◆存在数个安全漏洞,容易遭受中间人攻击

◆大部分浏览器均不再支持


SSL 3.0

◆1996年由Netscape公司完全重新设计并发布

◆相较前一版本安全性大大提高

◆2014 年Google发现其设计缺陷,随后主流浏览器逐渐放弃支持使用SSL 3.0协议


TLS 1.0

◆1999年IETF将SSL标准化(RFC2246),在SSL3.0的基础上设计并发布了TLS 1.0

◆从技术上讲,TLS 1.0和SSL 3.0的差异非常小

◆TLS 1.0可以降级到SSL 3.0,因此削弱了其安全性


TLS 1.1

◆IETF于2006年发布TLS1.1(RFC4346)

◆是TLS 1.0的更新版本

◆提高了安全性,添加对CBC攻击的保护

◆支持IANA 登记的参数


TLS 1.2

◆IETF于2008年发布TLS1.2(RFC5246)

◆基于TLS 1.1规范设计

◆使用了更加高效和安全的加密算法



更多

◆TLS所有版本在2011年3月发布的RFC 6176中删除了对SSL的兼容

◆TLS1.3 于2018年3月份成为建议标准的互联网草案



4、传输层安全协议

◆位于可靠的面向连接的运输层协议(TCP)和应用层协议(HTTP)之间

◆通过互相认证确保不可冒充性,通过数字签名确保信息完整性、通过加密确保私密性,以实现客户端额服务器之间的安全通讯

◆独立于应用协议,高层协议可以透明地分布在传输层安全协议之上

(此处的透明指的是应用层和运输层不需要多余的操作,和没有ssl协议层一样)



传输层安全协议主要有两种

◆SSL ( Secure Sockets Layer )安全套接层

◆TLS ( Transport Layer Security )传输层安全协议


SSL安全套接层

◆SSL记录协议( SSL Record Protocol )

建立在可靠的传输协议(如TCP )之上,为高层协议(如HTTP)提供数据封装、加/解密、( 解)压缩、签名及完整性校验等基本功能的支持。

◆SSL 握手协议( SSL Handshake Protocol )

建立在SSL记录协议之上,用于在实际的数据传输开始之前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

https协议知识汇总


TLS传输层安全协议

◆TLS 记录协议(TLS Record Protocol )

建立在可靠的传输协议(如TCP )之上,对数据进行加解密、(解)压缩签名、封装及完整性校验等操作。

◆TLS握手协议( TLS Handshake Protocol )

建立在TLS记录协议之上,使用公共密钥和证书处理用户认证,并协商算法和加密实际数据传输的密钥。

https协议知识汇总

TLS协议与SSL协议的比较

◆TLS协议是基于SSL协议发展而来,从技术上讲,TLS 1.0与SSL 3.0差异非常小

◆TLS协议使用了更安全的HMAC算法,更强大的伪随机功能,更严密的警报信息

◆TLS 协议比SSL协议更加复杂和安全,协议的规范更精确和完善


TLS/SSL安全传输通道

◆认证用户和服务器,确保数据发送到正确的客户机和服务器

◆加密数据,以防止数据中途被窃取

◆维护数据的完整性,确保数据在传输过程中不被篡改


5、HTTPS中的安全传输通道

HTTPS在通信双方建立了一个安全传输通道

安全传输通道保证了信息传输的安全性和完整性



攻击---窃听

https协议知识汇总

HTTPS如何防范窃听风险

将传输内容利用对称加密的方式加密

只有通信双方才能对传输内容进行加解密,窃听者由于没有密钥,无法获知传输内容



攻击---篡改

https协议知识汇总

HTTPS如何防范篡改风险

对传输的内容利用MAC算法对数据进行签名和验证

假如传输内容被篡改,服务器计算所得的签名将会与客户端发送的签名不同,从而识别出消息是不完整的


攻击--中间人攻击

https协议知识汇总

HTTPS协议如何防范中间人攻击

建立连接的时候利用数字证书进行通信双方身份的认证

中间人不能提供足够有效的认证信息(数字证书),因而无法通过认证




6、HTTPS协议如何保证信息的安全传输

HTTPS如何保证信息的安全传输

◆利用数字证书对通信双方进行身份认证

要求客户端/服务器提供有效的数字证书等信息进行认证,可以防止通信双方被冒充

◆利用非对称加密方式传输会话密钥

保证了会话密钥的私密传输,从而保证了双方的通信安全

◆利用对称加密方式传输通信内容

只有通信双方才能利用会话密钥对通信内容进行加解密,第三方无法获取

◆利用MAC算法对传输内容进行签名和校验

未通过校验的数据包将被丢弃,保证了通信内容的正确性和完整性



7、HTTPS协议的四次握手

https协议知识汇总


1第一次握手

◆客户端发起连接请求 Client Hello

  支持的安全传输协议-SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2

  支持的加密套件-身份认证+密钥协商+信息加密+完整性校验

  支持的压缩算法-用于后续的信息压缩

  随机数C-用于后续密钥的生成

  扩展字段-协议或算法相关的辅助信息


2第二次握手

◆服务器返回协商的结果Server Hello

  选择使用的安全传输协议、加密套件和压缩算法

  随机数S-用于后续密钥的生成

◆服务器配置的证书链Certificate

◆服务器发送消息结束标志Server Hello Done

◆根据选择加密套件的不同,可能还会有其他的内容(server hello bone 之前)


3客户端证书校验

◆客户端对服务器返回的证书进行校验

  证书链是否可信-能够被可信任的CA根证书验证合法性

  证书是否吊销

  证书是否在有效期内

  证书域名与网站域名是否匹配


4第三次握手

◆客户端生成第三个随机数Pre-master ,并用证书公钥加密发送给服务器Client Key Exchange

  客户端将通过随机数C、随机数S和Pre-master计算出本次会话的密钥Key = fuc(C, S, Pre-master)

◆客户端向服务 器确认加密方式Change Cipher Spec

◆客户端计算前面所有消息的摘要值并加密发送给服务器Encrypted Handshake Message


5第四次握手

◆服务器先通过私钥解密Client Key Exchange的内容,获取Pre-master的值并计算会话密钥Key = fuc(C, S, Pre-master)

◆服务器解密客户端发送的加密握手消息并校验

◆服务器向客户端确认加密方式Change Cipher Spec

◆服务器计算当前所有消息的摘要值并加密发送给客户端Encrypted Handshake Message



6握手完成+信息传输

◆客户端计算所有消息的摘要值并与服务器发送的加密握手消息做校验

◆校验通过则握手完成 ,无需向服务器发送任何消息

◆客户端可以与服务器按照约定的协议版本、加密算法、会话密钥等进行通信了


以上四次握手为单向验证,还有双向认证

双向认证(常见场景为网上登录银行)

◆除了客户端验证服务器身份之外,服务器也可以要求验证客户端的身份,即双向认证

◆在第二次握手时,服务器向客户端发送Client CertificateRequest信息,请求查看客户端证书

◆在第三次握手时,客户端会同时发送Client Certificate和Certificate Verify Message给服务器



四次握手中的加密算法

◆第三次握手中使用非对称加密算法加密Pre-master 

◆第三次和第四次握手中使用MAC算法生成EncryptedHandshake Message

◆握手成功后使用对称加密算法加密通信数据




8、TLS中的会话缓存机制

会话缓存

◆为了节省网络资源,提高HTTPS协议的工作效率,TLS协议中有两类会话缓存机制

◆会话标识Session ID

◆会话记录Session Ticket


Session ID缓存机制

◆在服务器端保存每次会话的ID和协商的通信信息

◆基本所有服务器都支持

◆占用服务器资源多


Session Ticket缓存机制

◆将协商的通信信息加密之后发送给客户端保存,解密的密钥由服务器保存

◆服务器的支持范围有限

◆占用服务器资源少


比较

◆Session ID和Session Ticket类似于Session和Cookie

◆两者都支持的情况下。应优先选择Session Ticket

◆在TLS协议会话缓存中的作用是一样的


https协议知识汇总


会话缓存的优点

◆简化了握手过程,提高了建立握手的速度

◆减少了握手的信息传输,节省了带宽和流量

◆减少了计算量,节省了客户端和服务器的资源


9、SSL证书

SSL证书

◆SSL 证书的主要作用:身份认证和数据加密

◆向客户端证明服务器的真实身份,此真实身份是通过第三方权威机构( CA )验证的

◆确保客户端和服务器之间的通信内容是高强度加密传输的,是不可能被非法篡改和窃取的


SSL证书的分类方式1

1域名验证型 ( DV ) SSL证书( Domain Validation SSL )

  ◆只验证网站域名所有权的简易型SSL证书

  ◆仅能加密通信内容,不能向用户证明网站的真实身份

  ◆适合无身份认证需求的网站使用,比如Laravel China

2组织验证型( OV ) SSL证书( Organization Validation SSL )

  ◆需要验证域名所有权和所属单位的真实身份的标准型SSL证书

  ◆不仅能加密通信内容,还能向用户证明网站的真实身份

  ◆适合电子商务、企业等网站使用。比如亚马逊商城、海南航空

3扩展验证型( EV ) SSL证书( Extended Validation SSL )

  ◆遵循全球统一的严格身份验证标准颁发的SSL证书,是目前业界最高安全级别的SSL证书

  ◆提供通信内容加密与网站身份证明,浏览器状态栏显示单位名称

  ◆适合金融证券、银行等网站使用。



SSL证书的分类方式2

◆单域型证书,仅支持单个域名www.imooc.com

◆多域型证书,支持多个域名imooc.com, www.imooc.com

◆通配型证书,支持带通配符的域名*.imooc.com




10、如何获取SSL证书

在供应商处购买SSL证书

特点:可信度高,安全性高,审核签发时间长,支持赔付,功能强大,支持通配符、多域名,应用场景丰富

在供应商处免费获取SSL证书

特点:成本低,容易申请,极速审核签发,安全性一般,功能简单、仅支持单个域名,应用场景少

自行签发SSL证书

  ◆生成key (服务器私钥)及CSR ( Certificate Sign Request )文件

  ◆生成key(CA私钥)及CA证书(公钥)

  ◆用CA证书给CSR文件签名生成服务器证书(公钥)

特点:成本低,操作复杂,不限数量,安全性低,不可信,仅供开发、测试用



11、自行签发SSL证书步骤


步骤一:手动生成key (服务器私钥)及CSR ( Certificate Sign Request )文件

步骤二:手动生成key(CA私钥)及CA证书(公钥)

步骤三:手动用CA证书给CSR文件签名生成服务器证书(公钥)

◆使用的工具: OpenSSL

◆OpenSSL是一个开源的软件库,实现了SSL和TLS协议

◆OpenSSL具有强大的加密库、密钥和证书封装管理功能


◆第一步:生成服务器私钥

openssI genrsa -des3 -out server.key 4096

◆第二步:去除服务器私钥的密码(可选)

openssI rsa -in server.key -out server.key

◆第三步:生成证书请求文件( CSR文件)

openssI req -new -key server.key -out server.csr

https协议知识汇总

◆第四步:生成CA私钥

openssl genrsa -des3 -out ca.key 4096

◆第五步:生成CA证书

openssl req -new -x509 -key ca.key -out ca.crt -days 3652

◆第六步:利用CA证书给CSR签名

openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

此时我们有六个文件

服务器相关文件:服务器私钥、证书请求文件、服务器证书

CA证书相关文件:CA私钥、CA证书、CA序号文件




12、在Apache中部署HTTPS服务

准备

安装OpenSSL工具包 测试:openssl version

获取SSL证书  自行签发或者获取免费证书

安装Apache服务器和mod_ssl模块  测试:httpd -M | grep ssl


安装mod_ ssl 模块

◆源码方式安装      --enable-ssl --with-ssl= /usr/local/openssl/

◆添加为共享模块    --enable-ssl=shared --with-ssl=/usr/local/openssl

◆包管理器安装(推荐) CentOS/Redhat : yum install mod_ssl

                    Debian/Ubuntu : apt-get install mod_ ssl


启用mod _ssl 模块

◆编译为静态模块安装的 mod_ ssl 会自动启用

◆添加为共享模块的mod_ ssl需要修改配置文件::LoadModule ssl_module modules/mod_ssl.so

◆包管理器安装的mod_ssl 在CentOS/Redhat会自动启用,而在Debian/Ubantu下需要执行sudo a2enmod ssl来启用


主要配置内容

◆启用SSL服务    SSLEngine on

◆监听443端口    Listen 443

◆配置服务器证书  SSLCertificateFile /path/to/server.crt

  服务器密钥     SSLCertificateKeyFile /path/to/server.key



额外的配置

◆配置安全传输协议  SSLProtocol all -SSLv2 -SSLv3

◆配置加密算法   SSLCipherSuite HIGH:!aNULL:!MD5:!SEED:!IDEA

更多内容请参考Apache文档

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html



服务生效

◆测试Apache配置文件  httpd -t

◆重启Apache服务   httpd -k restart

◆在浏览器中打开https://localhost

 


13、在Nginx中部署HTTPS服务

准备

安装OpenSSL工具包 测试:openssl version

获取SSL证书  自行签发或者获取免费证书

安装Nginx服务器和http_ssl_module模块  测试:nginx -V


安装http_ssl_module模块

◆源码方式安装   --with-http_ssl_module

◆包管理器安装的Nginx自带http_ssl_module模块(推荐)



主要配置内容 default.conf 

◆启用SSL服务  ssl on;

◆监听443端口   listen 443 ssl;

◆配置服务器证书  ssl_certificate /path/to/server.crt

  服务器密钥  ssl_certificate_key /path/to/server.key




额外配置内容

◆配置安全传输协议  ssl_ protocols TLSv1.1 TLSv1.2;

◆配置加密算法  ssl_ciphers HIGH:!aNULL:!MD5:!SEED:!IDEA;

◆更多内容请参考Nginx文档

https://nginx.org/en/docs/http/ngx_http_ssl_module.html



测试HTTPS服务生效

◆测试Nginx配置文件   nginx -t

◆重新加载 Nginx服务  nginx -S reload

◆在浏览器中打开 https://localhost



14、HTTPS性能优化


HTTPS性能损耗

◆增加延时 

RTT(Round-Trip Time  TCP数据包发送的往返时间)

一次完整的TLS握手至少增加延时2*RTT

会话缓存机制下的握手至少增加1*RTT


◆消耗更多系统资源

对称加解密、非对称加解密消耗额外的CPU计算资源,当HTTPS连接过多时,加解密操作的性能将首先成为瓶颈


HTTPS性能优化

◆CDN接入

HTTPS延时主要取决于次往返RTT的时间。

使用CDN作为HTTPS接入的入口,将能够极大减少RTT的时间。

每个CDN节点通过可控方法与业务服务器高效通信,从而减少时延,常用的可控方法有维持长连接、会话复用和链路质量优化等。

◆会话缓存

使用会话缓存机制建立HTTPS连接只需至少1 * RTT的延时。

基于会话缓存机制建立的HTTPS连接不需要服务器使用RSA私钥解密Pre-master信息,可以节省CPU资源。

如果HTTPS访问集中且缓存命中率高,此方法效果非常可观。

◆硬件加速

为服务器安装专用的SSL硬件加速卡。

SSL硬件加速卡具有更高的加解密能力且不影响业务程序。

据测试,某品牌单个加速卡可实现约10台24核服务器的加解密能力。


◆远程加解密

将最消耗CPU资源的加解密任务转移到其他服务器。

可以充分利用网络带宽与服务器的网卡性能,提高业务服务器接入能力。

远程加解密服务器可以是CPU利用率比较低的服务器,也可以是高计算性能的专用服务器。

◆HTTP2

从协议层面提高HTTPS工作性能。

HTTP2使用多路复用技术、头部压缩算法、服务器推送功能提高了HTTP协议的工作性能。



15、HTTPS常用测试工具


流量分析工具

  网络抓包工具

    Wireshark(winodws、mac系统)、Tcpdump(liunx系统)

  网站调试工具

    Fiddler、Postman 

网站测试工具

  SSL安全测试

    SSL Labs https://www.ssllabs.com/ssltest/

  网站性能测试

    Uptrends https://www.uptrends.com/tools/uptime


标签: https
分享给朋友:
返回列表

上一篇:HTTP之安全威胁解析

没有最新的文章了...

相关文章

浏览器缓存机制

浏览器缓存机制

浏览器缓存机制本文地址: https://www.laruence.com/2010/03/05/1332.htmlCache-ControlCache-Control 是最重要的规则。这个...

CSS grid 网格布局教程

CSS grid 网格布局教程

grid 兼容性查看请点此处 最新Grid兼容前言:用过这个grid只能说简直爽啊,以往需要float甚至position定位,自从学了grid网格布局,代码量非常精简但是也要注意兼容问题,...

浏览器几种缓存方法的比较

浏览器几种缓存方法的比较

在Web应用领域,Web缓存大致可以分为以下几种类型:1.数据库数据缓存Web应用,特别是社交网络服务类型的应用,往往关系比较复杂,数据库表繁多,如果频繁进行数据库查询,很容易导致数据库不堪重荷。为了...

meta标签功能之兼容主流浏览器

meta标签功能之兼容主流浏览器

其实一般新手估计都不会注意这个问题,新手大多都会迫不及待的为了实现网页而去重视代码,往往忽视最重要的meta标签,我就是这样,我也是做了两年的前端才算发现这个里面有很大的学问我最近在一个人独自开发一个...

html5 移动端开发总结

html5 移动端开发总结

取自https://quirksmode.org/mobile/viewports2.html手机与浏览器浏览器:移动端开发主要针对手机,ipad等移动设备,随着地铁里的低头族越来越多,移动端开发在前...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

微信