更新时间:2023-10-23 GMT+08:00

连接数据库(以SSL方式)

数据库的go驱动支持SSL连接数据库,当开启SSL模式后,如果go驱动采用SSL方式连接数据库服务端时,go驱动默认走TLS 1.3标准协议,支持的tls版本最低为1.2。本小节主要介绍应用程序通过Go如何采用SSL的方式连接数据库方法前,默认用户已经获取了服务端和客户端所需要的证书和私钥文件,关于证书等文件的获取请参考Openssl相关文档和命令。

基于SSL的证书认证方式不需要在连接串里面指定用户密码。

客户端配置

上传证书文件,将client.key、client.crt、cacert.pem放置在客户端。

示例一:

// 以双向认证为例
func main() {
 dsnStr := "host=127.0.0.1 port=1611 user=testuser password=Gauss_234 dbname=postgres sslcert=certs/client.crt sslkey=certs/client.key sslpassword=abcd "
 parameters := []string {
  " sslmode=require",
  " sslmode=verify-ca sslrootcert=certs/cacert.pem",
 }

 for _, param := range parameters {
  db, err:= sql.Open("opengauss", dsnStr+param)
  if err != nil {
   log.Fatal(err)
  }

  var f1 int
  err = db.QueryRow("select 1").Scan(&f1)
  if err != nil {
   log.Fatal(err)
  } else {
   fmt.Printf("RESULT: select 1: %d\n", f1)
  }

  db.Close()
 }
}

示例二:

// 以验证sslpassword为主
func main() {
 dsnStr := "host=127.0.0.1 port=1611 user=testuser password=Gauss_234 dbname=postgres"

 connStrs := []string {
  " sslmode=verify-ca sslcert=certs/client_rsa.crt sslkey=certs/client_rsa.key sslpassword=abcd sslrootcert=certs/cacert_rsa.pem",
  " sslmode=verify-ca sslcert=certs/client_ecdsa.crt sslkey=certs/client_ecdsa.key sslpassword=abcd sslrootcert=certs/cacert_ecdsa.pem",
 }
 for _, connStr := range connStrs {
  db, err := sql.Open("opengauss", dsnStr + connStr)
  if err != nil {
   log.Fatal(err)
		}
		var f1 int
		err = db.QueryRow("select 1").Scan(&f1)
		if err != nil {
			if !strings.HasPrefix(err.Error(), "connect failed.") {
				log.Fatal(err)
			}
		}
		db.Close()
	}
}