是否可以使用 shell 脚本获取 LetsEncrypt 证书?

是否可以使用 shell 脚本获取 LetsEncrypt 证书?

我想创建一个 shell 脚本来获取让我们加密证书:

#!/bin/bash
sudo docker run -it --rm -p 443:443 -p 80:80 --name certbot \
    -v "/etc/letsencrypt:/etc/letsencrypt" \
    -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
    quay.io/letsencrypt/letsencrypt:latest certonly

但现在我必须手动提供一些信息:

  • 电子邮件地址
  • 选项 2(独立)

是否可以自动化这些输入?

答案1

如果你没有的话,就不要重新发明轮子。其他人(实际上是几个人)已经创建了一个脚本来自动使用 shell 脚本获取和更新 LetEncrypt 证书的过程。 LetsEncrypt 包含第三方客户端列表这里

因为OP询问了一个shell脚本,所以这是一个特别的问题,获取SSL,我已经看过,尝试过。它是完全开源的,并根据 GNU GPL3 许可证获得许可。还有一个维基百科这很好地涵盖了它的使用,以及报告问题的链接。此外,创建者还以“serverco”的名义在 LetsEncrypt 社区论坛中非常活跃,并在那里回答问题。

由于它是一个 shell 脚本,因此安装很简单。 (此处使用的所有路径都是适合我的示例,但您可以更改它们以满足您的需要。)从上面的链接将 getssl 文件下载到您的 bin 文件夹中。当然,其他地方也可以,但在 bin 文件夹中可以简化事情。使其可执行。然后运行它。

$ wget -O - https://raw.githubusercontent.com/srvrco/getssl/master/getssl > ~/bin/getssl
$ chmod 0700 ~/bin/getssl
$ getssl --create yourdomain.name

该选项在和中--create创建默认配置文件( getssl.cfg) 。第一个包含您可能选择注册的所有域的通用信息,第二个包含指定域特有的信息。如果您获得多个域的证书,则每个域都会在 中拥有自己的目录,并且您需要为每个域运行上面的 --create 命令。默认的配置文件有很好的注释,您甚至可以在不查看在线 wiki 的情况下配置它们,尽管提前阅读永远不会有什么坏处(RTFM)。~/.getssl~/.getssl/yourdomain.name~/.getssl

可能有点令人困惑的事情之一是与密钥有关。为了使 SSL 正常工作,服务器必须拥有用于加密过程的密钥对(私有/公共)。这被称为服务器密钥。使用 LetsEncrypt还需要一个密钥对用于与证书服务器通信。这就是所谓的你的账户密钥,或您的 LetsEncrypt 密钥。

对于首次使用 GetSSL 的新帐户,而不是已经处于活动状态的帐户,您可以使用 openssl 非常轻松地创建密钥。此命令将生成一个并为您存储它。

openssl genrsa 4096 > ~/.getssl/LE_account.key

另一方面,如果您已经使用过 LetsEncrypt,那么您已经在某个地方拥有帐户密钥。如果是这样,你必须继续使用相同的密钥来更新您拥有的证书,或者根据需要撤销证书。我不知道其他客户在哪里保存帐户密钥的副本,但我找到了一个资源来解释客户certbot将其保存在哪里。虽然是为了极致而写的,本指南解释如何从 certbot 文件中“提取”帐户密钥。

GetSSL 客户端期望帐户密钥采用标准 PEM 格式,但 certbot 客户端以其他格式将其存储在 JSON 结构内,并且必须提取并转换该密钥。这样做需要使用 JonLundy 的另一个工具,该工具需要 python,因此即使 GetSSL 不需要 python,您也需要这样做。针对上面的示例文件结构进行修改的给定进程为:

$ wget -O - "https://gist.githubusercontent.com/JonLundy/f25c99ee0770e19dc595/raw/6035c1c8938fae85810de6aad1ecf6e2db663e26/conv.py" > conv.py
$ cp /etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/<id>/private_key.json private_key.json
$ openssl asn1parse -noout -out private_key.der -genconf <(python conv.py private_key.json)
$ openssl rsa -in private_key.der -inform der > ~/.gelssl/LE_account.key
$ rm conv.py private_key.json private_key.der

最后一行可能应该替换为更安全的内容。毕竟这涉及到一个相当重要的私钥。也许类似的东西shred -zun13 private_key.json; shred -zun13 private_key.der会更好。

我不是安全专家,也不是服务器专家,因此我无法讨论 GetSSL 或其实现的这些方面。他们可能会更好地解决服务器故障。我也无法回答有关 GetSSL 的大多数问题。最快获得有关 GetSSL 答案的地方似乎是社区LetsEncrypt 的网站,经常可以看到 serverco。该论坛上的许多其他人也处理 GetSSL 问题,并提供了大量答案。

相关内容