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)
Run Code Online (Sandbox Code Playgroud)
在行中client := ts.Client()。
但是,我有一个生产程序,我想将它设置ts.URL为它的主机。我正进入(状态
x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)
当我调用它时出错。
如何设置ts像普通 HTTPS 服务器一样向客户端进行身份验证?
从 Go 1.11 开始,这根本不可能在一个 _test.go由于 HTTPS 的机制程序中。
但是,你可以做一个单一的证书签名和生成server.crt和server.key文件,然后在引用它们的_test.go从本地目录程序无限期。
.crt和.key一代这是 Daksh Shah 的 Medium 文章《如何在 5 分钟内使 HTTPS 在本地开发环境中正常工作》中指定步骤的节略、稍微简化的版本Mac 上运行。
在你想要你的server.crt和server.key文件的目录中,创建两个配置文件
server.csr.cnf[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=hello@example.com
CN = localhost
Run Code Online (Sandbox Code Playgroud)
和
v3.extauthorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
然后在该目录下输入以下命令
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=hello@example.com
CN = localhost
Run Code Online (Sandbox Code Playgroud)
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
openssl genrsa -des3 -out rootCA.key 2048
# create a passphrase
Run Code Online (Sandbox Code Playgroud)
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem -config server.csr.cnf
# enter passphrase
Run Code Online (Sandbox Code Playgroud)
最后,通过运行使您的系统信任您用于签署文件的证书
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config server.csr.cnf
Run Code Online (Sandbox Code Playgroud)
这应该会在 Keychain Access 应用程序中打开证书,该证书将在Certificates部分中找到并命名为localhost。然后永远相信它
注意:我已经尝试了很多排列security add-trusted-cert从命令行,尽管它将证书添加到钥匙串并将其标记为“始终信任”,但我的 Go 程序不会信任它。只有 GUI 方法将系统置于我的 Go 程序将信任该证书的状态。
您使用 HTTPS 在本地运行的任何 Go 程序现在将信任您使用的服务器,server.crt并且server.key。
您可以创建*httptest.Server使用这些凭据的实例
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
# enter passphrase
Run Code Online (Sandbox Code Playgroud)
这是一个示例用法:
open rootCA.pem
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |