• 通过acme.sh申请Let's Encrypt泛解析SSL证书


    1、Let's Encrypt

    申请过SSL证书的人应该对Let's Encrypt这个证书颁发机构不陌生,它免费,而且也被各大浏览器所支持和认可.但一般我们申请到的都单域或双域(www和主域名)的证书.这样一来,我们需要做全站SSL的工作量就会超级大!有没有一个办法,像DNS解析一样,用*.staryjie.com的方式,让全站共用一个SSL证书。

    2、安装acme.sh

    acme.sh是一个实现了 acme 协议的脚本,可以从 Let's Encrypt 生成我们需要的泛解析SSL证书.当然,你用来生产普通证书也是没有问题的。

    本文仅对使用域名提供/解析商的 API Token 来自动申请泛域名证书的过程进行讲解,acme.sh还有很多很强大的功能例如配合 Nginx 或者 Apache 自动申请证书等,请自行查看 github 项目 wiki 发掘。

    项目链接:Github - acme.sh

    安装方法:

    curl https://get.acme.sh | sh
    # 或者
    wget -O- https://get.acme.sh | sh
    

    安装过程中可能会出现要你安装socat的警告,可以忽略。

    20210501111522-4Yhtei

    安装过程不会修改已有的任何系统功能和文件,请放心食用. acme.sh在程序结束后会被自动安装到~/.acme.sh/目录中,你也可以随时删除该目录,不会影响到系统。

    3、获取API Token

    由于acme.sh对域名解析/提供商的支持十分广泛,所以请针对自己所在的域名提供商获取对应的API Token。
    支持列表:点我跳转

    国内目前使用较多的是腾讯云和阿里云,获取API Token的方法分别是:

    • 腾讯的DNSPod

      登录DNSPod,进入顶部导航栏里的用户中心,在左侧的导航栏里,找到安全设置,看到页面的最下面,有个API Token.点击查看->创建API Token->填写Tokens名称,复制好ID与Token即可.保存待用。

    • 阿里云域名

      需要登录到阿里云官网获取Ali_Key和Ali_Secret。点击此处跳转

    4、配置acme.sh

    获取到对应的API Token之后我们需要将id和key设置为环境变量,供acme.sh调用:

    # DNSPod
    export DP_Id="你的 API ID"
    export DP_Key="你的 Token"
    
    # aliyun
    export Ali_Key="你的 AccessKey ID"
    export Ali_Secret="你的 AccessKey Secret"
    

    如果你的域名提供商不是DNSPod或者阿里云,其他域名提供商变量名一览表:点我查看

    临时环境变量只需配置这一次即可,当成功申请证书后,API 信息会被自动保存在~/.acme.sh/account.conf里,下次你使用acme.sh的时候系统会自动读取并使用。

    5、申请泛域名解析证书

    # DNSPod
    cd ~/.acme.sh/
    # 或者 alias acme.sh=~/.acme.sh/acme.sh
    acme.sh --issue -d example.com -d *.example.com --dns dns_dp
    # 多个域名只需要"-d 你的域名"即可
    
    # aliyun
    cd ~/.acme.sh/
    # 或者 alias acme.sh=~/.acme.sh/acme.sh
    acme.sh --issue --dns dns_ali -d example.com -d *.example.com
    

    注意:不同的域名解析商所用命令有细微不同!如果你的提供商不是DNSPod,请自行去上面的链接查看!

    申请完成后屏显会输出证书路径。

    20210501124811-2mK1oY

    可能会遇到的报错:

    20210501121057-sne73N

    解决办法:

    # 升级curl
    yum install -y curl
    

    如果升级curl之后还是如上图的报错,则可以尝试修改域名的DSN设置:

    20210501121606-HYUcyR

    修改之后需要等十分钟左右。

    6、将证书安装到指定的目录

    默认生成的证书都放在安装目录下: ~/.acme.sh/,这个目录一般来说不能让nginx或Apache直接使用。所以我们需要将证书放到一个指定的目录,scrm用nginx配置,本例是指定在/etc/nginx/ssl/目录下。

    mkdir /etc/nginx/ssl
    
    acme.sh --installcert -d staryjie.com 
                 --keypath       /etc/nginx/ssl/staryjie.com.key  
                 --fullchainpath /etc/nginx/ssl/staryjie.com.key.pem 
                 --reloadcmd     "service nginx force-reload"
    

    20210501124851-H0e4yz

    7、配置NGINX使用证书

    7.1 生成 dhparam.pem 文件

    openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
    

    20210501131355-zVoOl5

    7.2 修改nginx配置文件

    /etc/nginx/conf.d/bark.conf

    server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            listen       443 ssl;
            server_name notice.staryjie.com;
    
            ssl_certificate     /etc/nginx/ssl/staryjie.com.key.pem;
            ssl_certificate_key /etc/nginx/ssl/staryjie.com.key;
    
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    
            location / {
                proxy_pass_header Server;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Scheme $scheme;  
                proxy_pass http://127.0.0.1:8888;
            }
    }
    

    重载配置文件:

    systemctl reload nginx.service
    

    测试:

    20210501130637-FcmKPt

    8、证书更新

    Let s Encrypt 的证书有效期是 90 天的,需要定期重新申请,不过acme在安装的时候就已经设置了自动更新,所以这一步不用关心,很省心。

    目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心。

    9、acme.sh的自动更新

    acme.sh --upgrade --auto-upgrade
    

    关闭自动更新:

    acme.sh --upgrade  --auto-upgrade  0
    

    10、参考

  • 相关阅读:
    截取最后一个下划线前面的字符串
    jqgrid加载本地数据功能
    Android、Ios手机端字体根据屏幕分辨率自适应的方法,使用rem和px的区别
    js获取8个月前时间,1天前时间
    手机端/pc端 弹出后,禁止底部页面滚动方法
    列表左右滚动
    jQuery点击隐藏点击显示,计算高度,位置,给当前加上焦点,其他去掉焦点
    工厂模式浅析
    教你看懂UML类图
    Rpc基础篇
  • 原文地址:https://www.cnblogs.com/jie-fang/p/14724100.html
Copyright © 2020-2023  润新知