Skip to content

Catofes/rtls

Repository files navigation

RTLS

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中的SNI
  • CheckClientCert=true 检查客户端证书