使用 FreeSSL.cn 和 ACME.sh 免费申请 SSL 证书

使用 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 证书申请:

image-20230819134148397

建议申请时使用*.格式申请一个泛域名证书,以便在子域名下也可以复用此证书:

如果申请 abc.com ,则 d.abc.com 域名不可使用此证书。
image-20230819134446884

点击下一步,然后在 DCV 配置中,会自动创建对应的 CNAME 主机记录以及对应的记录值。

这一步是为了验证域名所有权,避免你对不属于你的域名创建证书。你需要在域名解析中创建一条 CNAME 记录,并将主机记录和记录值都设置为要求的值。

如果你是阿里云购买的域名,配置方法可以参考 => 阿里云配置 CNAME 方法
image-20230819134818336

添加完成之后,点击【配置完成,立即检测】。如果配置正确验证通过以后,将跳转到部署页面:

image-20230819135423893

在这里,你会获得 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 是一个自动化工具,你只需要提供给它必要的信息,它就可以帮你自动化完成证书申请相关的工作。

需要提供的信息:

  1. 提供域名信息:告诉 acme.sh 你要为哪个网站或域名获取证书。
  2. 选择验证方法:简单地说,你只需要告诉 acme.sh 你是如何证明这个域名确实属于你的。
  3. (可选)提供邮件地址:这样在证书即将过期时,你可以接到提醒。

自动完成的工作:

  1. 验证域名:它会按照你选择的方法自动证明你拥有该域名。
  2. 获取证书:一旦域名得到验证,它会自动从证书机构获取证书。
  3. 自动续期:你不必担心证书过期。acme.sh 会自动跟踪并在需要的时候为你续期。
  4. 安装到你的服务:如果你希望,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 命令生效。

你可能会遇到以下警告信息,可以忽略:

image-20230819142701875

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是你用于与服务器交互的密钥。

有时候服务端会签发失败,如果遇到这种情况,可以多试几次:

image-20230819152016078

证书文件存放位置

证书申请成功之后,默认会保存到~/.acme.sh/目录下。

在这个路径下,会自动创建一个以域名为名的目录,在这个目录中会有 SSL 证书文件和私钥文件:

image-20230819152405901
  • 证书文件: 域名。 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

最后,你应该通过浏览器访问你的站点,检查证书是否正确安装并且为浏览器所接受。