Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gost客户端报错:x509: certificate signed by unknown authority #295

Closed
bonuschild opened this issue Oct 10, 2023 · 10 comments
Closed

Comments

@bonuschild
Copy link

现象

  • 执行./gost -L socks5://:port -F socks5+tls://usr:pwd@ip:port?secure=true时提示:
 x509: certificate signed by unknown authority
  • 当把secure=true参数去掉时,则可正常连接。

原因

主要是客户端所在的系统不支持dpkg-reconfigure ca-certificates命令,从而没有根证书文件进行校验。

这种情况下,应该如何解决?指定CA路径还是?应该怎么写呢?我看文档里的caFile参数是对于服务端的。

@ginuerzh
Copy link
Member

secure选项是用来让客户端验证服务器证书的有效性。

@bonuschild
Copy link
Author

secure选项是用来让客户端验证服务器证书的有效性。

嗯,还是要加上的,避免证书被伪造或篡改。但是因为客户端没有根证书,所以报那个错误了,执行不下去。除了去除secure选项,还有其他方式吗?

@ginuerzh
Copy link
Member

可以手动指定CA证书文件

gost -L socks5://:port -F socks5+tls://usr:pwd@ip:port?secure=true&caFile=/path/to/caFile

@bonuschild
Copy link
Author

可以手动指定CA证书文件

gost -L socks5://:port -F socks5+tls://usr:pwd@ip:port?secure=true&caFile=/path/to/caFile

这样指定了还是不行。

  • 服务端是let's encrypt生成的证书,在服务端有4个文件,其作用在此文章中有说。我是在客户端指定哪个文件?
  • 如果不是let's encrypt生成的4个文件之一用于客户端进行绑定,要在哪里下载?尝试了官方的lets-encrypt-dst-x3-root.pem和lets-encrypt-isrg-x1-root.pem,都不行。
  • TLS应用这一章节中,是使用ca=方式指定CA文件,应该用哪种方式?
  • 尝试了在客户端使用ca=caFile=方式指定CA文件,但是都“进入了后台运行”,而正常情况下是在前台运行(需使用ctrl+c进行中断),这是为什么呢?
  • 服务端启动命令:gost -L socks5+tls://usr:pwd@:port?probeResistance=code:400 ,目录下有cert.pem和key.pem文件,所以是加载了证书实现tls的。

问题是出在哪儿呢?

@bonuschild
Copy link
Author

可以手动指定CA证书文件

gost -L socks5://:port -F socks5+tls://usr:pwd@ip:port?secure=true&caFile=/path/to/caFile

如果客户端绑定ca成功,终端输出会有提示吗?我的是没有的,我如果不要secure=true,单加一个ca=ca.pem,是可以运行的,不知道这时候实际有没有开启ca的校验 :(

ca.pem在程序同目录下。

@ginuerzh
Copy link
Member

可以试试chain.pem或fullchain.pem。命令行中如果有&符号需要用引号

gost -L socks5://:port -F "socks5+tls://usr:pwd@ip:port?secure=true&caFile=/path/to/caFile"

@bonuschild
Copy link
Author

可以试试chain.pem或fullchain.pem。命令行中如果有&符号需要用引号

gost -L socks5://:port -F "socks5+tls://usr:pwd@ip:port?secure=true&caFile=/path/to/caFile"

破案了!用了双引号就行,我忘了&的含义了,难怪会到后台运行。
实测:

  • 使用chain.pem或者lets-encrypt-dst-x3-root.pem都可以。
  • 使用ca=可以,使用caFile=则不可以,我最后的命令是:
gost -L socks5://:port -F "socks5+tls://usr:pwd@ip:port?secure=true&ca=lets-encrypt-dst-x3-root.pem"

@bonuschild
Copy link
Author

@ginuerzh 还有个现象,首次启动gost会比较慢,CPU占用率飙升。我在一处文档中好像说是会生成证书文件,是这样吗?这一步是否可跳过?

@bonuschild
Copy link
Author

@ginuerzh anyway,先感谢!

@ginuerzh
Copy link
Member

可以提供自定义证书就不会再自动生成了。
https://gost.run/tutorials/tls/#_3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants