跳转到主要内容

为您的局域网提供TLS *证书*,使用ACME DNS挑战。

项目描述

LAN-Cer:为您的局域网提供证书

lancer 是一个工具,它将快速简单地为域名中的任何数量的主机提供证书,假设您有一个API控制的DNS服务。

问题

您有太多电脑。太多(所有)的它们都需要与互联网通信。而且,我们都知道,任何互联网上的电脑都需要一个TLS证书以及它附带的 锁图标,如果您想与之通信。

例如

  1. 也许您需要测试一些不使用HTTPS就无法工作的Web API,因此您需要为localhost开发证书。
  2. 也许您有一个 OpenWRT 路由器,您需要通过其Web界面进行管理;您不希望每个被入侵的物联网设备或无聊的青少年都能读取您的管理员密码。

那些糟糕的日子

以前解决这类问题的方法通常是

  • ⚠️😡⚠️ 使用垃圾自签名根并不断点击烦人的警告
  • 🔒️🗑️🔒️ 将垃圾自签名根添加到您的信任存储中
  • 🔥😱🔥 完全关闭软件中的证书验证

这些都是类似的坏处:它们降低了您的安全性,并且需要在每个需要与这些端点通信的新机器上重复繁琐的、特定于机器的配置。

解决方案

Let's Encrypt 是这里解决方案的 99%。对于面向公众的互联网服务,使用它几乎可以说是极其简单的;许多网络服务器都提供了内置支持。但是,您不希望在您的开发箱上使用生产证书来部署主网站:您需要在专用测试域名下将条目添加到 /etc/hosts,并且您不需要弄清楚如何将入站公共流量路由到该主机名上的网络服务器以响应该挑战。

幸运的是,Let's Encrypt 提供了 DNS-01 验证,因此您需要做的只是更新一个 DNS 记录。Lancer 使用这个挑战。

您需要什么

您的 DNS 需要托管在一个支持 libcloud 的平台上(我已经测试了 Rackspace DNS 和 CloudFlare),或者 Gandi 的 V5 API,Lancer 对此有特定的支持。您将需要一个 API 密钥。

如何使用它

  1. pip install lancer
  2. mkdir certificates-for-mydomain.com
  3. 为要部署的证书创建空文件: touch certificates-for-mydomain.com/myhost1.lan.mydomain.com.pem certificates-for-mydomain.com/myhost2.lan.mydomain.com.pem .
  4. lancer certificates-for-mydomain.com

首次运行时,lancer 将询问您 4 个问题

  1. 您想使用哪个驱动程序?这应该是 libcloud 驱动程序名称,或者是 Gandi V5 API 的 'gandi'。
  2. 您的用户名是什么?
  3. 您将在哪个 DNS 区域下部署证书?(通常这是域名名的 可注册部分;如果您想要 lan.somecompany.com 的证书,则您的区域通常是 somecompany.com
  4. 您的 API 密钥是什么?这将被提示并存储在 Secretly 中,它使用 Keyring 来安全地存储秘密;这意味着在某些无人看管的配置中,您可能需要 keyrings.alt 来将您的 API 密钥存储在配置文件中,而不是像 KeychainGnomeKeyring 这样的东西。

它将前三个问题的答案存储在 certificates-for-mydomain.com/lancer.json 中,并按照您的密钥环配置存储秘密;因此,您不需要再次回答它们(尽管您可能需要在后续尝试中点击通过安全确认以允许访问您的 API 密钥)。

等待 lancer 记录它已成功部署您的证书,并将您的现在不再为空的 .pem 文件(每个文件将包含一个证书、链证书和私钥)复制到您的局域网上的任何需要的位置。您可以按 ^C 杀死它,或者您可以将它留在后台运行,并让它大约每 90 天自动续订一次。

如果您不将其保留运行,当证书过期时,只需再次运行 lancer certificates-for-mydomain.com 即可。该目录中任何过期或即将到期的 .pem 文件将被续订并替换。您可以通过创建新的空 fully-qualified-domain-name.pem 文件来随时添加新的证书。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

lancer-0.4.0.tar.gz (7.1 kB 查看哈希值)

上传时间

构建分布

lancer-0.4.0-py2.py3-none-any.whl (17.0 kB 查看哈希值)

上传时间 Python 2 Python 3

支持