固执己见的letsencrypt acme客户端通过ssh端口转发。
certsling的Python项目详细描述
证书
通过ssh转发http/dns质询,在本地计算机上通过letsencrypt签署tls密钥的自以为是的脚本。
要求
您需要在路径中有一个openssl可执行文件,用于密钥生成和签名。
使用登台服务器进行测试
使用-s选项,您可以使用letsencrypt的临时服务器。 建议您这样做,这样在设置生效之前,您不会遇到配额限制或类似情况。 生成的证书不会验证,但在其他情况下与常规证书具有相同的内容。
基本用法
创建一个以电子邮件地址为名称的目录,您要使用该目录对letsencrypt进行身份验证。 例如webmaster@example.com:
% mkdir webmaster@example.com
创建到服务器的ssh连接,该连接将远程端口转发到本地端口8080:
% ssh root@example.com -R 8080:localhost:8080
在您的服务器上,web服务器需要将对example.com:80/.well-known/acme-challenge/*的请求代理到该转发端口。 nginx的示例:
location /.well-known/acme-challenge/ { proxy_pass http://localhost:8080; }
从前面创建的目录中,调用certsling脚本,例如:
% cd webmaster@example.com % certsling example.com www.example.com
在第一次运行时,系统会询问您是否要创建一个user.key,用于使用letsencrypt进行授权。
之后,将创建选定域的挑战,并在端口8080上启动服务器以提供响应。 您的远程Web服务器通过SSH连接将它们代理到本地运行的服务器。
如果一切顺利,您将在新的example.com文件夹中获得服务器密钥和证书:
% ls example.com ... example.com-chained.crt example.com.crt example.com.key
example.com-chained.crt文件包含完整的证书链以及letsencrypt证书。
高级使用
要使用基于dns的身份验证,您的服务器上需要有socat。 此外,还需要设置dns,以便它将_acme-challenge请求委托给服务器。 为此,您可以将类似的内容添加到区域文件或等效文件中:
_acme-challenge IN NS www _acme-challenge.www IN NS www
对于转发,您需要添加端口8053:: 创建到服务器的ssh连接,该连接将远程端口转发到本地端口8080:
% ssh root@example.com -R 8080:localhost:8080 -R 8053:localhost:8053
然后在ssh会话中,运行以下命令将udp端口53转发到端口8053上的tcp:
# socat -T15 udp4-recvfrom:53,reuseaddr,fork tcp:localhost:8053
对于certsling,您需要添加–dns`选项:
% certsling --dns example.com www.example.com
然后它将首先尝试http质询,如果失败,它将尝试dns质询。
更改日志
0.8.0-2017-01-04
- 添加新的--update(-u)选项以避免记住设置 对于每个域。 [fschulze]
- 要求在出现故障时重复CSR和CRT生成。 [固体炸弹]
- 与dnspython3合并后切换到dnspython。 [fschulze]
0.7.0-2016年12月30日
- 重命名为certsling。 [fschulze]
- 在verify_domains中使用对称差分。这会捕获由于 域名和其他一些情况下的打字错误。 [固体炸弹]
- 更新签入的颁发者名称列表verify_crt。 [固体炸弹(斯泰西·谢尔顿)]
- 更详细的错误报告。 [fschulze]
- 要求同意LetsEncrypt的使用条款并允许更新注册。 [fschulze]
0.6.0-2016-05-09
- 升级至新的x3权限。 [fschulze]
0.5.0-2016年2月12日
- 允许使用-s选项选择letsencrypt.org登台服务器。 [fschulze]
0.4.1-2016年1月29日
- 修复-chained.crt文件未更新的问题。 [fschulze]
0.4.0-2016年1月12日
- 初次发行 [fschulze]