一,TLS/SSL发展和相关概念
- SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
- TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
SSL和TLS都属于加密协议。在其网络数据传输中起到保护隐私和数据的完整性。保证该网络传输的信息不会被未经授权的元素拦截或修改,从而确保只有合法的发送者和接收者才能完全访问并传输信息。
根据分层架构模型(OSI),主要用于应用层和传输层的SSL协议,应用最广的是HTTP协议,从而产生了HTTPS协议。保障在网站和用户之间(双向)传输的信息是安全的,在涉及敏感信息时尤为重要:机密数据,密码,银行信息,个人图像等。
二,SSL/TLS通用模型
2.1,对称加密和非对称加密
这两种加密方式是TLS/SSL的用到的两种加密方式。
2.2,SSL证书的公信力是如何保证的
通过CA机构颁发证书。
2.3,PKI公钥基础设施
2.4,CA证书
- 域名验证(domain validated,DV)证书
这个证书只会去验证域名的归属是否正确,比如我们申请证书的时候,只要你的域名指向的是你正在申请证书的那台服务器,你就可以成功地申请到证书,如果你使用其他CA机构颁发的证书,可能会去验证你注册的那个邮箱是否正确 - 组织验证(organization validated,OV)证书
我们在申请证书的时候,会去验证我们填写的机构,企业名称是否是正确的,所以OV证书的申请往往需要几天的时间,不像DVz证书基本上实时就可以获取到了,而OV证书的价格也往往高于DV证书,DV证书很多都是免费的 - 扩展验证(extended validation,EV)证书
比OV证书验证更加严格,所以大部分的浏览器符EV证书的显示非常的友好,它会把我们申请证书时,所填写的机构名称在浏览器的地址的最左侧显示出来
2.5,SSL证书功能
1,帮助客户端对服务端进行验证。
2,保证服务器和客户端之间的通信安全。
3,加密用户的敏感信息确保安全。
4,提升用户对网站的信息。
2.6 协议模型
- 第一步(双方协商交换参数)
- 客户端产生随机数RNC(Random Number of Client)。
- 客户端发送客户端的证书,协议(SSL/TLS),算法信息,RNC给服务器。
- 服务端回复服务器的证书,协议(SSL/TLS),算法信息,RNS(Random Number of Server)给客户。
- 第二步(客户端/服务端向认证机构校验证书信息)
- 客户端向第三方/本地信任库认证接收到的服务器证书信息。
- 服务端向第三方/本地信任库认证接收到的服务器证书信息。
- 第三步(生成主秘钥Primary Master Secret)
- 客户端生成随机数PMS。
- 客户端根据协议(SSL/TLS),服务器的证书公钥生成加密过的PMS。
- 客户端将加密过的PMS发送给服务端。
- 服务端接收到客户端发送过来的加密过的PMS,并根据自己的私钥解密出PMS。
- 客户端与服务端保存公共私钥(RNC_RNS_PMS)作为共同的私钥。
- 第四步 (会话秘钥确认)
- 客户端通过PMS产生会话密钥
- 客户端数据使用会话秘钥加密发送给服务器。
- 服务器使用PMS产生对应的密钥。
- 服务使用会话密钥解密接收到的数据。
- 服务器发送确认信息给客户端。
- 终止握手。
- 第五步(正式会话):
- 客户端数据使用会话密钥加密 发送给服务端.
- 服务端接收数据使用相同的会话密钥解密出数据.
- 服务器使用会话密钥加密数据发送给客户端
- 客户端使用会话密钥解密出对应数据.
这个部分一个详细的介绍HTTPS 的概念、原理及工作机制
三,SSL握手过程
证书主要是用于握手过程中。
1,客户端提交https请求。
2,服务器响应客户,并把证书和公钥发给客户端。
3,客户端验证证书和公钥的有效性。
4,有效后,生成一个会话秘钥。
5,客户端用公钥加密会话后,发给服务器。
6,服务器收到公钥加密的报文后用私钥解密。回去会话秘钥。
7,客户端和服务端用这个会话秘钥通信。
四,nginx配置SSL的方法和步骤
主要步骤:
- SSL模块安装。
在配置ssl证书之前,要确保你的nginx已经安装了ssl模块,一般情况下自己安装的nginx都是不存在ssl模块的。使用nginx -V查看
root@iZbp19tzbfkht2jgiwxh2eZ:/usr/nginx/sbin# ./nginx -V
nginx version: nginx/1.19.6
built by gcc 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
configure arguments: --prefix=/usr/nginx
如果出现 (configure arguments: --with-http_ssl_module), 则已安装
一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录,我的是在(/root/nginx),进入目录后,输入
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
接下来执行
make
#切记不要执行make install,否则会重新安装nginx
上述操作执行完成以后,你的目录下会出现objs文件夹,文件夹内存在nginx文件:
root@iZbp19tzbfkht2jgiwxh2eZ:/home/nginx/nginx-1.19.6# ll
total 816
drwxr-xr-x 9 1001 1001 4096 Mar 7 15:37 ./
drwxr-xr-x 4 root root 4096 Jan 21 11:24 ../
drwxr-xr-x 6 1001 1001 4096 Jan 21 11:23 auto/
-rw-r--r-- 1 1001 1001 308054 Dec 15 22:41 CHANGES
-rw-r--r-- 1 1001 1001 470256 Dec 15 22:41 CHANGES.ru
drwxr-xr-x 2 1001 1001 4096 Jan 21 11:23 conf/
-rwxr-xr-x 1 1001 1001 2590 Dec 15 22:41 configure*
drwxr-xr-x 4 1001 1001 4096 Jan 21 11:23 contrib/
drwxr-xr-x 2 1001 1001 4096 Jan 21 11:23 html/
-rw-r--r-- 1 1001 1001 1397 Dec 15 22:41 LICENSE
-rw-r--r-- 1 root root 352 Mar 7 15:37 Makefile
drwxr-xr-x 2 1001 1001 4096 Jan 21 11:23 man/
drwxr-xr-x 3 root root 4096 Mar 7 15:38 objs/
-rw-r--r-- 1 1001 1001 49 Dec 15 22:41 README
drwxr-xr-x 9 1001 1001 4096 Jan 21 11:23 src/
接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务
./nginx -s stop #停止nginx服务
#替换之前的nginx
cp /home/nginx/nginx-1.19.6objs/nginx /usr/nginx/sbin
成功之后,进入到nginx安装目录下,查看ssl时候成功
#注意这里是大写的V,小写的只显示版本号
./nginx -V
#可以看到这里出现了configure arguments: --with-http_ssl_module 证明已经安装成功