• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Nginx配置https原理及实现过程详解

    使用linux实用工具certbot来生成https证书

    这个工具是生成Let's Encrypt证书,

    Let's Encrypt数字证书认证机构,Let's Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务

    提供免费的SSL/TLS证书

    2015年12月3日,该服务进入公测阶段,正式面向公众。

    2016年4月12日,该项目正式离开Beta阶段。

    到2016年9月9日,Let's Encrypt 已经发放 1000 万张证书。

    因此对于大部分中小型网站来说,是一个值得考虑的选择。

    https配置的步骤

    1打开 https://certbot.eff.org/ 选择对应操作系统与 Web 服务器

    这里我选择nginx服务器,CentOS7服务器上

    2执行命令,并根据需要修改相应域名参数。

    certbot要通过yum安装,certbot被打包到epel源中,

    所以安装启动epel库,安装epel源查看链接

    https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F

    启动epel源,可以使用手动自己启动epel,也可以借助yum-config-manager命令来启动

    安装yum-config-manager

    yum -y install yum-utils

    启动epel

    yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

    3安装certbot

    sudo yum install certbot python2-certbot-nginx

    获取证书的两种方式:身份验证器和安装程序

    使用webRoot插件进行安装,这个要求你的服务器80端口能够正常被访问到(这个域名是属于你的)

    webRoot插件通过certonly和--webroot(或者-w)在命令行上执行命令

    certbot certonly -w /var/www/example -d www.example.com

    certbot certonly -w 可以被http访问到的webroot目录 -d 要配置https的域名名称

    上面的 /var/www/example表示的是在nginx配置文件中root根节点所指向的根路径

    webroot插件的工作原理是为每个请求的域创建一个临时文件${webroot-path}/.well-known/acme-challenge。

    然后,Let的加密验证服务器发出HTTP请求,以验证每个请求的域的DNS是否解析为运行certbot的服务器。

    访问请求如下

    66.133.109.36 - - [05/Jan/2016:20:11:24 -0500] "GET /.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"

    所以我们服务器需要放通.well-known/acme-challenge这个访问路径

    例如,

    server
      {
        listen 80;
        server_name www.example.com; 
        index index.html ;
        root /var/www/example;
      
        。。。
      
        location ~ /.well-known {
          allow all;
        }
      }

    具体的http配置文件

    server
      {
        listen 80;
        server_name www.example.com; 
        index index.html ;
        root /var/www/www.example.com;
    
    
        location / {
          proxy_redirect off;
          proxy_pass http://localhost:8080;
          proxy_set_header Host $host;
          proxy_set_header  X-real-ip $remote_addr;
          proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
        #error_page  404  /404.html;
    
        location /nginx_status
        {
          #stub_status on;
          #access_log  off;
        }
    
        location ~ /.well-known {
          allow all;
        }
    
        location ~ /\.
        {
          deny all;
        }
    access_log /data/log/nginx//var/www/www.example.com/-access.log;
        error_log /data/log/nginx//var/www/www.example.com/-error.log;
    }

    执行完命令后,https证书就会生成在/etc/letsencrypt/live目录下

    certbot certonly -w /var/www/example -d www.example.com

    比如上面的命令会生成证书/etc/letsencrypt/live/www.example.com/fullchain.pem

    生成证书密钥文件/etc/letsencrypt/live/www.example.com/privkey.pem

    然后我们只需要为该域名加上https配置,我们nginx就配置完成https

    https对应443端口

    具体https配置文件

    server
      {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name www.example.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root /var/www/www.example.com/;
        
        ssl on;
        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
        
       location / {
          proxy_redirect off;
          proxy_pass http://localhost:8080;
          proxy_set_header Host $host;
          proxy_set_header  X-real-ip $remote_addr;
          proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
        #error_page  404  /404.html;
    
        include enable-php-pathinfo.conf;
    
        location ~ /.well-known {
          allow all;
        }
    
        location ~ /\.
        {
          deny all;
        }
    
        access_log /data/log/nginx/www.example.com-ssl-access.log;
        error_log /data/log/nginx/www.example.com-ssl-error.logs;  
    }

    查看生产的证书

    tree /etc/letsencrypt/live/

    证书续签

    Let's Encrypt 生成的免费证书为3个月时间,但是我们可以无限次续签证书

    certbot renew

    使用定时器来自动重新生成证书

    0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

    centos6使用

    1获取certbot客户端

    wget https://dl.eff.org/certbot-auto
    chmod a+x certbot-auto

    2停止nginx

    service nginx stop

    3生成证书

    ./certbot-auto certonly --standalone --email `你的邮箱地址` -d `你的域名地址`

    当前网站有多个域名时需在后面增加,例如

    ./certbot-auto certonly --standalone --email `你的邮箱地址` -d `你的域名1` -d `你的域名2`

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    上一篇:用Docker swarm快速部署Nebula Graph集群的教程
    下一篇:如何在centos上使用yum安装rabbitmq-server
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    Nginx配置https原理及实现过程详解 Nginx,配置,https,原理,及,