1 回答
TA贡献1784条经验 获得超9个赞
概括
事实证明,证书指向的证书sslcert
需要包含完整的客户端证书链。
当/path/to/db_user.crt
包含客户端证书后跟客户端证书链时,pgx
连接有效。
而该psql
命令在两种情况下都有效:
什么时候
sslcert
只是没有链的叶客户端证书当
sslcert
包含客户端证书+链时
不知道为什么 psql 在没有完整链的情况下很好,但它现在可以工作了。
细节
在后台,pgx 使用pgconn
模块创建连接。反过来,这只是调用和文件tls.X509KeyPair
的内容。sslcert
sslkey
func configTLS(settings map[string]string, thisHost string, parseConfigOptions ParseConfigOptions) ([]*tls.Config, error) {
[...]
sslcert := settings["sslcert"]
sslkey := settings["sslkey"]
[...]
if sslcert != "" && sslkey != "" {
[...]
certfile, err := ioutil.ReadFile(sslcert)
if err != nil {
return nil, fmt.Errorf("unable to read cert: %w", err)
}
cert, err := tls.X509KeyPair(certfile, pemKey)
if err != nil {
return nil, fmt.Errorf("unable to load cert: %w", err)
}
tlsConfig.Certificates = []tls.Certificate{cert}
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报