使用 FreeSSL.cn 和 ACME.sh 免费申请 SSL 证书
使用 FreeSSL.cn 和 ACME.sh 免费申请 SSL 证书,包含工具使用原理以及详细的操作步骤。
申请步骤:
Step 1. 在 FreeSSL.cn 上创建证书申请,并获取带有申请密钥的 acme.sh
命令。
Step 2. 使用此命令在目标服务器上自动获取和下载证书。
Step 3. 使用 acme.sh
自动将证书安装到 Nginx ,并更新配置使之生效。
步骤一:填写证书申请
FreeSSL.cn 介绍
FreeSSL 是一个免费的证书颁发机构( CA ),为用户提供了一个简单的界面,使其能够轻松申请、管理和续订证书。它是一个基于 ACME ( Automatic Certificate Management Environment )协议提供免费 SSL 证书的服务。
为什么它是免费的?
FreeSSL.cn 也旨在鼓励更多的网站使用 HTTPS ,从而提高整体的网络安全性,提供免费的证书能够降低使用 HTTPS 的门槛。它们会有一些其他途径的收入,例如通过提供增值服务、捐款或其他合作模式来支持其运营。
提供的证书安全吗?
就技术层面而言,由 FreeSSL.cn 颁发的证书与其他颁发机构的证书在安全性上是一致的。
FreeSSL.cn 填写证书申请
访问域名: https://freessl.cn/acme-deploy
登录之后,点击添加开始创建 SSL 证书申请:
建议申请时使用*.
格式申请一个泛域名证书,以便在子域名下也可以复用此证书:
如果申请 abc.com ,则 d.abc.com 域名不可使用此证书。
点击下一步,然后在 DCV 配置中,会自动创建对应的 CNAME 主机记录以及对应的记录值。
这一步是为了验证域名所有权,避免你对不属于你的域名创建证书。你需要在域名解析中创建一条 CNAME 记录,并将主机记录和记录值都设置为要求的值。
如果你是阿里云购买的域名,配置方法可以参考 => 阿里云配置 CNAME 方法
添加完成之后,点击【配置完成,立即检测】。如果配置正确验证通过以后,将跳转到部署页面:
在这里,你会获得 FreeSSL.cn 自动创建的 acme.sh 部署命令,将它复制保存下来。
步骤二:创建、下载证书
在这个步骤中,我们将使用 acme.sh 脚本来自动化的申请、创建、下载 SSL 证书。但是在开始之前,我们先了解以下 acme.sh 的工作原理。
如果你不想了解原理,可以直接跳到【安装 acme.sh 】部分开始部署。
ACME 和 acme.sh 的关系
ACME 是一种协议,定义了如何自动化地管理和部署 SSL/TLS 证书,而 acme.sh 是一个实现这个协议的工具,允许用户使用这种自动化方法来管理他们的证书。
想象一下你买了一个新的安全箱来存放你的珍贵物品。这个安全箱有一套特定的规则来创建和使用钥匙,确保只有正确的钥匙才能打开。这套规则就是 ACME。
但问题是,这套规则可能对普通人来说太复杂,难以理解。这时,你可能会希望有一个简单的工具或机器,你只需告诉它你的需求,它就会为你制作出完美的钥匙。这个工具或机器就是 acme.sh。
因此,ACME 就是为安全箱创建和使用钥匙的规则,而 acme.sh 是帮助你根据这些规则制作钥匙的工具。
acme.sh 工作原理
acme.sh 是一个自动化工具,你只需要提供给它必要的信息,它就可以帮你自动化完成证书申请相关的工作。
需要提供的信息:
- 提供域名信息:告诉
acme.sh
你要为哪个网站或域名获取证书。 - 选择验证方法:简单地说,你只需要告诉
acme.sh
你是如何证明这个域名确实属于你的。 - (可选)提供邮件地址:这样在证书即将过期时,你可以接到提醒。
自动完成的工作:
- 验证域名:它会按照你选择的方法自动证明你拥有该域名。
- 获取证书:一旦域名得到验证,它会自动从证书机构获取证书。
- 自动续期:你不必担心证书过期。
acme.sh
会自动跟踪并在需要的时候为你续期。 - 安装到你的服务:如果你希望,
acme.sh
还可以帮助你自动将新的证书放到你的网站或其他服务上。
安装 acme.sh
建议切换到 root 模式,可以减少证书安装时的问题
注意: macOS 不用切换到 root 更简单。
curl https://get.acme.sh | sh -s email=my@example.com
如果上面官方下载地址失败 或者 太慢,可以选用国内的备用地址
curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=my@example.com
注意:安装完成后,再重新打开命令行(如果是 SSH ,选择重新连接),以使 acme.sh 命令生效。
你可能会遇到以下警告信息,可以忽略:
standalone mode
是 acme.sh
(和其他 ACME 客户端)中的一种模式,用于处理 ACME 协议中的域名验证。在此模式下,acme.sh
会启动一个临时的 web 服务器,这样当证书颁发机构尝试访问您的域名来验证其所有权时,它可以响应验证请求。
因为你在 FreeSSL.cn 上申请证书,并使用 DNS 方式验证域名所有权,所以不需要使用 standalone mode
。
使用 acme.sh 申请并下载证书
在终端中运行你在 FreeSSL.cn 上 获得的 acme.sh 部署命令:
acme.sh --issue -d *.abc.com --dns dns_dp --server https://acme.freessl.cn/v2/DV90/directory/o988q3sfsg3g46sfo10p
注意:如果你使用*.
申请的泛域名,需要手动为 命令中的*.abc.com
添加双引号 =>"*.abc.com"
,否则 shell 中会报错。
这段命令是使用 acme.sh
脚本为 *.abc.com
域名申请一个通配符 SSL/TLS 证书。它使用 DNS 验证方法,并通过 FreeSSL 的 ACME 服务器处理申请,其中o988q3sfsg3g46sfo10p
是你用于与服务器交互的密钥。
有时候服务端会签发失败,如果遇到这种情况,可以多试几次:
证书文件存放位置
证书申请成功之后,默认会保存到~/.acme.sh/
目录下。
在这个路径下,会自动创建一个以域名为名的目录,在这个目录中会有 SSL 证书文件和私钥文件:
- 证书文件:
域名。 cer
- 私钥文件:
域名。 key
步骤三:安装证书到服务器( Nginx )
申请完证书后,下一步需要将证书安装到你的服务器或服务上,acme.sh
为这一任务提供了便捷的命令。
复制证书到 Nginx 目录
一般情况下,acme.sh
会在你的家目录下创建一个 .acme.sh
的文件夹,并在其中保存证书。
~/.acme.sh/*.abc.com/*.abc.com.cer
~/.acme.sh/*.abc.com/*.abc.com.key
使用 acme.sh
的 --install-cert
命令,可以轻松将证书复制到指定的位置,并设置自动更新。
以下是一个示例命令,该命令将证书复制到 /etc/nginx/ssl
目录下(请根据你的服务器配置进行调整):
acme.sh --install-cert -d *.abc.com
--cert-file /etc/nginx/ssl/*.abc.com.cer
--key-file /etc/nginx/ssl/*.abc.com.key
--reloadcmd "service nginx force-reload"
这个命令也指定了一个 reloadcmd
,这是在证书更新时自动重新加载 Nginx 的命令。
更新 Nginx 配置
接下来,需要在你的服务器(例如 Nginx 或 Apache )的配置中指定新的证书位置。
以下是一个简化的 Nginx 配置示例:
server {
listen 443 ssl;
server_name pro.shenbi.fun;
ssl_certificate /etc/nginx/ssl/pro.shenbi.fun.cer;
ssl_certificate_key /etc/nginx/ssl/pro.shenbi.fun.key;
# ... 其他配置 ...
}
修改完配置后,你需要重新加载或重启服务器来使新的证书生效。对于 Nginx ,可以使用:
sudo service nginx reload
最后,你应该通过浏览器访问你的站点,检查证书是否正确安装并且为浏览器所接受。