一:国内现状
从今年4月份开始,阿里云和腾讯云提供免费的SSL证书有效期只有3个月,我如何找一款安全,可靠,开源,免费的SSL证书呢, Let’s Encrypt 正是其中一家证书颁发机构
二:如何操作
1.安装 acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
这里邮件地址改一下,由于这个要访问github,国内服务器很多无法访问,提供另一种方法
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com
安装不下来的就需要开白名单,因为要访问github和一些国外的网站,记住你的安装位置,一般是在/root/.acme.sh下面,下面启动要用到这个命令
2.签发证书
打开nginx的配置文件,一般在/etc/nginx下面 ,把下面的配置放进去,并且记住这个root的根目录
server {
listen 80;
server_name 你的域名;
charset utf-8;
# 站点根目录
root /usr/share/nginx/html;
# 处理 Let's Encrypt ACME challenge 请求
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain"; # 设置返回的文件类型为纯文本
root /usr/share/nginx/html; # 确保挑战文件保存在此目录
}
}
配置完成之后如何验证这个路径是可以访问的,确保证书可以下发,用下面这几条命令测试一下
mkdir -p /usr/share/nginx/html/.well-known/acme-challenge/
echo "This is a test file" > /usr/share/nginx/html/.well-known/acme-challenge/testfile.txt
chmod -R 755 /usr/share/nginx/html/.well-known
http://域名/.well-known/acme-challenge/testfile.txt
第一种签发方式:http直接签发 -w路径就是上面的root后面的目录 ,这样写是因为往这个地址下面发送token进行验证
例如:/root/.acme.sh/acme.sh --issue -d www.baidu.com -w /usr/share/nginx/html
/root/.acme.sh/acme.sh --issue -d 你的域名 -w /usr/share/nginx/html
如果此时报错,出现下面这个,说明 服务器是 ZeroSSL类型换一下就行
如果这里报另一种错,这个就是说你的域名DNS解析部署A类型,需要去阿里云或者Cloudflare上面做DNS解析
/root/.acme.sh/acme.sh --set-default-ca --server letsencrypt
然后重新执行颁发命令,下面这个就成功了
第二种签发方式:需要开通nginx的80端口
acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com
这个可能会报各种错,400,403,404,等一系列错误,都是80端口的问题
三:配置到nginx中然后自动更新
前面证书签发成功之后,我们需要创建一个目录来存放证书
mkdid /etc/nginx/tls
配置nginx,证书到期自动更新
/root/.acme.sh/acme.sh --install-cert -d 域名 \
--key-file /etc/nginx/tls/key.pem \
--fullchain-file /etc/nginx/tls/cert.pem \
--reloadcmd "/usr/sbin/nginx -s reload"
最后需要到nginx的配置文件中修改ssl证书位置
ssl_certificate /etc/nginx/tls/cert.pem;
ssl_certificate_key /etc/nginx/tls/key.pem;
四:验证自动更新
crontab -e
使用这个命令会看到里面有一条自动执行的脚本,修改一下,这样就有日志了
32 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" >> /root/acme_cron.log 2>&1
使用命令强制执行一次,更新ssl证书
/root/.acme.sh/acme.sh --cron --home "/root/.acme.sh" >> /root/acme_cron.log 2>&1
查看日志,会告诉你证书是新的,无需更新
tail -f /root/acme_cron.log
参考:github地址