ginuerzh / gost

GO Simple Tunnel - a simple tunnel written in golang
MIT License
15.84k stars 2.47k forks source link

无法实现socks5+tls双向tls(双向证书校验) #766

Open abcskjowjeoj opened 2 years ago

abcskjowjeoj commented 2 years ago

报错 tls: client didn't provide a certificate

服务端:
./gost -L="socks5+tls://:31799?cert=/root/cert.pem&key=/root/key.pem&ca=/root/ca.pem"

客户端:
./gost -L :8080 -F="socks5+tls://127.0.0.1:31799?cert=/root/cert.pem&key=/root/key.pem"

而tls是可以双向tls的

./gost -L="tls://:31799?cert=/root/cert.pem&key=/root/key.pem&ca=/root/ca.pem"
./gost -L :8080 -F="tls://127.0.0.1:31799?cert=/root/cert.pem&key=/root/key.pem"

用的最新版 gost 2.11.1 (go1.14.2 linux/amd64) 用的有效的tls证书

kingwilliam commented 2 years ago

有点看不明, 您的 server 和 client 是用同一证书吗?

双向验证, 即是 server 和 client 各自要有自家的证书

======================

假设您的 server 和 client 都是 自签证书, 即您也有 自签CA证书

CA = CA.crt server = server.crt, server.key client = client.crt, client.key

服务端: ./gost -L="socks5+tls://:31799?cert=/root/server.crt&key=/root/server.key&ca=/root/ca.crt"

客户端: ./gost -L :8080 -F="socks5+tls://127.0.0.1:31799?cert=/root/client.crt&key=/root/client.key&ca=/root/ca.crt"

======================

如 您的 server 和 client 都是 正式证书, 这时就不需CA证书

server = server.crt, server.key client = client.crt, client.key

服务端: ./gost -L="socks5+tls://:31799?cert=/root/server.crt&key=/root/server.key"

客户端: ./gost -L :8080 -F="socks5+tls://127.0.0.1:31799?cert=/root/client.crt&key=/root/client.key"

abcskjowjeoj commented 2 years ago

我尝试了客户端和服务端 使用相同证书 和使用各自的证书都不行。 不用socks5协议就没有问题,这个跟协议有关