最近项目要放到欧洲环境做演示用,客户要求部署在amazon云上,使用的redis,mq,pgsql都要用云上的组件,而且都要去开启tls连接。项目用的go开发的server,redis和rabbitmq使用的tls配置都是go默认提供的tls.Config对象,设置RootCAs属性就ok了,证书用的是Amazon Trust Services Repository 下面的rootCA
certBytes, err := ioutil.ReadFile("AmazonRootCA1.pem")
if err != nil {
panic(err)
}
clientCertPool := x509.NewCertPool()
ok := clientCertPool.AppendCertsFromPEM(certBytes)
if !ok {
panic("failed to parse root certificate")
}
conf := &tls.Config{
RootCAs: clientCertPool,
InsecureSkipVerify: false,
}
可是配置pgsql时并没有发现有修改tls.Config对象的地方,无奈去amazon官网查找,教程为:
Security with Amazon Aurora PostgreSQL - Amazon Aurora
里面有示例,就是DNS中设置sslrootcert
psql -h testpg.cdhmuqifdpib.us-east-1.rds.amazonaws.com -p 5432 \
"dbname=testpg user=testuser sslrootcert=rds-ca-2015-root.pem sslmode=verify-full"
还有不要忘记设置sslmode,下面是ssmode的解释:
disable: 只尝试非SSL连接。
allow:首先尝试非SSL连接,若失败再尝试SSL连接。
prefer (default):首先尝试SSL连接,若失败再尝试非SSL连接。
require:只尝试SSL连接,若有根证书存在,等同于verify-ca。
verify-ca:只尝试SSL连接,并用根证书验证服务器证书是不是根CA签发的。
verify-full:只尝试SSL连接,并用根证书验证服务器证书是不是根CA签发的,且主题必须匹配连接域名或IP地址。
因此只要修改DNS就可以了 ,amazon的pgsql相关证书在下面的页面中找到
Using SSL/TLS to encrypt a connection to a DB cluster - Amazon Aurora
下载地址为:https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
你把下载好的证书文件的本地地址设置给DNS中的sslrootcert就可以了
pgsql官方client ssl说明:PostgreSQL: Documentation: 14: 34.19.?SSL Support
pgsql官方DNS连接参数说明:PostgreSQL: Documentation: 14: 34.1.?Database Connection Control Functions
|