美文网首页
let's encrypt 阿里云域名 免费泛域名解析及Ngin

let's encrypt 阿里云域名 免费泛域名解析及Ngin

作者: 承诺一时的华丽 | 来源:发表于2020-05-16 19:15 被阅读0次

注意:在使用 SSL 证书时,如 *.example.com 证书,仅支持 a.example.com, a1.example.com, a2.example.com 以此类推域名,但是不支持 b.a.example.com(另一级), b1.a.example.com 类域名,如需支持,需另外再购买一张 *.a.example.com 证书。

原理

通过let's encrypt 与阿里云dns解析api结合,自动颁发证书。

获取阿里云AK(1)

image image

推荐使用子用户授权 ,使用子账户的AK(AccessKey ID + Access Key Secret)

子账户授权 : 须给子账户授权如下图

image

获取腾讯云AK(2)

*秘钥获取地址:https://console.dnspod.cn/account/token (和腾讯云账号密码一致)

export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
acme.sh --issue --dns dns_dp -d example.com -d www.example.com

使用 acme.sh

acme.sh 是一个非常优秀的证书生成工具,其 官网 有详细的中文文档支持 。

  • 安装 acme.sh 命令
curl https://get.acme.sh | sh

需要系统支持 socat 及 curl 模块

安装完成后将会在 home 目录下生成 .acme.sh 文件夹
为了使用方便,增加alias

alias acme.sh=~/.acme.sh/acme.sh

生成证书

  • 首先将AK临时加入到环境变量中
export Ali_Key="xxxxxx"
export Ali_Secret="xxxxxxxxxxx"
  • 注册账号设置邮箱
 acme.sh --register-account -m my@example.com
  • 执行命令
acme.sh --issue --dns dns_ali -d *.example.com
  • 更新主目录不要重复/home/zxb/ssl/ != /home/zxb/.acme.sh/
mkdir ssl
cp -r  /home/zxb/.acme.sh/*.example.com/* /home/zxb/ssl/*.example.com/
  • 加入定时更新
acme.sh --installcert -d *.example.com --key-file /home/zxb/ssl/*.example.com/*.example.com.key --fullchain-file /home/zxb/ssl/*.example.com/fullchain.cer --reloadcmd  "sudo service nginx force-reload" --log
  • archlinux =>sudo service nginx force-reload 修改为: sudo systemctl reload nginx
    如果更新的账号非root权限或sudo权限,sudo权限需要设置不需要输入密码
    相关设置:https://www.jianshu.com/p/140c1a6e29a9

接下来你将看到一个120秒的倒计时

image

倒计时之后证书将会存储到 ~/.acme.sh/*.example.com中

image

nginx 配置

    server {
        #listen       80;
        listen 443 ssl;
        server_name  *.[域名名].com;

        #设置长连接
        keepalive_timeout   70;

        #HSTS策略
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

        ssl_certificate /home/zxb/.acme.sh/*[域名名]/*.[域名名].cer;
        ssl_certificate_key /home/zxb/.acme.sh/*.[域名名]/*.[域名名].key;

        #优先采取服务器算法
        ssl_prefer_server_ciphers on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        #定义算法
        ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
        #减少点击劫持
        add_header X-Frame-Options DENY;
        #禁止服务器自动解析资源类型
        add_header X-Content-Type-Options nosniff;
        #防XSS攻擊
        add_header X-Xss-Protection 1;

        gzip on;
        gzip_min_length 1k;
        gzip_comp_level 9;
        gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
        gzip_vary on;
        gzip_disable "MSIE [1-6]\.";

        location / {
            proxy_pass http://127.0.0.1:8001;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #proxy_set_header Via "nginx";
        }

域名更新续期

#安装acme
curl https://get.acme.sh | sh
wget -O -  https://get.acme.sh | sh
#查看acme版本
acme.sh --version
#请填写实际key&Secret
export Ali_Key="4xvxbCThnjerg955"
export Ali_Secret="fwyhkkp0"
#申请证书
acme.sh --issue --dns dns_ali -d *.peakchao.com
#更新证书
acme.sh --renew -d '*.peakchao.com' --force
# 查看证书列表
acme.sh --list 
# 删除证书
acme.sh remove <SAN_Domains>
# 要停止更新证书,您可以执行以下操作从更新列表中删除证书
acme.sh --remove -d example.com [--ecc]

#升级 acme.sh 到最新版:
acme.sh --upgrade
#开启自动升级:
acme.sh  --upgrade  --auto-upgrade
#关闭自动更新:
acme.sh --upgrade  --auto-upgrade  0

#以下命令无需执行,据查看,acme会自动添加续期的定时任务
crontab -e
# 添加如下的任务:三个月执行一次
0 0 29 */3 * acme.sh --renew -d '*.peakchao.com' --force
#最后请不要忘记修改nginx配置以及重启 

问题一

  • curl: (35) Network file descriptor is not connected
$ curl https://get.acme.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:14 --:--:--     0curl: (6) Could not resolve host: get.acme.sh; Unknown error

原因:无法访问github.com,解决方式:GitHub 解决访问错误的问题 https://www.jianshu.com/p/ccb63a379575

问题二

...
[Mon Mar  7 22:12:23 CST 2022] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 7
[Mon Mar  7 22:12:23 CST 2022] Not valid yet, let's wait 10 seconds and check next one.
[Mon Mar  7 22:12:24 CST 2022] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 35
...
  • 解决办法,修改host对Github的域名IP映射
 sudo vi /etc/hosts

添加一下解析

140.82.114.4 github.com
185.199.108.153 github.github.io
199.232.69.194 github.global.ssl.fastly.net
199.232.28.133 raw.githubusercontent.com

  • 更新证书
 acme.sh --renew -d *.domain.com --force
...
[Mon Mar  7 22:34:09 CST 2022] The DNS record already exists.
[Mon Mar  7 22:34:09 CST 2022] Error add txt for domain:_acme-challenge.wc.domain.com
[Mon Mar  7 22:34:09 CST 2022] Please check log file for more details: /home/zxb/.acme.sh/acme.sh.log
...

有时候一次不能成功,多尝试几次

 acme.sh --renew -d *.domain.com --force

相关文章

网友评论

      本文标题:let's encrypt 阿里云域名 免费泛域名解析及Ngin

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