DEV Community

drake
drake

Posted on • Edited on

申请免费的TLS证书,并自动续期

  • 0、你得有个域名

  • 1、执行自动安装脚本

curl  https://get.acme.sh | sh
Enter fullscreen mode Exit fullscreen mode
  • 2、查看是否安装成功

    • 查看版本号
    acme.sh --version
    
    • 如果 -bash: acme.sh: command not found,执行下面的代码,将命令加入环境变量
    alias acme.sh=~/.acme.sh/acme.sh
    

    正常来说这行命令不需要手动执行,执行curl https://get.acme.sh | sh这条命令执行的时候,会自动的执行alias acme.sh=~/.acme.sh/acme.sh

    • 检查自动更新证书的cronjob是否已被添加
    crontab -e 
    

    Image description

    如果没有被添加需要手动添加 14 0 * * * "/home/ec2-user/.acme.sh"/acme.sh --cron --home "/home/ec2-user/.acme.sh" > /dev/null

  • 3、将默认证书改为letsencrypt

acme.sh --set-default-ca  --server  letsencrypt
Enter fullscreen mode Exit fullscreen mode
  • 4、生成证书(这个环节对域名所有权验证有依赖,所以这里生成证书一般分为两种类型:httpdns;这里采用dns的方式)

如果考虑采用http的方式,可以参考这里

  • 4.1、DNS具体还分两种方式,手动和自动,由于手动无法实现自动续签过期的证书,这里采用自动的方式

  • 4.2、自动的方式需要调用DNS服务商的api,需要 keysecret ; 这里以阿里云为例:

    4.2.1、创建RAM用户

    新建用户

    4.2.2、记录 AccessKey ID 和 AccessKey Secret
    4.2.3、给生成的用户授权
    授权入口
    授权内容

  • 4.3、服务器执行以下命令生成证书

export Ali_Key="xxxx"
export Ali_Secret="xxx"
acme.sh --issue --dns dns_ali -d *.siquanzhuanxiang.top
Enter fullscreen mode Exit fullscreen mode
  • 4.3、打印以下内容表示证书生成成功:
-----END CERTIFICATE-----
[Fri Aug 25 12:08:59 CST 2023] Your cert is in: /root/.acme.sh/*.xx.top_ecc/*.xx.top.cer
[Fri Aug 25 12:08:59 CST 2023] Your cert key is in: /root/.acme.sh/*.xx.top_ecc/*.xx.top.key
[Fri Aug 25 12:08:59 CST 2023] The intermediate CA cert is in: /root/.acme.sh/*.xx.top_ecc/ca.cer
[Fri Aug 25 12:08:59 CST 2023] And the full chain certs is there: /root/.acme.sh/*.xx.top_ecc/fullchain.cer
Enter fullscreen mode Exit fullscreen mode

  • 5、安装证书(带自动刷新防止过期)

是一行命令,该命令会生成证书会放到指定的目录,命令的参数中需要指定域名(要与上面操作中域名保持一致),并且制定证书存放目录;
5.1、确保存在目录/etc/nginx/tls/
5.2、--reloadcmd "service nginx force-reload"该参数表示重启Nginx服务,如果Nginx服务尚未安装,请剔除该参数

  acme.sh --install-cert -d *.siquanzhuanxiang.top --key-file /etc/nginx/tls/key.pem --fullchain-file /etc/nginx/tls/fullchain.pem --reloadcmd "service nginx force-reload"
Enter fullscreen mode Exit fullscreen mode

根据web服务器需要的文件按需引入对应的参数,reloadcmd定义证书更新后重启对应的web服务命令。(这里是以Nginx为例)

  • 6、Nginx配置文件中引用证书:
  ...
server {
  listen       443 ssl;
  ssl_certificate      /etc/nginx/tls/fullchain.pem;
  ssl_certificate_key  /etc/nginx/tls/key.pem;
  # ...
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)