使用Net::ACME2和Let’s Encrypt实现免费通配符TLS

互联网上TLS部署最近取得的改进,很大一部分要归功于Let’s Encrypt(LE),它通过开放访问的RESTful API提供免费的TLS证书。该API有大量不同语言的客户端,包括Perl。(列表包括由cPanel派生的Net::ACME以及Crypt::LE、Protocol::ACME、WWW::LetsEncrypt和Mojo::ACME。)
LE与IETF合作,将他们的“ACME”(自动证书管理环境)协议标准化为互联网标准。即将推出的标准与之前版本的协议不兼容,这需要更新客户端逻辑。
然而,作为客户端采用新协议的激励,LE将通过其新API提供免费的通配符TLS。
我认为这是一个重新设计Net::ACME以支持新协议的好机会,并很快决定一个新发行版最能满足需求。除了已经发生的重大协议变化,我还想做一些“更深层”的改进:
我想整合X::Tiny以减少一些逻辑重复并获取该库的好处。
新协议建议对类结构进行一些修改,这些修改在先前的版本中难以整合。
因此,Net::ACME2现在可用。这是一个适用于任何标准ACME实现的通用客户端库,尽管目前唯一的公开ACME实现是Let’s Encrypt的。他们的API目前只提供测试证书,但一旦有生产端点,我将更新Net::ACME2以使用它。
与它的前身一样,Net::ACME2
… 支持RSA和ECDSA
… 在Perl运行的地方运行——除了核心模块外不需要XS。(参照Crypt::Perl)
… 通过类型化异常报告详细错误
… 依赖最少(没有Moose等。)
我创建了一些脚本以帮助您开始。安装模块后,克隆存储库,进入根项目目录并运行
$ ./examples/http-01.pl
… 或
$ ./examples/dns-01.pl
这些将引导您完成以下步骤(以Let’s Encrypt为例)
阅读服务条款,如果您接受,请继续。
创建RSA或ECC私钥。Net::ACME2将从其中提取公钥并将其作为您的账户标识符发送到ACME服务器。(示例脚本为每次调用创建一个新密钥,但对于生产部署,您应该重复使用密钥。)
通过告诉Net::ACME2证书将包括哪些域名来创建证书订单。ACME服务器将响应“挑战”选项——即如何证明您控制这些域名。目前有两种可用方法:HTTP和DNS。(注意:通配符域名需要DNS方法。)
设置验证。对于HTTP,这意味着创建一个特定域名上的特定URL以返回特定内容;对于DNS,这意味着创建一个具有特定名称和内容的TXT记录。(示例脚本为所有域名使用相同的挑战方法,但您的应用程序可以更灵活。)
向ACME服务器指示您为每个域名接受的挑战。
完成证书订单。这将告诉您是否有任何挑战失败或仍在等待。
如果所有域的挑战都成功,您将获得一个URL,其内容将是新发行的证书。
Net::ACME2,就像ACME标准本身一样,仍然可能发生变化,但它现在可以完成这项工作。试试看吧!
标签
费利佩·加斯帕
费利佩·加斯帕自2000年代初就开始编写Perl,目前定期为cPanel, L.L.C.提供咨询服务。他也是一名有经验的合唱指挥、歌手和风琴师。在业余时间,他喜欢看电影、戏剧、“家庭语言学”和游戏。
浏览他们的文章
反馈
这篇文章有问题吗?请在GitHub上打开一个issue或pull request来帮助我们。