
# 以SSL方式连接
应用程序通过Go驱动连接GaussDB数据库时，可以开启SSL加密客户端和服务端之间的通讯。当开启SSL加密模式时，Go驱动默认执行TLS 1.3标准协议，支持SSL加密模式最低为TLS 1.2标准协议。本小节主要介绍如何采用SSL方式对客户端进行配置。
#### 前提条件
已经获取服务端所需要的证书和私钥文件，并完成服务端配置；同时已经获取客户端所需要的client.crt客户端证书、cacert.pem根证书、client.key客户端私钥文件。
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
关于证书生成和获取，请联系管理员。服务端配置证书的具体操作，请联系管理员。
#### 使用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)
      }
   }
   ```
   
   
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
步骤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)
      }
   }
   ```
   
   
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
步骤2-步骤6为示例中的业务代码。
