Sni
TLS 证书设置都是统一到 SNI 下面配置,这样方便公用
当然对于 TCP , 我们还特殊支持了 SNI 代理模式, 便于大家复用端口,节约资源
SNI同样每一个id必须唯一,不能重复,因为运行时会根据配置变动动态调整监听,不必重启实例
SNI 有以下配置项
Orderint 类型
优先级,数字越小优先级越高, 您可以使用优先级在比如 路由冲突场景确定顺序,避免冲突
默认路由匹配优先顺序为 1)Host (如冲突则会按照 Order依次匹配)
Hoststring[] 类型
域名匹配列表, 可以配置以下格式
精确匹配
完全按照host一模一样对比,例如
Hosts:["a.com"]只能匹配 a.com ,不能匹配 aa.com后缀匹配
后缀一致的匹配方式,例如
Hosts:["*a.com"]能匹配 aa.com ,不能匹配 ab.com任意
Hosts:["*"]这样任意域名都会匹配上,无论 aa.com 还是 bb.org
Passthrough当 代理 tcp SNI 模式时,可选择何时处理证书验证
当值为 true 不在proxy端处理TLS,而是交由后端服务自行处理,此时
Certificate配置将无效,所以也不必配置当值为 false 在proxy端处理TLS,而是转发给后端服务的请求会是解密之后的, 所以 tcp 后端服务不能同时使用TLS 并且
Certificate必须配置Protocols启用的 SSL 协议。 协议名称指定为字符串数组。 默认值为 None
CheckCertificateRevocation指定在身份验证期间是否检查证书吊销列表。
ClientCertificateMode配置客户端证书要求 如下列举所有的值
AllowCertificate将请求客户端证书;但是,如果客户端未提供证书,身份验证不会失败。
DelayCertificate客户端证书不是必需的,并且不会在连接开始时从客户端请求。 应用程序稍后可能会请求它。
NoCertificate客户端证书不是必需的,也不会从客户端请求。
RequireCertificate将请求客户端证书,并且客户端必须提供有效的证书才能成功进行身份验证。
HandshakeTimeout指定 TLS/SSL 握手所允许的最长时间。 这必须为正或 InfiniteTimeSpan。 默认值为 10 秒。
Certificate证书源
(一些测试证书如何生成可参考 在 PowerShell 中创建证书 生成并导出证书 - Linux - OpenSSL)
可以将证书节点配置为从多个源加载证书:
Path和Password用于加载 .pfx 文件。Path、KeyPath和Password用于加载 .pem/ 和 .key 文件。PEM、PEMKey和Password直接从.pem 内容用于加载。Subject和Store用于从证书存储中加载。
证书源所有配置属性如下
Path是证书文件的路径和文件名,关联包含应用内容文件的目录。
KeyPath是证书密钥文件的路径和文件名,关联包含应用内容文件的目录。
PEM是PEM格式证书文件内容
PEMKey是PEM格式证书密钥文件内容
Password是访问 X.509 证书数据所需的密码。
Store是从中加载证书的证书存储。
Subject是证书的主题名称。
AllowInvalid指示是否存在需要留意的无效证书,例如自签名证书。
Location是从中加载证书的存储位置。
比如你可以用 openssl 把 pfx 转换成 pem
openssl pkcs12 -in testCert.pfx -legacy -password pass:testPassword -out testCert.pemRouteId路由配置对应 id
只有当使用 tcp sni代理时,需要直接明确代理到哪一个目的地址,所以必须配置 RouteId,
其他 https 证书场景不必指定