论野生技术&二次元

lua-resty-acme: ACMEv2客户端和Let’s Encrypt证书的自动化管理

 

 

安装

使用opm:

opm中没有luaossl库,所以这种安装使用的是基于FFI的Openssl后端;需要OpenResty链接了大于等于1.1版本的OpenSSL。

也可以使用luarocks安装:

使用

以/etc/openresty目录为例,如果目录不存在,请自行修改。

生成一个账户密钥

生成一个默认证书

在Nginx配置的http 节插入以下内容

首次配置时,建议将init_by_lua_block中的staing = true取消注释,以防错误过多触发限流;测试通过后再加回注释使用生产API。

在需要使用证书的server节插入

CentOS/Fedora等系统的根证书在/etc/ssl/certs/ca-bundle.crt,请根据实际情况修改lua_ssl_trusted_certificate。

保存后,reload nginx。

在一般情况下,domain_whitelist必须配置,以防止恶意请求通过伪造SNI头进行拒绝服务攻击。

如果要匹配一系列域名,可以使用__index来实现。比如下面的例子仅匹配example.com的子域名:

RSA+ECC双证书

将init_by_lua_block中的domain_key_types = { 'rsa', 'ecc' }取消注释后,即可同时申请两套证书。

为了让申请到证书前的握手不出错断开,给Nginx配置默认的ECC证书

然后在server节中原有的ssl_certificate下增加两行

关于加密套件等的选择可借助搜索引擎。

TLS-ALPN-01

0.5.0开始支持tls-alpn-01,可以支持在只开放443端口的环境里完成验证。方法是通过蜜汁FFI偏移找到当前请求的SSL结构,然后设置了新的ALPN。需要多个stream server多次proxy,拓扑结构如下:

第一个stream server打开了443端口,根据请求的ALPN分发到不同的后段;如果是acme-tls则转发到我们的库,否则转发到正常的https。

示例配置见Github

退出移动版