Nginx服务器配置https

前言

网络传输数据安全很重要!!自从苹果宣布,苹果App Store中的所有App都必须启用ATS(App Transport Security)安全功能。iOS移动开发就开始引起重视。本文记录了站长在阿里云ubuntu系统上搭建Https证书的过程。

本文记录的顺序

1.Https的理解。

2.安装certbot,使用letsencrypt生成免费的cert证书。

3.修改Nginx的配置文件。

1.Https的理解

https是为了加密客户端与服务器之间的数据而诞生的。 传输间的加密方式是对称加密,握手时的加密是非对称加密。为了避免网络链路中被拦截伪装,第三方签名认证起到了重要的作用。具体的握手过程图示如下:

PS:以上图片,在百度图片搜索获得!!

随机生成的密钥R是一个随机的字符串,握手后,所有的数据都会使用这个字符串来加密和解密。

第三方的签名认证,发生在 上图 的 “合法” 判断。用于确认服务器返回的数字证书是否来源于注册的合法服务器!!!

 

2.安装certbot,使用letsencrypt生成免费的cert证书。

1.ubuntu安装cerbot

sudo apt-get install certbot

2.申请证书

certbot certonly --webroot -w /网站根目录 -d 域名.com -d www.域名.com

注意:证书的限制是每周20个,每个证书可以添加100个子域名,这说明,你可以每周有2000个子域名。

另外,相同的证书(相同的命令),每周最多可以生成5个证书。所以,生成证书和删除证书时考虑一下啊!!!

如果,你发现你连续5次相同命令生成证书后,返回说太多证书,可以在生成证书的命令里添加多一个子域名,就可以再生成!只要不超过每周20个就可以!!

 

经过一轮的确认和输入邮箱,你最后会得到生成成功的提示如下:(这个过程letsencrypt会验证你所写的域名和子域名)

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/varsiri.com-0003/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/varsiri.com-0003/privkey.pem
   Your cert will expire on 2018-02-02. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

根据上面的提示,你会发现,你的证书就在/etc/letsencrypt/live/你的域名/ 下面。

里面有5 个文件。

cert.pem – Apache服务器端证书
chain.pem – Apache根证书和中继证书
fullchain.pem – Nginx所需要ssl_certificate文件
privkey.pem – 安全证书KEY文件
README 证书说明文件

到这里证书已经生成完毕!!!!!!!!!!

生成的证书路径为:  /etc/letsencrypt/live(这个路径用于配置ngnix的配置文件)

3.修改Nginx的配置文件

server {
  listen 80 default_server;
  listen [::]:80 default_server;
        location / {
        rewrite ^(.) https://$host$1 permanent;
           }
  location ~ /.well-known {
         allow all;
         }
}
server {

        listen 443 default_server;
listen [::]:443 default_server;
root /var/www/blog;
server_name varsiri.com www.varsiri.com;
index index.html index.htm index.nginx-debian.html;

        ssl on;
        ssl_certificate /etc/letsencrypt/live/varsiri.com-0004/cert.pem;               
ssl_certificate_key /etc/letsencrypt/live/varsiri.com-0004/privkey.pem;       
ssl_client_certificate /etc/letsencrypt/live/varsiri.com-0004/chain.pem;  

       # ssl_certificate "/var/www/QQSSL/1_www.varsiri.com_bundle.crt";#证书文件
       # ssl_certificate_key "/var/www/QQSSL/2_www.varsiri.com.key";#证书KEY文件  
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
       ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
       ssl_prefer_server_ciphers on;

#error_log /var/www/NginxLog/error.log error;

       location / {
             try_files $uri  $uri/ =404;  
             index  index.html index.htm index.php;
 
        if (-f $request_filename/index.html){  
               rewrite (.*) $1/index.html break;  
        }  
        if (-f $request_filename/index.php){  
               rewrite (.*) $1/index.php;  
        }  
        if (!-f $request_filename){  
               rewrite (.*) /index.php;  
         }  
       }

       location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.1-fpm.sock;
          }
 }

以上的配置,跳转,开放端口,配置证书,设置网站根目录,路由设置等功能!!!

最后,重启nginx

nginx -s reload

到这里,你已经有了3个月的有效证书(letsencrypt方案),下面,我们设置自动更新证书!!!

证书自动更新

设置脚本文件,输入

crontab -e

文件中添加脚本命令

30 4 * * 1 certbot renew --renew-hook "systemctl restart nginx" --quiet > /dev/null 2>&1 &

设置了每周一凌晨4点30自动更新证书,如果更新成功就自动重启nginx服务,证书在到期前30天内才能更新,多余的更新会自动忽略掉的,每周更新还有一个好处是更新可能会失败,这样最多还有4次的尝试机会来保证不会过期.
修改好后保存退出。

上面文章描述如果觉得写得不清晰,请查看以下博客:

https://ubock.com/article/25