HTTPS是HTTP通信之间的一个安全通道。https不是一个单独的协议,而是基于http通信之间的一个安全通道。
1 | https = http + ssl(旧版) Secure Sockets Layer 安全套接字层 |
在网络中,通过明文传输数据会导致很多问题
数据机密性
在网络传输数据信息时,对数据的加密是至关重要的,否则所有传输的数据都是可以随时被第三方看到,完全没有机密性可言。
数据完整性
网络传输数据的完整性,也是安全领域中需要考虑的重要环节,如果不能保证传输数据的完整性,那传输过程中的数据就有可能被任何人所篡改,而传输数据双方又不能及早的进行发现。将会造成互连通讯双方所表达信息的意义完全不一致。因此,对于不完整的数据信息,接收方应该进行相应判断,如果完整性验证错误,就拒绝接收相应的数据。
身份验证问题
网络中传输数据时,很有可能传输的双方是第一次建立连接,进行相互通讯,既然是第一次见面沟通,如何确认对方的身份信息,的确是我要进行通讯的对象呢?
如果不是正确的通讯对象,在经过通讯后,岂不是将所有数据信息发送给了一个陌生人。
如下明文传输的协议,都是不安全的,因此,至少要放在内网,才保证基本安全
1 | ftp协议 vsftpd 账户密码验证 都是明文传输,人家直接看到你的账户密码 |
针对以上数据机密性、数据完整性和身份验证问题,可以用以下几种数据加密方式来解决:
数据加密方式 | 描述 | 主要解决的问题 | 常用算法 |
---|---|---|---|
对称加密 | 数据加密和解密使用相同的密钥 | 数据的机密性 | DES、AES |
非对称加密 | 也叫公钥加密,指数据加密和解密使用不同的密钥(密钥对) | 身份验证 | DSA、RSA |
单向加密 | 只能加密数据,不能解密数据 | 数据的完整性 | MD5、SHA系列算法 |
为保证数据传输的安全性,需要从两个角度来考虑数据加密:
1 | 1. 服务端有一对儿数字证书,包含私钥、公钥(非对称加密算法),也被称为CA证书,这个证书由专门的证书服务商提供,受互联网信任。(也可以自己创建CA证书,但是没人认。。) |
为什么需要证书
http协议通信的网址,浏览器会不信任,明确告知这个http的数据是明文传输,会被黑客截取。
各大云厂商,比如查看阿里云,提供的证书购买功能,以及证书知识的介绍。
1 | https://help.aliyun.com/document_detail/188316.html?spm=5176.14113079.help.dexternal.57f96b84CwPbL2 |
证书的类型
https协议通信的网址可以看到证书的详细信息,证书是需要绑定域名的。一般证书,我们就关注2个点,证书绑定的域名和证书的有效期。
1 | DV类型证书:中文全称是域名验证型证书,证书审核方式为通过验证域名所有权即可签发证书。此类型证书适合个人和小微企业申请,价格较低,申请快捷,但是证书中无法显示企业信息,安全性较差。在浏览器中显示锁型标志。 |
绑定单域名或泛域名
1 | 1. 绑定单个域名,如 www.bilibili.com,只能单独的给一个虚拟主机去部署 |
1 | 去阿里云ssl证书控制台,申请20个免费的证书,但是都只能绑定单域名 |
一部分业务,是纯内网环境的,需要自建https证书。
通过公司内部的dns系统,提供的域名,绑定https证书
安装nginx和openssl
1 | yum install nginx -y # 安装nginx |
创建证书的目录
1 | mkdir -p /etc/nginx/ssl-cert/ # 创建证书目录 |
创建私钥文件
1 | openssl genrsa -idea -out server.key 2048 |
基于私钥文件去创建公钥
1 | openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt |
查看证书
1 | ls /etc/nginx/ssl-cert |