安全管理
概述
本章节描述VDS的安全管理信息。
请务必使用最新的补丁更新操作系统和相关软件,以防漏洞和其他安全问题。
确保应用程序内存数据安全
如下信息对VDS的安全管理至关重要:
在受信任的环境中运行VDS时,必须防止恶意软件扫描或访问用于存储应用程序数据 (包括敏感信息) 的内存。或者,可以在连接数据库时选择“不保存”,密码就不会保存在内存中。
保存数据加密
如下信息对VDS的安全管理至关重要:
可以从“首选项”页面启用加密选项来对自动保存的数据进行加密。有关加密的具体步骤,请参见备份查询/函数/过程。
SQL历史记录
如下信息对VDS的安全管理至关重要:
- 历史执行 SQL 脚本未加密。
“历史执行 SQL”列表不显示包含如下关键字的敏感查询:
- Alter Role
- Alter User
- Create Role
- Create User
- Identified by
- Password
部分查询语法示例列举如下:
- ALTER USER name [ WITH ] option [ … ]]
- CREATE USER name [ [ WITH ] option [ … ] ]
- CREATE ROLE name [ [ WITH ] option [ … ] ]
- ALTER ROLE name [ [ WITH ] option [ … ] ]
SSL证书和服务器配置
当对数据传输的安全性要求较高时,建议使用 SSL 连接。使用非 ssl 连接可能存在安全风险。
VDS可以使用安全套接字层[SSL]选项连接到数据库。添加连接需要下列文件:
# | 证书/密钥 | 说明 |
---|---|---|
1 | 客户端 SSL 证书(client.crt) | 由系统/数据库管理员提供。 |
2 | 客户端 SSL 密钥(client.key) | 由系统/数据库管理员提供。 |
3 | root 证书(cacert.pem) | 由系统/数据库管理员提供。 |
4 | SSL密码 | 由系统/数据库管理员提供。 |
SSL证书生成和服务器配置
使用openssl工具生成服务端证书、私钥、根证书、客户端证书、客户端私钥、吊销证书列表:
生成证书的步骤如下:
openssl功能版本必须在1.1.1以上,用户可以使用openssl version查看版本。
步骤1:搭建CA环境
1、假设用户vastbase已存在,搭建CA的路径为cadir ,以root用户身份登录Linux环境,切换到用户vastbase,执行如下命令创建ca目录并进入:
mkdir cadir
cd cadir
2、copy 配置文件openssl.cnf到cadir目录下 :
cp /etc/pki/tls/openssl.cnf .
3、开始搭建CA环境
a.创建文件夹demoCA./demoCA/newcerts./demoCA/private 。
mkdir ./demoCA ./demoCA/newcerts ./demoCA/private
chmod 777 ./demoCA/private
b.创建serial文件,写入01 。
echo '01'>./demoCA/serial
c.创建文件index.txt 。
touch ./demoCA/index.txt
d.修改openssl.cnf配置文件中配置项[ CA_default ]下的dir参数 。
dir = ./demoCA
default_md = sha256
至此CA环境搭建完成。
步骤2:生成CA私钥
openssl ecparam -out demoCA/private/cakey.pem -name SM2 -genkey
步骤3:生成根请求文件
openssl req -config openssl.cnf -key demoCA/private/cakey.pem -new -out cacert.req
返回内容如下所示,输入对应位置,组织名称等内容:
- 以下输入的名称请牢记,生成服务器证书和客户端证书时填写的信息需要与此处的 一致 。
- 其中Common Name可以随意命名。
- 以下信息可以选择性填写:
- Email Address []:
- A challenge password []:
- An optional company name []
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:shanxi
Locality Name (eg, city) []:xian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abc
Organizational Unit Name (eg, section) []:hello
Common Name (eg, YOUR name) []:world
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
步骤4:生成自签发根证书
1、生成根证书时,需要修改openssl.cnf文件中的配置项[usr_cert]下的basicConstraints参数,打开配置文件:
vi openssl.cnf
修改内容如下:
basicConstraints=CA:TRUE
2、生成CA自签发根证书 。
openssl ca -config openssl.cnf -in cacert.req -keyfile demoCA/private/cakey.pem -selfsign -out demoCA/cacert.pem
返回内容如下所示:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Feb 28 02:17:11 2017 GMT
Not After : Feb 28 02:17:11 2018 GMT
Subject:
countryName = CN
stateOrProvinceName = shanxi
organizationName = Abc
organizationalUnitName = hello
commonName = world
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
F9:91:50:B2:42:8C:A8:D3:41:B0:E4:42:CB:C2:BE:8D:B7:8C:17:1F
X509v3 Authority Key Identifier:
keyid:F9:91:50:B2:42:8C:A8:D3:41:B0:E4:42:CB:C2:BE:8D:B7:8C:17:1F
Certificate is to be certified until Feb 28 02:17:11 2018 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
至此CA根证书自签发完成,根证书demoCA/cacert.pem。
步骤5:生成服务器私钥文件server.key
openssl ecparam -out server.key -name SM2 -genkey
步骤6:生成服务器证书请求文件server.req
openssl req -config openssl.cnf -key server.key -new -out server.req
步骤7:生成服务端证书
openssl req -config openssl.cnf -key server.key -new -out server.req
生成服务端/客户端证书时,需要修改openssl.cnf文件,设置
basicConstraints=CA:FALSE
。
1、打开配置文件。
vi openssl.cnf
修改内容如下:
basicConstraints=CA:FALSE
2、修改demoCA/index.txt.attr中属性为no。
vi demoCA/index.txt.attr
3、对生成的服务器证书请求文件进行签发,签发后将生成正式的服务器证书server.crt 。
openssl ca -config openssl.cnf -in server.req -out server.crt -days 3650
返回如下结果:
- 以下填写的信息与创建CA时的信息一致。
- 其中Common Name可以随意命名。
- 以下信息可以选择性填写:
- Email Address []:
- A challenge password []:
- An optional company name []:
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:shanxi
Locality Name (eg, city) []:xian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abc
Organizational Unit Name (eg, section) []:hello
Common Name (eg, YOUR name) []:world
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
步骤8:生成客户端私钥
openssl ecparam -out client.key -name SM2 -genkey
步骤9:生成客户端证书请求文件
openssl req -config openssl.cnf -new -key client.key -out client.req
步骤10:对生成的客户端证书请求文件进行签发,签发后将生成正式的客户端证书client.crt
openssl ca -config openssl.cnf -in client.req -out client.crt -days 3650 -md sha256
步骤11:配置客户端文件权限
chmod 600 client.key
chmod 600 client.crt
chmod 600 ./demoCA/cacert.pem
chmod 600 server.key
chmod 600 server.crt
步骤12:配置服务器端参数
1、将server.crt,server.key文件拷贝至实例目录下:
cp server.crt server.key ./demoCA/cacert.pem $PGDATA
2、修改postgresql.conf配置文件相关参数:
ssl = on
require_ssl = on
ssl_cert_file='server.crt'
ssl_key_file='server.key'
ssl_ca_file='cacert.pem'
ssl_crl_file = ''
- ssl:表示是否启动SSL功能。
- require_ssl:设置服务器端是否强制要求SSL连接。该参数只有当参数ssl为on时才有效。
- ssl_cert_file:指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。
- ssl_key_file:指定服务器私钥文件,用以对公钥加密的数据进行解密。
- ssl_ca_file:CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。
- ssl_crl_file:证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。
步骤13:配置客户端参数
1、将server.crt,server.key文件拷贝至实例目录下:
export PGSSLCERT="/home/vastbase/cadir/client.crt"
export PGSSLKEY="/home/vastbase/cadir/client.key"
export PGSSLMODE="verify-ca"
export PGSSLROOTCERT="/home/vastbase/data/vastbase/cacert.pem"
- PGSSLCERT:指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。
- PGSSLKEY:指定客户端私钥文件,用以对公钥加密的数据进行解密。
- PGSSLMODE:设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。
- PGSSLROOTCERT:指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。
步骤14:启动数据库实例
vb_ctl start
步骤15:客户端vsql连接服务端
vsql -h 127.0.0.1 -p 5444 -d vastbase -U vbadmin -r