美文网首页
使用 CertBot 自动更新 Let's Encrypt SS

使用 CertBot 自动更新 Let's Encrypt SS

作者: ccw1078 | 来源:发表于2019-05-26 12:28 被阅读0次

    首次申请

    下载安装 CertBot

    # 下载 CertBot 脚本到当前目录,假设当前文件夹为 ~ 目录
    wget https://dl.eff.org/certbot-auto
    # 为 CertBot 脚本增加执行权限,# a 为 all 简写,x 为 execute 简写,a+x 表示所有用户及群组的可执行权限
    chmod a+x ./certbot-auto
    

    配置 pip 国内源

    注:若之前已配置,请跳过此步骤;此步骤的目的是加速 CertBot 下载 python 模块的速度

    # 新建 .pip 文件夹并进入
    mkdir .pip && cd .pip
    # 创建 pip.conf 文件
    vi pip.conf
    # 在 pip.conf 文件中输入以下内容
    [global]
    index-url=http://mirrors.aliyun.com/pypi/simple/
    [install]
    trusted-host=mirrors.aliyun.com
    # 保存退出
    

    运行脚本,安装依赖

    ./certbot-auto --help
    

    配置 nginx

    目的:获取域名证书过程中, Let's Encrypt 会对域名发起访问,以确认申请者对域名的所有权;故需要配置 nginx,以便能够对 Let's Encrypt 的访问返回正确的响应;

    # 创建文件夹,用于  Let's Encrypt 访问时返回响应内容
    mkdir /home/letsencrypt
    # 打开 nginx 配置文件进行编辑,此处假设 nginx 的配置文件在以下路径:/usr/local/nginx/conf/nginx.conf,如不是,则相应修改路径
    vi /usr/local/nginx/conf/nginx.conf
    
    // 在 nginx 配置文件中,找到 http 下监听 80 端口的 server
    http {
        //...(略)...
        server {
            listen 80;
            
            // 添加如下内容,此处假设申请域名为 www.helloworld.com,请修改为实际申请的域名
            server_name  www.helloworld.com;
            location ^~  /.well-known/acme-challenge/ {
                defaulf_type "text/plain";
                root  /home/letsencrypt/;
                }
                
            // ......以下略......
    

    重启 nginx

    # 此处假设 nginx 可执行文件在路径 /usr/local/nginx/sbin 下面,如不是则相应修改路径
    # 先使用 -t 参数测试配置文件格式是否正确
    /usr/local/nginx/sbin/nginx -t
    # 若正确,屏幕上将显示以下字样
    > nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    # 重启 Nginx
    /usr/local/nginx/sbin/nginx -s reload
    

    运行脚本,申请证书

    在申请证书前,记得先将域名的 DNS 解析指向当前的服务器 IP,这样 letsencrypt 机构在向域名发起连接请求的时候,才能路由到当前设置的机器

    # 此处为域名 www.helloworld.com 申请一张证书,其中的 youremail.com 请替换为你自己的邮箱地址
    ./certbot-auto certonly  --email youremail.com --webroot -w /home/letsencrypt -d www.helloworld.com
    # 如果要为多个子域名(如 api/test/www) 申请一张证书,则相应修改命令如下
    ./certbot-auto certonly --email youremail.com --webroot -w /home/letsencrypt -d api.helloworld.com -d test.helloworld.com -d www.helloworld.com
    

    申请成功后,界面下会有如下的成功提示:

    IMPORTANT NOTES:
    - Congratulations! Your certificate and chain have been saved at
       /etc/letsencrypt/live/helloworld.com/fullchain.pem. Your cert
       will expire on 2019-08-26. To obtain a new version of the
       certificate in the future, simply run Let's Encrypt again......
    

    配置 nginx,启用证书

    // 在 nginx 配置文件中,找到 http 下监听 443 端口的 server
    http {
        //...(略)...
        server {
            listen 443 ssl;
            
            // 修改 server_name、ssl_certificate、ssl_certificate_key 三个字段的值
            // 此处假设申请域名为 www.helloworld.com,请修改为实际申请的域名
            server_name  www.helloworld.com;
            ssl_certificate      /etc/letsencrypt/live/www.helloworld.com/fullchain.pem;
            ssl_certificate_key  /etc/letsencrypt/live/www.helloworld.com/privkey.pem;
            
            // ......以下略......
    

    当用户访问非加密的 80 端口时,如果需要让服务器自动跳转到 443 端口使用证书的 https 访问,则可以在 http 下 80 端口的 server 中增加如下内容:

    // 在 nginx 配置文件中,找到 http 下监听 80 端口的 server
    http {
        //...(略)...
        server {
            listen 80;
            server_name  www.helloworld.com;
             
            // 添加如下内容,实现自动跳转
            return 301 https://$server_name$request_uri
            
            // ......以下略......
    

    重启 Nginx,让配置生效

    # 此处假设 nginx 可执行文件在路径 /usr/local/nginx/sbin 下面,如不是则相应修改路径
    /usr/local/nginx/sbin/nginx -s reload
    

    测试自动更新

    # 使用 --dry-run 选项表示测试,非真正执行更新
    ./certbot-auto renew --dry-run
    

    若显示如下字样,则表示自动更新功能测试成功

    Congratulations, all renewals succeeded. The following certs have been renewed:  
       /etc/letsencrypt/live/www.helloworld.com/fullchain.pem (success)
    ** DRY RUN: simulating 'certbot renew' close to cert expiry
    ** (The test certificates above have not been saved.)
    

    到期更新

    由于 Let's Encrypt 颁发的证书只有 90 天有效期,因此需要定期进行证书更新

    # 手动更新
    ./certbot-auto renew -v
    

    相关文章

      网友评论

          本文标题:使用 CertBot 自动更新 Let's Encrypt SS

          本文链接:https://www.haomeiwen.com/subject/pdmxtctx.html