Featured image of post 一步到位,自动申请SSL证书

一步到位,自动申请SSL证书

使用acme.sh自动申请和续期证书

# 前言

阿里云最近发短信给我,提示我之前免费申请的SSL证书要到期了。借此机会,正好将acme.sh配置到服务器上,一劳永逸的解决证书问题。相较于在阿里云上申请证书,使用acme.sh的优势在于可以申请泛域名证书及可以自动续期。

下面我就记录一下我使用的步骤吧。我这里采用的是使用阿里云的API自动进行DNS方式的申请,不同的服务商命令有稍许不同,可以参考官方文档

# 步骤

  1. 在阿里云控制台申请api https://ram.console.aliyun.com/users

  2. 在阿里云的角色控制里赋予刚刚申请的用户控制DNS的权限AliyunDNSFullAccess https://ram.console.aliyun.com/permissions

  3. 安装acme.sh

    1
    
    curl  https://get.acme.sh | sh -s email=my@example.com
    
  4. 配置API环境

    1
    2
    
    export Ali_Key="xxxx"
    export Ali_Secret="xxxxx"
    

    这里是配置API环境,填入刚刚申请的密钥。这步只需要做一次,acme.sh会将其保存下来。

  5. 生成证书,这里填入刚刚申请API得到的密钥

    1
    
    acme.sh --issue --dns dns_ali -d lbqaq.top -d "*.lbqaq.top"
    

    通过上面命令,可以申请到包含lbqaq.top*.lbqaq.top这两个DNS记录的证书。这里如果有*,是需要加双引号的,我之前没加就报错了。

  6. 复制证书到nginx目录

    1
    2
    3
    4
    
    acme.sh --install-cert -d lbqaq.top \
    --key-file       /usr/local/nginx/conf/cert/lbqaq.top.key  \
    --fullchain-file /usr/local/nginx/conf/cert/lbqaq.top.pem \
    --reloadcmd     "nginx -s reload"
    

    这里key-file对应的是Nginx配置里的ssl_certificate_keyfullchain-file对应的是ssl_certificate

  7. 接下来修改Nginx配置文件即可

    附上我的模板

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    #如果不是https就跳转至https
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    
    ssl_certificate ./cert/lbqaq.top.pem;
    ssl_certificate_key ./cert/lbqaq.top.key;
    ssl_session_timeout 5m;
    #表示使用的加密套件的类型。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的TLS协议的类型。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=31536000";
    

# 常用命令

在附上一些我用到的一些acme.sh相关的命令。才不是水字数呢

  • acme.sh --list查看已申请的证书
  • acme.sh --remove -d example.com删除指定的证书
Licensed under CC BY-NC-SA 4.0
最后更新于 2022-09-12 13:51:00