1 回答

TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊
概括
事實證明,證書指向的證書sslcert
需要包含完整的客戶端證書鏈。
當(dāng)/path/to/db_user.crt
包含客戶端證書后跟客戶端證書鏈時,pgx
連接有效。
而該psql
命令在兩種情況下都有效:
什么時候
sslcert
只是沒有鏈的葉客戶端證書當(dāng)
sslcert
包含客戶端證書+鏈時
不知道為什么 psql 在沒有完整鏈的情況下很好,但它現(xiàn)在可以工作了。
細(xì)節(jié)
在后臺,pgx 使用pgconn
模塊創(chuàng)建連接。反過來,這只是調(diào)用和文件tls.X509KeyPair
的內(nèi)容。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 關(guān)注
- 131 瀏覽
添加回答
舉報