【发布时间】:2019-07-20 19:48:33
【问题描述】:
NewTLSServer 创建的服务器可以验证从它显式创建的客户端的调用:
ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, client")
}))
defer ts.Close()
client := ts.Client()
res, err := client.Get(ts.URL)
在client := ts.Client() 行中。
但是,我有一个生产程序,我想将其设置为使用 ts.URL 作为其主机。我得到了
x509: certificate signed by unknown authority
我调用它时出错。
如何设置ts 以像普通HTTPS 服务器一样向客户端进行身份验证?
【问题讨论】:
-
要么你需要使用正确的证书,要么创建一个不安全的连接到你的 HTTPS 服务器,有点像这样:stackoverflow.com/a/12122718/4121573
-
@Adonis 是的,在我们的生产代码中启用
InsecureSkipVerify的可能性不是一个选项。我将如何“使用正确的证书”?这基本上就是我在原始问题中所要求的。 -
您能说明一下您的情况吗?从问题来看,您似乎正在尝试使用
httptest.NewTLSServer来提供生产中的安全流量。 -
@Adrian 不,我绝对不会尝试在生产中使用它。我试图在测试项目中生产组件的真实调用时模拟外部生产组件。由于它在调用中与之通信的其他生产组件使用 HTTPS,因此我需要来自
NewTLSServer的模拟服务器也使用 HTTPS。 -
@ChrisRedford 我从未尝试为 httptest 生成我自己的证书(或使用有效证书)。但是,理论上,您可以使用
ts := NewUnstartedServer而不是ts := NewTLSServer。然后,您可以调整ts.TLS,它是https://golang.org/pkg/crypto/tls/#Config(您将加载另一个证书)。然后你可以ts.StartTLS()(因为它是一个“未启动的服务器”)。哦,别忘了defer ts.Close()。正如我所说,我从未尝试过,但它可能会奏效。
标签: go