服务器上未启用SSL


101

尝试使用go与Postgres数据库进行通信,准备如下语句:

var stmt *sql.Stmt
var err error

stmt, err = db.Prepare(selectStatement)
if err != nil {
    fmt.Printf("db.Prepare error: %v\n",err)
    return err
}

引发以下错误:

db.Prepare error: pq: SSL is not enabled on the server

有什么办法吗?

如果需要,我可以添加更多信息。


1
//,最后我在HashiCorp Vault中收到此错误。
弥敦道(Nathan Basanese)'18年

2
@NathanBasanese,我知道很久以前,但是我解决了?sslmode=disable在on连接字符串上追加的问题。
LucasBr

Answers:


180

您应该建立没有SSL加密的数据库连接,如下所示:

db, err := sql.Open("postgres", "user=test password=test dbname=test sslmode=disable") 

感谢您的拯救生命的评论。顺便说一句:有人知道如何设置psql以支持docker容器的SSL吗?
寺庙

121

如果您的数据源名称是一个url,则可以这样进行:

db, err := sql.Open("postgres", "postgres://username:password@localhost/db_name?sslmode=disable")

sslmode 只是像查询参数一样添加到数据库url中。



10

请注意:

如果您已指定sslmode=disable,但其他参数为空,甚至会发生这种情况。例如dbname=

例如,连接字符串:

user=test password=test dbname=sslmode=disable发出此错误,因为dbname为空。


4
这使我免于本地开发设置,因为此处密码为空。
perelin

0

这就是我的工作方式:

db, err := sql.Open("postgres", "postgres://{user}:{password}@{hostname}:{port}/{database-name}?sslmode=disable")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.