如何永久申请免费泛域名ssl证书与证书部署 | 地表最强教程

先说一下方法,这是基于GitHub开源项目acme.sh与Let's Encrypt无需注册自动更新免费泛域名https证书。

acme项目github链接

acme的中文说明

一、使用ACME的原因

在国内购买云服务器,基本上都可以通过云平台进而申请,但是自2024年之后大部分的厂商能够申请到的证书只有90天的有效期。

阿里云:

腾讯云:

于是,进入我们今天的正篇,如何免费并永久的申请ssl证书。

二、安装ACME

准备好一台云服务器以及备案后的域名。

首先输入下面命令安装acme脚本,我安装的位置为/root/acme/目录下,实际应该是随意位置,避免出现其他麻烦,可以参考我的安装位置。

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

安装成功后的界面:

输入下面命令,修改acme的默认ca为Let’s Encryp

acme.sh --set-default-ca --server letsencrypt

三、获取DNS API 

我购买的是阿里云,其他厂商的应该也大差不差,只要能够Id和Secret 就行了。

以下是阿里云的获取流程,非阿里云服务器的小伙伴可以跳过这部分。

点击跳转阿里云创建ram用户

不过,我这里由于创建过用户,如果你是第一次开通,并且没有开通子账户,则直接按照提示进行下一步即可。

选择用户,创建用户,勾选使用永久Accesskey访问。

接下来保存有关的id和secret,一定要记住其中的 AccessID 和 AccessKeySecret ,脚本中要填写的也就是这两个值。

选择用户,选择添加权限

搜索dns,添加管理dns权限

四、配置API

export Ali_Key="<key>"
export Ali_Secret="<secret>"

输入命令,修改 .bashrc 文件,把上面脚本代码输入进去

vim ~/.bashrc

内容展示:

使用命令i,编写

Esc退出编写

:wq退出保存

保存后重新加载文件

source ~/.bashrc

五、生成泛域名证书

输入下面命令,生成泛域名证书

acme.sh --issue --dns dns_ali -d example.com -d *.example.com

成功后界面:

其中证书文件 fullchain.cer 密钥文件 forminio.cn.key

六、复制证书

我使用的是docker安装的最新版nginx,找到nginx的挂载的配置文件夹/root/nginx/conf/,进入检查是否有ssl文件夹,根据不同版本的nginx进行调整,输入以下命令

acme.sh --install-cert -d example.com \
--key-file       /修改为你的配置路径/nginx/conf/ssl/example.com.key \
--fullchain-file /修改为你的配置路径/nginx/conf/ssl/fullchain.cer \
--reloadcmd     "docker restart nginx"

非docker安装nginx,则:

--reloadcmd     "service nginx reload"

更多复制证书方式,请参考官方中文说明文档

七、配置Nginx

在nginx.conf中定位到server属性配置。(vim中,使用“/”输入文本可以用于定位),如果(新版)初始化没有注释掉的模板server字段也可以自己输入,注意开放443端口,一般默认放开

server {
     #HTTPS的默认访问端口443。
     #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
     listen 443 ssl;
     
     #填写证书绑定的域名
     server_name <yourdomain>;
 
     #填写证书文件绝对路径
     ssl_certificate /path/to/fullchain/nginx/cert.pem
     #填写证书私钥文件绝对路径
     ssl_certificate_key /path/to/keyfile/in/nginx/key.pem
 
     ssl_session_cache shared:SSL:1m;
     ssl_session_timeout 5m;
	 
     #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
     #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

     #表示优先使用服务端加密套件。默认开启
     ssl_prefer_server_ciphers on;
 
 
    location / {
           root html;
           index index.html index.htm;
    }
}

同时注意,如果是docker安装的nginx,注意nginx需要映射443端口,则需要修改为

#填写证书文件绝对路径
ssl_certificate /etc/nginx/ssl/<cert-file-name>.pem;
#填写证书私钥文件绝对路径
ssl_certificate_key /etc/nginx/ssl/<cert-file-name>.key;

若未映射443端口则使用docker命令容器后,再部署

docker rm nginx

部署命令

docker run -d \
  -p 80:80 \
  -p 443:443 \
  --name nginx \
  -v /root/nginx/html:/usr/share/nginx/html \
  -v /root/nginx/logs:/var/log/nginx \
  -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \  # 只挂载配置文件
  -v /root/nginx/conf/ssl:/etc/nginx/ssl:ro \               # 单独挂载证书
  nginx

若已经映射443端口,则重启nginx命令

docker restart nginx

证书的部署完毕,可以输入https://域名 访问,验证是否能够通过。

参考我的博客

以下是维护部分,小伙伴们可以选择性观看。

 八、查看已安装证书信息

acme.sh --info -d example.com

会输出以下信息:

DOMAIN_CONF=/root/.acme.sh/example.com/example.com.conf
Le_Domain=example.com
Le_Alt=no
Le_Webroot=dns_ali
Le_PreHook=
Le_PostHook=
Le_RenewHook=
Le_API=https://acme-v02.api.letsencrypt.org/directory
Le_Keylength=
Le_OrderFinalize=https://acme-v02.api.letsencrypt.org/acme/finalize/23xxxx150/781xxxx4310
Le_LinkOrder=https://acme-v02.api.letsencrypt.org/acme/order/233xxx150/781xxxx4310
Le_LinkCert=https://acme-v02.api.letsencrypt.org/acme/cert/04cbd28xxxxxx349ecaea8d07
Le_CertCreateTime=1649358725
Le_CertCreateTimeStr=Thu Apr  7 19:12:05 UTC 2022
Le_NextRenewTimeStr=Mon Jun  6 19:12:05 UTC 2022
Le_NextRenewTime=1654456325
Le_RealCertPath=
Le_RealCACertPath=
Le_RealKeyPath=/etc/acme/example.com/privkey.pem
Le_ReloadCmd=service nginx force-reload
Le_RealFullChainPath=/etc/acme/example.com/chain.pem

九、更新证书

目前证书每 60 天自动更新,你无需任何操作。

但是你也可以强制续签证书:

acme.sh --renew -d example.com --force

查看定时任务

crontab -l

应该包含:

0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

十、ACME出错

如果出错,请添加 --debug 参数输出详细的调试信息:

acme.sh --issue  .....  --debug 

或者输出更详细的信息:

acme.sh --issue  .....  --debug  2

请参考:https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值