[beego]开启https后默认为双向认证,怎么实现单向认证

2023-12-11 837 views
7
  1. What version of Go and beego are you using (bee version)? v1.6.2

  2. What operating system and processor architecture are you using (go env)? v1.14

  3. What did you do? If possible, provide a recipe for reproducing the error. A complete runnable program is good. 目前在开启https之后,默认为双向认证,想实现单向认证,需要跳过证书校验。在TLS建连时,目前并没有相关参数来设置,用来跳过证书验证。 if err := server.ListenAndServeTLS(BConfig.Listen.HTTPSCertFile, BConfig.Listen.HTTPSKeyFile); err != nil { logs.Critical("ListenAndServeTLS: ", err, fmt.Sprintf("%d", os.Getpid())) time.Sleep(100 * time.Microsecond) endRunning <- true }

  4. What did you expect to see? 如果在beego.Run()里面,可以增加相关参数的配置就完美了,如果要实现单向认证,我理解只需要设置能够设置server.Server.TLSConfig.InsecureSkipVerify这个变量

  5. What did you see instead? 目前暂时还不支持

回答

2

目前我了解的是,的确没有配置来控制单向验证。InsecureSkipVerify并不是用于控制单向验证的:

    // InsecureSkipVerify controls whether a client verifies the
    // server's certificate chain and host name.
    // If InsecureSkipVerify is true, TLS accepts any certificate
    // presented by the server and any host name in that certificate.
    // In this mode, TLS is susceptible to man-in-the-middle attacks.
    // This should be used only for testing.
4

@Qianggggg 难道不是客户端设置InsecureSkipVerify 或者你 用curl -k就可以了么? 服务端不设置证书不就是http了? 如果你要在你的服务中对接第三方https服务,你需要设置客户端的InsecureSkipVerify.

6

看来是我理解不到位,InsecureSkipVerify是客户端用于验证服务端的

8

确实是客户端设置InsecureSkipVerify参数,之前我理解的为服务端。我现在是服务端不想验证客户端的证书

1

那你需要的是什么呢?

9

现在是作为服务端使用beego,开启https之后(不开启http),只支持双向认证,不支持单向

2

@Qianggggg 难道不是客户端去验证服务端的证书么,服务端验证客户端什么 ? 你客户端怎么访问服务端的api的?

3

现在问题点是beego一旦开启了https认证,默认开启双向认证,作为服务端,必须校验客户端证书,无法跳过

8

现在的beego https是双向认证的。也就是client先认证server,然后server认证client,这主要是为了防范中间人。@Qiangggg 的意思是只client验证server,但是server不验证client。说实在的,我突然觉得InsecureSkipVerify说不定还真有效果。只是看注释,是跳过认证,我不太确定是不是双向认证全跳了。 @Qianggggg 可以试试么?把它设置为true。我也没搞过单向认证

5

我作为客户端验证过,这个是可以的,这个参数也写的很清楚,用作客户端跳过服务端的证书验证。服务端明天有空可以看看,目前着急上线,今天在中间挂了层nginx

现在的beego https是双向认证的。也就是client先认证server,然后server认证client,这主要是为了防范中间人。@Qiangggg 的意思是只client验证server,但是server不验证client。说实在的,我突然觉得InsecureSkipVerify说不定还真有效果。只是看注释,是跳过认证,我不太确定是不是双向认证全跳了。 @Qianggggg 可以试试么?把它设置为true。我也没搞过单向认证

5

那我理解了。其实就是在服务端开启,就不会校验客户端,在客户端,就不会校验服务端。