更新时间:2026-07-28 GMT+08:00
分享

以SSL方式连接

应用程序通过Go驱动连接GaussDB数据库时,可以开启SSL加密客户端和服务端之间的通讯。当开启SSL加密模式时,Go驱动默认执行TLS 1.3标准协议,支持SSL加密模式最低为TLS 1.2标准协议。本小节主要介绍如何采用SSL方式对客户端进行配置。

前提条件

已经获取服务端所需要的证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的client.crt客户端证书、cacert.pem根证书、client.key客户端私钥文件。

关于证书生成和获取,请联系管理员。服务端配置证书的具体操作,请联系管理员。

使用require和verify-ca验证连接数据库

  1. 设置环境变量。

    export GOHOSTIP="XXX.XXX.XXX.XXX"
    export GOPORT=XXX
    export GOUSRNAME="XXX"
    export GOPASSWD="XXXXXXX"
    export GOSSLPASSWD="XXXXXXX"

  2. 导入连接所需的依赖包。

    package main
    //依赖包根据环境中依赖包路径设置。
    import (
       "database/sql"
       _ [go驱动模块名] //请根据go驱动实际模块名替换。
       "os"
       "log"
    )

  3. 调用os.Getenv()方法从环境变量获取IP地址、端口号、用户名、用户密码、SSL密码短语。

    hostip := os.Getenv("GOHOSTIP")   
    port := os.Getenv("GOPORT")       
    usrname := os.Getenv("GOUSRNAME") 
    passwd := os.Getenv("GOPASSWD")   
    sslpasswd := os.Getenv("GOSSLPASSWD")

  4. 采用DSN格式定义连接字符串。

    dsnStr := "host=" + hostip + " port=" + port + " user=" + usrname + " password=" + passwd + " dbname=gaussdb sslcert=certs/client.crt sslkey=certs/client.key sslpassword=" + sslpasswd   

  5. 配置sslmode。

    parameters := []string{
      " sslmode=require",
      " sslmode=verify-ca sslrootcert=certs/cacert.pem",
    }

  6. 启用SSL加密的方式,分别使用require和verify-ca验证连接数据库。

    for _, param := range parameters {
      db, err := sql.Open("gaussdb", dsnStr+param)
      if err != nil {
       log.Fatal(err)
      }
       err = db.Ping()  //验证是否成功连接数据库。
       if err != nil {
          log.Fatal(err)
       }
    }

步骤2-步骤6为示例中的业务代码。

使用RSA和ECDSA两种证书连接数据库

  1. 设置环境变量。

    export GOHOSTIP="XXX.XXX.XXX.XXX"
    export GOPORT=XXX
    export GOUSRNAME="XXX"
    export GOPASSWD="XXXXXXX"
    export GOSSLPASSWD="XXXXXXX"

  2. 导入连接所需的依赖包。

    package main
    //依赖包根据环境中依赖包路径设置。
    import (
       "database/sql"
       _ [go驱动模块名] //请根据go驱动实际模块名替换。
       "os" 
       "log"
    )

  3. 调用os.Getenv()方法从环境变量获取IP地址、端口号、用户名、用户密码、SSL密码短语。

    hostip := os.Getenv("GOHOSTIP")   
    port := os.Getenv("GOPORT")       
    usrname := os.Getenv("GOUSRNAME") 
    passwd := os.Getenv("GOPASSWD")   
    sslpasswd := os.Getenv("GOSSLPASSWD")

  4. 采用DSN格式定义连接字符串。

    dsnStr := "host=" + hostip + " port=" + port + " user=" + usrname + " password=" + passwd + " dbname=gaussdb sslcert=certs/client.crt sslkey=certs/client.key sslpassword=" + sslpasswd   

  5. 配置SSL相关参数。

    connStrs := []string{
      " sslmode=verify-ca sslcert=certs/client_rsa.crt sslkey=certs/client_rsa.key sslpassword=" + sslpasswd + " sslrootcert=certs/cacert_rsa.pem",
      " sslmode=verify-ca sslcert=certs/client_ecdsa.crt sslkey=certs/client_ecdsa.key sslpassword=" + sslpasswd + " sslrootcert=certs/cacert_ecdsa.pem",
    }

  6. 分别使用RSA和ECDSA两种证书来连接数据库。

    for _, connStr := range connStrs {
      db, err := sql.Open("gaussdb", dsnStr+connStr)
      if err != nil {
       log.Fatal(err)
      }
       err = db.Ping()  //验证是否成功连接数据库。
       if err != nil {
          log.Fatal(err)
       }
    }

步骤2-步骤6为示例中的业务代码。

相关文档