nginx教程六,用免费SSL证书实现https站点
一、了解SSL安全协议
1. SSL(Secure Socket Layer)协议是作用在网络七层模型中的表示层,在HTTPS所在的应用层之上,所以对于使用https协议来说,用了SSL安全协议是无感知的。
2. TLS(Transport Layer Security)是SSL3.0协议后应微软要求的升级改名
3. TLS安全密码套件解读,主要有四个组成部分
- 密钥交换:是一个椭圆曲线加密算法,密钥交换是为了解决浏览器与服务器之间如何各自生成独立且相同的密钥,用这个密钥加密数据。这个过程使用的是非对称加密算法
- 身份验证:密钥交换过程中,需要用身份验证算法各自验证双方身份
- 对称加密算法、强度、分组模式:在数据加密解密通讯过程中,需要使用对称加密算法;其中就用到使用何种算法,加密强度,分组模式,GCM分组模式可以提高多核CPU下加密解密性能
- 签名hash:一个摘要算法,将不定长度的字符串生成固定长度的摘要,用于校验数据完整性等
4. 对称加密,同一份数据,一方使用一个密钥加密数据,而另一方要使用相同的密钥解密数据
5.非对称加密,根据数学原理生成一对密钥,其中一个密钥称为公钥,另一个就是私钥;同一份数据,如果用公钥加密,那么就必须用私钥才能解密;同样私钥加密的数据,公钥才能解密
6. CA证书颁发及使用过程,这是解决浏览器对服务器站点的信任问题
- 站点维护者就是订阅人,提供必要站点信息给登记机构,登记机构通过CSR到CA机构申请证书
- CA机构会颁发证书和私钥给登记机构,登记机构再给订阅人。证书中包含CA机构的公钥
- 订阅人拿到证书和私钥后,部署到自己的Web服务器中
- 浏览器请求Web服务器时会要证书,Web服务器就会将公钥证书发给浏览器,浏览器会验证证书有效性
- 过期证书会存在CRL中,是链式存储,验证效率比较慢;后来存放到了OCSP中,OCSP可以针对某一个证书直接验证有效性,浏览器可以直接到OCSP查询,但是这样性能并不是很高,所以nginx有个OCSP开关,开启OCSP查询后,nginx可以直接验证证书有效性,无需浏览器再去验证
- 客户端如Windows系统、浏览器或Android系统中都有CA证书机构库,一般浏览器使用系统的CA证书库。根证书机构一般无需去验证,客户端系统一般一年才会更新一次。浏览器除了验证证书有效期外还要验证证书颁发机构可信度,nginx服务器发给浏览器的是两个证书,不包括根证书,根证书在本地证书库,这两个证书一个是自己域名的证书,即站点主证书,另一个是二级证书,浏览器会自己验证二级证书签发机构是否可信
- 浏览器验证服务器可靠性就是验证证书颁发机构是否可信
7. 证书类型
- 域名验证(domain validated,DV)证书:仅验证域名指向的服务器是否为申请证书的服务器
- 组织验证(organization validated,OV)证书:域名验证基础上还要对域名对应的组织进行验证
- 扩展验证(extended validation,EV)证书:浏览器会有友好展示
8. TLS通讯过程,其中最耗时的是交换密钥和加密数据
- 1.浏览器对服务器发起预发请求,告诉服务器支持的加密算法
- 2.nginx服务器会在本地加密算法中结合浏览器中支持的选择一个合适的安全套件发给浏览器,这一步中有个SessionCache,如果开启了SessionCache,会再下一次请求时使用缓存的私钥
- 3.nginx服务器发送公钥证书给浏览器,证书中含有证书链,浏览器找到自己的根证书库,根据证书链验证证书有效性
- 4.根据第二步选择的安全套件,如椭圆曲线算法,会将算法参数发给浏览器,便于第六步生成加密用的密钥
- 5.浏览器根据椭圆曲线算法参数生成公钥私钥,并将公钥发给服务器
- 6.服务器也会根据椭圆曲线加密算法参数生成公钥私钥,并将公钥发给浏览器。服务器使用浏览器公钥和自己的私钥生成双方加密的密钥;浏览器使用服务器的公钥和自己的私钥生成相同的密钥
- 这样双方就使用相同的密钥进行数据加密后传输
二、用SSL证书实现https站点
1. 重新编译生成带有ssl_module的nginx,然后复制替换为新的nginx二进制文件
./configure --prefix=/root/nginx --with-http_ssl_module make
2. 将nginx链接到/usr/sbin/nginx,注意要使用绝对路径
ln -s /root/nginx/sbin/nginx /usr/sbin/nginx
3. 假设自己有域名hjp.com,配置本机hosts文件(使用SwitchHosts工具)192.168.2.141 www.hjp.com,修改nginx.conf中server_name如下
4. 此时访问浏览器发现,域名旁边没有绿色的小锁
5. 安装nginx生成证书的工具certbot,并执行生成证书命令,指定nginx配置文件目录和域名。如果不加--register-unsafely-without-email,执行过程中会提示添加Email,接下来就根据提示操作即可
yum -y install python2-certbot-nginx certbot --nginx --nginx-server-root=/root/nginx/conf/ --register-unsafely-without-email -d www.ittutu.cn
6. 接下来无法继续,因为我的域名没有绑定服务器。这里要求真是域名并且绑定到服务器上