环境
供应商;阿里云服务器
操作系统:Linux Centos Stream9操作系统
静态代理:Nginx
前言
我这边使用https://get.acme.sh方式无法正常使用,会卡在这个页面,无任何进度的信息。
最终我使用了git clone的方式进行安装。
正文
- clone项目下来,并进行install初始安装ACME环境
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m [email protected]
这里说明下这个邮箱的作用是用于注册 Let's Encrypt 账号的电子邮件,您将在这里收到续订通知邮件。(未进行实际测试验证)。
- 首先设置要使用的默认CA服务器(关于server参数的说明在这里)。
acme.sh --set-default-ca --server letsencrypt
- 签发证书
这里进行签发证书,签发的域名就是你要通过https访问的域名,这个没什么说的。
-w参数指定的目录地址是指你前端项目访问的系统地址,因为acme会在这个目录下写一个临时验证文件,
然后acme会通过你给出的domain域名进行访问,如果访问到这个临时验证文件了,代表这个域名是有效的,之后才会成功签发证书。
--force参数是可选的,在非首次签发时需要加上这个参数,否则就会提示The domain 'domain.cn' seems to already have an ECC cert, let's use it.
./acme.sh --issue -d <要签发的域名> -w <前端项目的目录地址> --force
签发的域名示例:www.example.com。
- 安装证书
acme.sh --install-cert -d www.example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "sudo nginx -s reload"
这里的-d
参数是指定要使用哪个域名的证书进行安装(可以使用acme.sh --list
参数进行查看签发的证书列表),
key-file和fullchain-file参数则是指定安装的目标存储的文件位置(注意这里是指定到文件名级别的)。
reloadcmd则就是更新证书后,如何重启相应的服务加载最新的证书。
这里我使用了sudo来通过nginx的信号控制来重新加载配置(关于这里在下方说明如何配置)。
- 配置Nginx使用证书。
在你对应的https server块中,加入SSL的相关配置信息。
listen 443 ssl;
server_name www.example.com;
# SSL 配置
ssl_certificate /目标路径/cert.pem;
ssl_certificate_key /目标路径/key.pem;
# 强制使用 TLSv1.2 和 TLSv1.3
ssl_protocols TLSv1.2 TLSv1.3;
# 使用现代加密套件
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
}
- 重启Nginx
使用nginx -s reload
重新加载nginx的配置文件即可。
其他
由于我使用的acme是单独建立的用户,接下来我会说明如何建立用户,如何配置sudo,如何给nginx用户添加acme所属者的权限。
# 新增用户
useradd acme
# 给nginx加上acme用户所属组的权限,要重新nginx服务,已加载最新的权限信息(必要的情况下可能需要重新登录)。
usermod -a -G acme nginx
# 配置sudo
visudo
# 通过:定位到100行,增加一句 `acme ALL=(root) NOPASSWD: /usr/sbin/nginx`即可。
常见问题
- 如果在使用
./acme.sh --issue ...
命令签发证书的时候,出现Error creating new order. Le_OrderFinalize not found. {"type":"urn:ietf:params:acme:error:unauthorized","status":401,"detail":"The account has been deactivated"}错误,则说明颁发地址受限了,更换其他的ca server地址。 - 出现The domain 'www.domain.cn' is not a cert name. You must use the cert name to specify the cert to install.错误,表示你指定的证书名称不存在,通过
./acme.sh --list
命令查看下证书的列表吧,如果为空就去issue签发证书吧。 - 出现Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 6或Error creating new order. Le_OrderFinalize not found.错误,我是重试了3遍才成功的,可能是限流401了吧。
附录
- ACME Github地址
- ACME官方的安装方式WIKI
- acme How to install
- How to configure Nginx with Let’s Encrypt on CentOS 8
- 部署 使用 acme.sh 给 Nginx 安装 Let’ s Encrypt 提供的免费 SSL 证书
- acme支持的CA Server
- 关于Create new order error. Le_OrderFinalize not found错误的讨论
- 如何在 Debian/Ubuntu Linux 上使用 Let's Encrypt 配置 Nginx