1.https的相关知识
1.1 https的简介
HTTPS (全称:Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。
1.2 HTTP 与 HTTPS 的区别
HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页;
HTTPS需要用到SSL证书,而HTTP不用【(HTTPS是安装SSL的服务器,HTTP是未安装SSL的服务器)】;
HTTPS标准端口443,HTTP标准端口80;
HTTPS基于传输层,HTTP基于应用层;
HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
1 .3 SSL的相关了解
SSL(Secure Socket Layer)安全套接层是Netscape公司率先采用的网络安全协议。它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术。SSL广泛支持各种类型的网络,同时提供三种基本的安全服务,它们都使用公开密钥技术。
1.3 SSL/TLS协议和证书的关系
为保证网络安全,我们需要给服务器颁发证书,这个证书可以自己生成,但是自己颁发证书是不安全的,可以被别人伪造,一般都是在第三方机构购买证书。实际上证书并不依赖于协议,和协议也并没有太大的关联,协议是由服务配置来决定的,而证书是配合着协议去使用
1.4 https的工作流程
(1)客户端发发起https请求,通过域名解析发送至服务端的443端口,建立TCP连接
(2)服务端会将事先准备好的证书文件发送给客户端
(3)客户端会先验证服务端的证书的有效性,如果无效则显示警告信息,表示该网站不安全。
(4)如果有效,客户端会使用服务端发送过来的证书文件中的密钥,来加密自己使用的伪随机数生成的会话私钥,并将其发送给服务端。
(5)服务端会用私钥文件将客户端发送过来的加密会话密钥进行解钥,并获取该会话密钥
(6)之后客户端和服务端的之间的数据交流,会通过密钥的加密发送,解密获取,来完成整个通讯过程
该过程中,服务端在获取到会话密钥时,证书中产生的公钥私钥进行会话密钥获取的方式为非对称密钥方式。之后客户端服务端建立起了会话私钥进行交流的方式为对称密钥方式。
1.5 客户端是如何验证证书是否有效
浏览器一般会预安装一些比较权威的第三方认证机构的公钥,比如VeriSign、Symantec以及GlobalSign等等。
验证数字签名的时候,会直接从本地拿到相应的第三方的公钥,对私钥加密后的数字签名进行解密得到真正的签名。
然后客户端利用签名生成规则进行签名生成,看两个签名是否匹配,如果匹配认证通过,不匹配则获取证书失败。
1.6 web网站并未全部采用https的原因
首先,很多人还是会觉得HTTPS实施有门槛,这个门槛在于需要权威CA颁发的SSL证书。从证书的选择、购买到部署,传统的模式下都会比较耗时耗力。
其次,HTTPS普遍认为性能消耗要大于HTTP,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。
除此之外,想要节约购买证书的开销也是原因之一。要进行HTTPS通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。
最后是安全意识别。相比国内,国外互联网行业的安全意识和技术应用相对成熟,HTTPS部署趋势是由社会、企业、政府共同去推动的。
2. SSL证书获取的方法
2.1 阿里云证书的获取
一般的权威大厂都会对SSL证书有发售,可以选择直接去选购该证书,下面是阿里云证书的售卖网址。
https://www.aliyun.com/product/cas?userCode=r3yteowb
2.2 openssl的证书创建
(1)创建ca私钥
//首先创建一个存放目录
mkdir /tls
cd /tls/
//生成ca证书
openssl genrsa -aes256 -out ca-key.pem 4096 #输入123123
----------------------------------------------------------------------------------------------------------
genrsa:使用RSA算法产生私钥
-aes256:使用256位密钥的AES算法对私钥进行加密,这样每次使用私钥文件都将输入密码,可省略
-out:输出文件的路径,若未指定输出文件,则为标准输出
4096:指定私钥长度,默认为1024。该项必须为命令行的最后一项参数
----------------------------------------------------------------------------------------------------------
(2)创建ca证书
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem #输入123123
----------------------------------------------------------------------------------------------------------
req:执行证书签发命令
-new:新证书签发请求
-x509:生成x509格式证书,专用于创建私有CA时使用
-days:证书的有效时长,单位是天
-key:指定私钥路径
-sha256:证书摘要采用sha256算法
-subj:证书相关的用户信息(subject的缩写)
-out:输出文件的路径
----------------------------------------------------------------------------------------------------------
(3)创建服务器私钥
//用 ca 证书签发 server 端证书
openssl genrsa -out server-key.pem 4096
(4)生成证书签名请求文件(csr文件)
openssl req -new -key server-key.pem -sha256 -subj "/CN=*" -out server.csr
(5)使用ca 证书与私钥证书签发服务端签名证书
#该过程需要输入密码 123123,(需要签名请求文件,ca 证书,ca 密钥)
openssl x509 -req -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -days 1000 -out server-cert.pem
----------------------------------------------------------------------------------------------------------
x509:生成x509格式证书
-req:输入csr文件
-in:要输入的csr文件
-CA:指定ca证书的路径
-CAkey:指定ca证书的私钥路径
-CAcreateserial:表示创建证书序列号文件,创建的序列号文件默认名称为ca.srl
----------------------------------------------------------------------------------------------------------
(6)生成客户端私钥
//用ca证证书签发client端证书
openssl genrsa -out client-key.pem 4096
(7)生成证书签名请求文件
openssl req -new -key client-key.pem -subj "/CN=client" -out client.csr
(8)创建扩展配置文件,使秘钥适合客户端身份验证
echo extendedKeyUsage=clientAuth > extfile.cnf
(9)使用 ca 证书签发客户端签名证书
openssl x509 -req -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -extfile extfile.cnf -days 1000 -out client-cert.pem输入 123123,(需要签名请求文件,ca 证书,ca 密钥)
//删除两个证书签名请求文件和扩展配置文件
rm -rf ca.srl client.csr extfile.cnf server.csr