博客搭建之后,要申请一个ssl证书,https是标配,这个环节必不可少,免费的SSL证书一般都是通过acme.sh脚本去申请,网上搜索了很多文章,写的都不太清楚,看得让人非常浪费心智, 建议所有程序员都去读一下面这本书,能够稳定高效的输出

十分钟掌握don’t make me think核心内容

踩过的坑

  1. 不要用主机申请,直接用域名验证申请
  2. 只用RSA格式证书,不用ECC,ecc浏览器兼容性不好,需要nginx特殊配置

安装

1
curl https://get.acme.sh | sh

就是一步,很简单

通过域名验证申请

先在阿里云网站上获得你的 Key和Secret,然后注入到环境变量中,执行申请 (同时申请了主域名,和泛域名)

如何获取阿里云云账号AccessKey ID和AccessKey Secret

export Ali_Key="xxxxxx"
export Ali_Secret="xxxxxx"
acme.sh --issue --dns dns_ali -d victorc.top -d *.victorc.top

执行需要5分钟左右,会输出如下结果

[Sat 30 Apr 2022 04:23:57 PM CST] Your cert is in: /home/admin/.acme.sh/victorc.top/victorc.top.cer
[Sat 30 Apr 2022 04:23:57 PM CST] Your cert key is in: /home/admin/.acme.sh/victorc.top/victorc.top.key
[Sat 30 Apr 2022 04:23:57 PM CST] The intermediate CA cert is in: /home/admin/.acme.sh/victorc.top/ca.cer
[Sat 30 Apr 2022 04:23:57 PM CST] And the full chain certs is there: /home/admin/.acme.sh/victorc.top/fullchain.cer

/home/admin是我用户的根目录,acme.sh 会默认把证书下载到根目录的 .acme.sh/ 中

证书申请成功之后,直接用,不需要安装

修改nginx配置并重启

在nginx里面直接加入下面配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
server {
    listen 443 ssl;
    server_name victorc.top;
    ssl_certificate /home/admin/.acme.sh/victorc.top/fullchain.cer;
    ssl_certificate_key /home/admin/.acme.sh/victorc.top/victorc.top.key;
    index index.html index.htm index.nginx-debian.html;
    root /var/www/html/blog;
    location / {
    try_files $uri $uri/ =404;
    }
}

然后重启nginx,用nginx -s reload 可能有问题,最好直接用 systemctl restart nginx

搞定~

参考

使用 acme.sh 申请 SSL 证书并且定期自动更新