技术记录

欲以犀利知性换啤酒,一杯又一杯。

  1. 1. 引言
  2. 2. 开始使用
    1. 2.1. 1.安装
    2. 2.2. 2.生成证书
    3. 2.3. 3.安装证书
    4. 2.4. 4.nginx配置
    5. 2.5. 5.更新证书
    6. 2.6. 6.软件自动更新
  3. 3. 参考

引言

之前一直使用certbot 管理let’s encrypt证书,最近要做服务器迁移,借此尝试下acme.sh

开始使用

项目地址:github地址

1.安装

官方文档写的很明确了,输入命令:

1
curl  https://get.acme.sh | sh -s email=my@example.com

安装完后记得退出重新登录下连接的客户端,否则执行会报错: acme.sh command not found

之后查看下版本 acme.sh -v
img

2.生成证书

生成证书有两种方式: http 和 dns 验证 我这用的dns方式,自动在域名上添加一条 txt 解析记录, 验证域名所有权.

先去dnspod申请apiToken

img

保存生成的Id和Key,阿里云是Key和Secret

1
acme.sh   --issue   --dns dns_dp   -d domain.com  -d www.domain.com

或者直接生成一个通配符域名证书

1
acme.sh   --issue   --dns dns_dp   -d domain.com  -d *.domain.com

可能会报错,我当时报的找不到txt记录,需要进入域名管理后台,手动添加txt记录

重新执行之前命令就可以了

3.安装证书

前面生成的证书默认都会生成到~/.acme.sh/目录下面,官方不建议直接使用此目录证书 ,现在把证书copy到nginx目录下

1
2
3
4
acme.sh --install-cert -d domain.com \
--key-file /etc/nginx/ssl/privkey.pem \
--fullchain-file /etc/nginx/ssl/fullchain.pem \
--reloadcmd "service nginx force-reload"

生成 dhparam.pem 文件,可以增加网站安全性

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

4.nginx配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
server {
if ($host = domain.com) {
return 301 https://$host$request_uri;
}


listen 80;
server_name domain.com www.domain.com;
return 301 https://$host$request_uri;



}
#
server {
listen 443 ssl ;
server_name www.domain.com domain.com;
root /home/hexo/public;

access_log /var/log/nginx/www.domain.com.log;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;


add_header Strict-Transport-Security "max-age=44236800; includeSubDomains; preload" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Content-Type-Options nosniff always;
add_header Cache-Control no-cache always;


location / {
# proxy_pass http://127.0.0.1:4000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log /var/log/nginx/domain.com.log;
}

}


ssl_prefer_server_ciphers on; 这个配置能提高证书的评分。
ssl_dhparam /etc/nginx/ssl/dhparam.pem; 能提高证书评分,这个文件是在第三步时生成的,若没有做则不需要写这句。
nginx -t验证一下nginx配置是否正确,然后systemctl restart nginx重启一下nginx

5.更新证书

更新证书不需要做任何操作, acme.sh 会自动创建 cronjob,每天 0:00 点自动检测所有的证书,如果证书快过期了,则会自动更新证书。

6.软件自动更新

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.所以为了省心省力,最好还是设置一下软件的自动更新,执行下面的命令就可以了。

1
acme.sh  --upgrade  --auto-upgrade

参考

本文最后更新于 天前,文中所描述的信息可能已发生改变