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 關注
- 123 瀏覽
添加回答
舉報