• centos 7 nginx 配置Let's Encrypt证书,并自动更新


    Let’s Encrypt 是 一个叫 ISRG ( Internet Security Research Group ,互联网安全研究小组)的组织推出的免费安全证书计划。参与这个计划的组织和公司可以说是互联网顶顶重要的先驱,除了前文提到的三个牛气哄哄的发起单位外,后来又有思科(全球网络设备制造商执牛耳者)、 Akamai 加入,甚至连 Linux 基金会也加入了合作,这些大牌组织的加入保证了这个项目的可信度和可持续性

    后来 ISRG 的发起者 EFF (电子前哨基金会)为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书。这真是非常容易、方便呀,所以我们就可以直接使用官方客户端,不需要再使用第三方的工具了。虽然第三方工具也可以使用,但是官方工具更权威,风险也更小,而且遇到问题也更容易解决,毕竟有官方的支持。

    前期准备工作

    1. 国内部署的话域名一定要备案,没备案过的话1是自动下载证书无法验证通过 2是即使手工下载证书配置后同样无法访问
    2. 域名DNS解析映射到nginx服务器上
    3. Nginx要先安装好ssl模块,参考 https://www.cnblogs.com/nickchou/p/12678354.html

    配置内容参考 :https://blog.51cto.com/wzlinux/2385116

    一、安装certbot

    官网地址 https://certbot.eff.org/,安装方法参考官方推荐步骤

    yum install certbot python2-certbot-nginx
    

    二、获取证书(有手动获取,用certbot自动获取等方式,下面主要是说明自动获取)

    把下面的domain.com 和email@qq.com 换成自己的域名和邮箱

    certbot certonly --nginx --nginx-server-root /usr/local/nginx/conf -d www.domain.com -d domain.com -m email@qq.com
    

    参数说明:
    certonly:意思是只安装证书,手动配置nginx,也可以不加certonly按照步骤提示一步一步进行
    --nginx-server-root:是指定nginx conf目录,有时候nginx是从源码安装或者更改过conf的路径后需要显示指定,不配置默认在/etc/nginx/nginx.conf去找
    如果路径不是/etc/nginx/nginx.conf会报错

    -d 指定域名,也可以填多个
    -m 设置邮箱,证书过期会邮件提醒

    出现报错的解决办法
    1.ImportError: cannot import name UnrewindableBodyError
    解决办法,重装 urllib3 库:

    pip uninstall urllib3
    pip install urllib3
    

    2.pkg_resources.DistributionNotFound: The 'urllib3<1.23,>=1.21.1' distribution was not found and is required by requests
    解决办法

    easy_install urllib3==1.21.1
    

    3.ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
    解决办法

    pip install --upgrade --force-reinstall 'requests==2.6.0'
    

    以下是安装成功后的截图

    默认证书的安装路径

    cd /etc/letsencrypt/live
    

    总共有4个文件

    三、手动配置nginx ssl

    cd /usr/local/nginx/conf
    vi nginx.conf
    

    添加配置,注意下面的domain.com改成自己的域名,保存退出

        server {
            listen       80;
            server_name  domain.com;
            # http重定向到https
            return       301 https://www.domain.com$request_uri;
        }
    
        server {
            listen       80;
            server_name  www.domain.com;
            # http重定向到https
            return       301 https://$server_name$request_uri;
        }
    
        server {
            # nginx1.15之后用这个语法,1.15之前用 ssl on
            listen       443 ssl;
            server_name  www.domain.com;
            # 这里的证书填刚刚生成的路径
            ssl_certificate   /etc/letsencrypt/live/www.domain.com/fullchain.pem;
            ssl_certificate_key  /etc/letsencrypt/live/www.domain.com/privkey.pem;
            # 这里加载默认的ssl配置
            include /etc/letsencrypt/options-ssl-nginx.conf;
            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
            location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-Ip $remote_addr;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://127.0.0.1:8081;
                proxy_redirect off;
            }
        }
    

    nginx 热重启

    nginx -s reload
    

    然后打开自己的网页就可以看了。注意:阿里云服务器的话记得检查好下安全配置443端口是否打开

    查看证书,有效期是3个月

    四、配置自动更新证书

    测试自动更新,--dry-run 表示测试更新,非真正执行更新

    certbot renew --dry-run

    出现错误:

    解决办法:

    vi /usr/lib/python2.7/site-packages/sitecustomize.py
    

    加入以下内容保存后退出

    import sys 
    sys.setdefaultencoding('utf-8') 
    

    再次执行测试更新,下图为测试更新成功!!

    测试更新成功后,添加定时任务自动更新
    下面是每个月的1,8,20号零点自动检查更新证书,一般在正式过期前30天内可以更新成功。可以 cd /etc/letsencrypt/renewal 查看

    echo "0 0 1,8,20 * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew" | sudo tee -a /etc/crontab > /dev/null
    

    更新日志的查看

    cd /var/log/letsencrypt
    

    查看定时任务

    cat /etc/crontab
    

    五、手动更新证书

    certbot renew -v
    

    六、其他

    查看证书过期时间,这个指令稍微有点慢

    certbot certificates
    

  • 相关阅读:
    Nginx安装
    node.js搭建vue脚手架
    Oracle引入数据
    MVC引入Junit单元测试
    Git版本控制器
    IDEA-Maven
    SSM框架整合
    【测试基础第五篇】测试用例编写和评审
    【测试基础第四篇】测试用例设计方法
    【测试基础第三篇】需求测试分析
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/15327843.html
Copyright © 2020-2023  润新知