配置https

跟風遠走 提交于 2020-03-24 11:28:20

3 月,跳不动了?>>>

配置https

https功能由ngx_http_ssl_module模块提供。https连接的认证过程见SSL握手机制。简单版的过程如下:

一,客户端say hello,并发送一个随机数给服务端。
二,服务端say hello,并回复一个随机数给客户端。
三,服务端发送数字证书给客户端。
四,客户端使用信任的CA公钥解密数字证书得到服务端的公钥。
五,客户端使用服务端的公钥加密一个预备主密钥并发送给服务端。
六,服务端使用自己的私钥解密预备主密钥。
七,双方都得到了2个随机数加一个预备主密钥。通过这3个随机数形成一个会话主密钥,即session key。至此ssl握手结束,连接的认证过程也完毕。

对于服务端而言,在配置https时,需要提供自己的数字证书用于发送给客户端,还要提供自己的私钥用于解密客户端发送的预备主密钥。当ssl连接建立完成后,后续连接要传输的数据都采用session key进行加密,但注意session key是对称加密,客户端和服务端是一样的。

还需注意,在创建证书请求时,由于需要指定common name,这是需要使用https的站点,因此每个ssl证书只能为一个server_name提供https服务。不过,通过特殊的配置方法,也能让一个ssl证书服务于整个域名或域名内的某些主机。例如,https://www.baidu.com使用的证书就是颁发给"baidu.com"的,而不是该域名下的某一台主机。如何实现这样的功能,可以网上搜索下关键字"ssl SubjectAltName",若有需要,我会另开一篇文章介绍实现方法。

以下是配置文件中默认的关于SSL相关的指令设置。

#server {
#    listen       443 ssl;
#    server_name  localhost;

#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;

#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;

#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

以下是建立https的相关过程:

  1. 自建CA。
    cd /etc/pki/CA
    (umask 077;openssl genrsa -out private/cakey.pem 2048)
    openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650

     

  2. 建立相关序列和索引文件。
    touch index.txt
    echo "01" > serial

     

  3. nginx端生成证书请求。
    (umask 077;openssl genrsa -out /usr/local/nginx/longshuai.key 2048)
    openssl req -new -key /usr/local/nginx/longshuai.key -out /usr/local/nginx/longshuai.csr
    
  4. CA为证书请求颁发证书。
    openssl ca -in /usr/local/nginx/longshuai.csr -out longshuai.crt
    
  5. 将颁发的证书发送给nginx端。这里由于CA和nginx在同一主机上,所以直接移动即可。
    mv longshuai.crt /usr/local/nginx/
    
    此时,在/usr/local/nginx/目录下就有了nginx自己的私钥文件和证书文件
    [root@xuexi nginx]# ls longshuai*
    longshuai.crt  longshuai.csr  longshuai.key
    
  6. 修改配置文件,配置ssl相关选项。

    server {
    listen       443 ssl;
    server_name  www.longshuai.com;
    
    ssl_certificate      /usr/local/nginx/longshuai.crt;
    ssl_certificate_key  /usr/local/nginx/longshuai.key;
    
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    
    location / {
        root   html;
        index  index.html index.htm;
    }
    }
    
  7. 重载配置文件。
  8. 测试。在浏览器上输入https://www.longshuai.com测试。将会提示证书安全存在问题,说明配置成功。以后只要在客户端安装证书即可正常访问。测试时,建议使用IE浏览器或使用IE内核的浏览器测试,这样比较直观。使用firefox、chrome等浏览器可能会因为是自建的CA而出现一些问题。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!