https是什么,服务端/浏览器需要怎么配合和设置
1.http是什么?
首先要明确http是什么,http是超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议。
1.1 http的版本演化
版本 | 产生时间 | 变化 |
---|---|---|
0.9 | 1991年 | 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 |
1.0 | 1996年 | 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 |
1.1 | 1997年 | 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 |
2.x | 2015年 | 多路复用、服务器推送、头信息压缩、二进制协议等 |
1.2 多路复用
多路复用使得传输的效率大为提升,原因是通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多流并行而不是依赖建立多个TCP连接。对比如下图所示。
1.3 http的特性
1.无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作。为了解决一些场景,通过两种策略应对无状态:Cookie/Session 和 HTTP keep-alive。
2.无连接:HTTP/1.1之前(1.1之后出现长连接),由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
3.基于请求和响应:基本的特性,由客户端发起请求,服务端响应
4.简单快速、灵活
5.通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
2.https是什么?
《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。紧接上文,结束https的特性。
2.1 https的特性
1.内容加密:采用混合加密技术,中间者无法直接查看明文内容
2.验证身份:通过证书认证客户端访问的是自己的服务器
3.保护数据完整性:防止传输的内容被中间人冒充或者篡改
2.2 加密和验证的过程
采用的是混合加密:对称加密+非对称加密
什么是对称加密?
对称加密即加密和解密的密钥是同一个,只不过解密算法是加密算法的逆算法。
什么是非对称加密?
非对称加密需要两个密钥,即公钥和私钥,公钥送给任何和自己通信的接收方,私钥自己保有。对于任何一个消息的接收方而言(叫它A吧),A接收的消息是经过A的公钥加密过的,A用自己的私钥进行解密。
如下图所示,最右边分支的“秘密密钥”即对称加密的密钥,用对称加密算法对原文进行了加密。我们直接传加密文件和对称加密的秘密密钥是不安全的,如果有人截获了报文,就可以尝试破译加密算法,来解密加密文件。
因此,就用到了非对称加密,采用接收方给发送方的公钥,对秘密密钥进行加密,接收方用私钥进行解密,得到秘密密钥的原文,然后用秘密密钥对加密文件进行解密。
又因为公钥是公开的嘛,怎么防止别的互联网朋友“冒充”发送报文呢(截获报文,添油加醋,再发报文,毕竟接收方的公钥我也有),
发送方就要用自己的私钥对一小部分数字摘要进行加密(数字摘要使用hash算法计算出来的),因为私钥只有每个发送方自己有,由此验证了身份。接收方用发送方给的公钥进行解密得到“数字摘要1”,再用获得的原文进行hash得到“数字摘要2”,对比即可验证发送方身份,并验证报文是否被篡改。
为什么不一直使用非对称进行加密,而是在类似握手之后开始使用对称加密算法进行https通信:
非对称加密的消耗和所需的计算以及时间远比对称加密消耗要大,所以在握手和认证之后,服务器和客户端就开始按照约定的随机串,对后续的数据传输进行加密。
2.3 建立SSL连接的过程
2.2 中讲述了发送方和接收方持有对方公钥的情况下,双方是如何通信的,那么一开始二者是如何信任对方的呢?
这就涉及到数据证书。SSL 证书中包含的具体内容有证书的颁发机构、有效期、公钥、证书持有者、签名,通过第三方的校验保证了身份的合法,解决了公钥获取的安全性。
-
客户端向一个需要https访问的网站发起请求。
-
服务器将证书发送给客户端进行校验。证书里面包含了其公钥。这里要特别说一下客户端到底如何来校验对方发过来的数字证书是否有效。
2.1 首先在本地电脑寻找是否有这个服务器证书上的ca机构的根证书。如果有继续下一步,如果没有弹出警告。
2.2 使用ca机构根证书的公钥对服务器证书的指纹和指纹算法进行解密。
2.3 得到指纹算法之后,拿着这个指纹算法对服务器证书的摘要进行计算得到指纹。
2.4 将计算出的指纹和从服务器证书中解密出的指纹对比,看是否一样,如果一样则通过认证。
-
校验成功之后,客户端会生成一个随机串然后使用服务器证书的公钥进行加密之后发送给服务器。
-
服务器通过使用自己的私钥解密得到这个随机值。
-
服务器从此开始使用这个随机值进行对称加密,开始和客户端进行通信。
-
客户端拿到值和对称加密方式, 使用随机值进行解密。这个随机值就是对称加密的密钥。
参考链接:
https://blog.csdn.net/xiaoming100001/article/details/81109617
https://blog.51cto.com/11883699/2160032
https://www.cnblogs.com/dinglin1/p/9279831.html
至此我们基本解释了什么是https,为了使用https,服务器要如何配置?
服务器端
1.首先根据服务器类型(Tomcat、Nginx、IIS等),下载证书。
2.解压下载证书文件,文件夹中有2个文件
- 证书文件(以.pem为后缀或文件类型)
- 密钥文件(以.key为后缀或文件类型)
3.配置conf文件
ssl_certificate ssl/zuoyebang.cc/server.pem;
ssl_certificate_key ssl/zuoyebang.cc/server.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:80m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;//加密算法
ssl_prefer_server_ciphers on;
网友评论