MENU

Acme申请SSL证书

July 18, 2023 • 技术

前言

在使用TLS时我们常常会通过各种方式申请证书,freessl和宝塔面板都不失为好办法,但是他们都有着自己的缺点。

freessl需要使用DNS验证必须加一条TXT记录来验证所有权。而宝塔面板虽然可以通过文件验证省去了解析TXT记录的步骤,但是在配置低下的服务器上安装宝塔面板无异于让小机器本就羸弱的性能雪上加霜。且这两种方法都需要手机实名验证,让人感到不适。

这时用ACME就能完美的解决这些问题。

准备工作

1.注册域名

2.将域名解析到服务器

安装ACME

更新并安装相关组件

在安装ACME之前我们先更新一下环境并安装socat,请根据服务器linux版本选择命令。

Debian/Ubuntu

apt update -y          #Debian/Ubuntu 命令
apt install -y curl    #Debian/Ubuntu 命令
apt install -y socat    #Debian/Ubuntu 命令

Centos

yum update -y          #CentOS 命令
yum install -y curl    #CentOS 命令
yum install -y socat    #CentOS 命令

安装acme脚本

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

注册CA账户

~/.acme.sh/acme.sh --register-account -m xxxx@xxxx.com

从 acme.sh v 3.0.0 开始,acme.sh 使用 Zerossl 作为默认 ca,您必须先注册帐户(一次),然后才能颁发新证书。将上面的 xxxx@xxxx.com改成你的邮箱回车即可。

提示Create account key ok即为注册成功。

注册成功

申请证书

安装好ACME后我们就可以开始申请证书了。申请证书的方法有临时监听80端口、Nginx申请等,按实际来操作即可。(服务器安装了nginx就用Nginx的来申请,没有就用80端口直接申请。)注意防火墙放行端口。

80 端口空闲的验证申请

如果你的服务器并没有安装nginx之类的web服务80端口为空闲状态,那么你可以让Acme.sh 假装自己是一个 WebServer, 临时监听在 80 端口, 完成验证。

~/.acme.sh/acme.sh  --issue -d mydomain.com   --standalone

Nginx 的方式验证申请

如果你的服务器上已经安装了Nginx,你也可以使用Nginx来申请验证申请。

~/.acme.sh/acme.sh --issue  -d mydomain.com   --nginx

请将mydomain.com改为你要申请证书的实际域名


看到证书和证书路径即为申请成功。

申请成功

安装证书到指定文件夹

用上面的方法申请证书后默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的证书文件。
正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置,比如下面的代码。

~/.acme.sh/acme.sh --installcert -d mydomain.com --key-file /root/private.key --fullchain-file /root/cert.crt

这里的mydomain.com为你要申请证书的域名,key-file和fullchain-file后面的路径分别是密钥文件和证书文件的路径。使用该命令仅更改域名则将在root目录下生成密钥文件private.key和证书文件cert.crt,密钥和证书路径则分别为/root/private.key和/root/cert.crt。

这时我们就可以在root目录下看到证书和密钥文件了。

证书和密钥文件

证书的更新

单次申请证书有效期为30天,但是Acme脚本会自动为证书续期,所以我们无需担心证书的更新问题。

Last Modified: July 30, 2023