mosn / mosn

The Cloud-Native Network Proxy Platform
https://mosn.io
Apache License 2.0
4.45k stars 798 forks source link

MOSN透传客户端证书至后端 #2064

Open MengJiapeng opened 2 years ago

MengJiapeng commented 2 years ago

当前是否支持将客户端证书通过头部的方式透传给后端?

taoyuanyuan commented 2 years ago

没太理解,在什么场景下,这个头部是啥?。。

MengJiapeng commented 2 years ago

使用MOSN作为集群网关的场景下,在网关侧做TLS终止,但是后端服务又依赖客户端提供的证书做认证。

Envoy对应的功能实现:https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#x-forwarded-client-cert

taoyuanyuan commented 2 years ago

一个简单的做法,修改mosn代码把tls.ConnectionState保存到变量variable中,然后写一个filter模块获取ConnectionState,想塞什么值就塞什么到header。

https://github.com/mosn/mosn/blob/d5bfc7c73c5911468dfdadfecd8d8a57de4e525d/pkg/proxy/proxy.go#L160

taoyuanyuan commented 2 years ago

https://github.com/mosn/mosn/blob/d5bfc7c73c5911468dfdadfecd8d8a57de4e525d/pkg/filter/stream/ipaccess/stream_filter.go#L49 这样也可以获取conn,然后filter做判断是否tls,然后塞header

MengJiapeng commented 2 years ago

好的,谢谢

nejisama commented 2 years ago

如果要做filter 模块,可以直接获取connection 判断是否是tls connection 就可以了 。

conn := f.handler.Connection().RawConn();
if tlsConn, ok := conn.(*mtls.TLSConn); ok {
}
taoyuanyuan commented 2 years ago

@MengJiapeng 感觉可以做一个通用的filter模块,push给MOSN社区 😄