RTLS 是一个可以自动部署证书的tls代理,用于多节点的证书分发。
Let's Encrypt 的泛域名证书需要使用DNS验证,以及一些节点无法接听80、443时候也无法使用HTTP验证方式,因而难于自动部署证书。此软件可以动态动态的从一个中心证书网站更新指定的证书,由此来实现证书的分法。
可以使用CertDistribution来作为证书中心网站。抑或一个实现了如下HTTP请求的网站。
GET /{{uuid}}/wait/{{cert-serial-number}}
该请求应该是一个阻塞调用,并在证书有更新且serial-number
变化时候返回新证书。其中serial-number
应为big int
转化的10进制字符串。
{
"Listen": "0.0.0.0:443",
"CertsPath": "./certs",
"Debug": true,
"Fallback": "URL",
"LogBufferLen": 10000,
"Rules": [
{
"a.example.com":"tls://[email protected]:443"
},
{
"^(.+\\.|)b.example.com$":"tcp://[email protected]:80"
},
{
"^(.+\\.|)c.example.com$":"direct://www.google.com:443"
}
],
"Certs":{
"a.cert": {
"UUID": "d6ee5e46-d159-cccc-aaaa-bbbbbbbbbbbb"
}
"b.cert": {
"UUID": "d6ee5e46-d159-cccc-aaaa-dddddddddddd"
}
}
}
可以通过配置文件中的"CertGateway":"https://your.cert.center"
来制定证书中心网址。
Rules
指定了转发规则,key
为匹配host
的正则表达式,value
为目标地址, 格式为 [protol]://[certName]@[Host]:[Port]?[ForceSNI=XXX]&[BypassSNI=true]&[CheckClientCert=true]
。
Protol类型:
- tls即通过加密tls连接后端(会忽略证书错误)
- tcp通过tcp连接后端。
- direct直接转发所有tcp请求,不做tls的握手解析。
参数:
ForceSNI=XXX
只在protol=tls
时有效,强制指定连接后端时使用的SNI,无视BypassSNI=true
参数BypassSNI=true
转发SNI请求,忽略Host
中的SNICheckClientCert=true
检查客户端证书