网站分页设计作用,网络域名也可以用中文名称来命名,电脑课做网站所需的软件,网页空间网站前言
随着信息安全形势的日益严峻#xff0c;等保#xff08;信息安全等级保护#xff09;要求成为各行业信息系统必须遵守的标准。在数据库领域#xff0c;OpenGauss作为一款高性能、安全、可靠的开源关系型数据库#xff0c;也需要满足等保要求#xff0c;确保数据的安…前言
随着信息安全形势的日益严峻等保信息安全等级保护要求成为各行业信息系统必须遵守的标准。在数据库领域OpenGauss作为一款高性能、安全、可靠的开源关系型数据库也需要满足等保要求确保数据的安全传输。本文将详细介绍在等保要求下如何为OpenGauss配置SSL客户端接入认证。
一、配置客户端接入认证
背景信息 如果主机需要远程连接数据库必须在数据库系统的配置文件中增加此主机的信息并且进行客户端接入认证。配置文件默认名称为pg_hba.conf存放在数据库的数据目录里。hbahost-based authentication表示是基于主机的认证。
本产品支持如下三种认证方式这三种方式都需要配置“pg_hba.conf”文件。
基于主机的认证服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。 口令认证包括远程连接的加密口令认证和本地连接的非加密口令认证。 SSL加密使用OpenSSL开源安全通信库提供服务器端和客户端安全连接的环境。 “pg_hba.conf”文件的格式是一行写一条信息表示一个认证规则空白和注释以#开头被忽略。
[ommworker1 dn1]$ lsbase gswlm_userinfo.cfg pg_errorinfo pg_llog pg_replslot pg_twophase postgresql.conf.lock server.keycacert.pem mot.conf pg_hba.conf pg_location pg_serial PG_VERSION postmaster.opts server.key.ciphergaussdb.state pg_clog pg_hba.conf.bak pg_logical pg_snapshots pg_xlog postmaster.pid server.key.randglobal pg_csnlog pg_hba.conf.lock pg_multixact pg_stat_tmp postgresql.conf postmaster.pid.lock undogs_gazelle.conf pg_ctl.lock pg_ident.conf pg_notify pg_tblspc postgresql.conf.guc.bak server.crt[ommworker1 dn1]$ vim pg_hba.conf 每个认证规则是由若干空格和/空格和制表符分隔的字段组成。如果字段用引号包围则它可以包含空白。一条记录不能跨行存在。
1. 以操作系统用户omm登录数据库主节点。
2. 配置客户端认证方式
允许客户端以“jack”用户连接到本机此处远程连接禁止使用“omm”用户即数据库初始化用户。
例如下面示例中配置允许IP地址为192.0.2.121的客户端访问本机。 gs_guc set -N all -I all -h “host all jack 192.0.2.121/32 sha256”
[ommworker1 dn1]$ gs_guc set -N all -I all -h host all jack 192.0.2.121/32 sha256The gs_guc run with the following arguments: [gs_guc -N all -I all -h host all jack 192.0.2.121/32 sha256 set ].Begin to perform the total nodes: 1.Popen count is 1, Popen success count is 1, Popen failure count is 0.Begin to perform gs_guc for datanodes.Command count is 1, Command success count is 1, Command failure count is 0.
Total instances: 1. Failed instances: 0.ALL: Success to perform gs_guc!
[ommworker1 dn1]$ 3. 创建“jack”用户
使用“jack”用户前需先本地连接数据库并在数据库中使用如下语句建立“jack”用户 CREATE USER jack PASSWORD ‘Test123’;
[rootworker1 mnt]# su - ommLast login: Mon Jun 10 10:04:09 CST 2024 on pts/1[ommworker1 ~]$ gsql -d postgres -p 15000gsql ((openGauss 6.0.0-RC1 build ed7f8e37) compiled at 2024-03-31 11:59:31 commit 0 last mr )Non-SSL connection (SSL connection is recommended when requiring high-security)Type help for help.
openGauss# CREATE USER jack PASSWORD Test123;CREATE ROLEopenGauss# -N all表示openGauss的所有主机。
-I all表示主机的所有实例。
-h表示指定需要在“pg_hba.conf”增加的语句。
all表示允许客户端连接到任意的数据库。
jack表示连接数据库的用户。
192.0.2.121/32表示只允许IP地址为192.0.2.121的主机连接。此处的IP地址不能为openGauss内的IP在使用过程中请根据用户的网络进行配置修改。32表示子网掩码为1的位数即255.255.255.255。
sha256表示连接时jack用户的密码使用sha256算法加密。
这条命令在数据库主节点实例对应的“pg_hba.conf”文件中添加了一条规则用于对连接数据库主节点的客户端进行鉴定。
“pg_hba.conf”文件中的每条记录可以是下面四种格式之一四种格式的参数说明请参见配置文件参考。 [ommworker1 dn1]$ vim pg_hba.conf
local DATABASE USER METHOD [OPTIONS] host DATABASE USER ADDRESS METHOD [OPTIONS] hostssl DATABASE USER ADDRESS METHOD [OPTIONS] hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
因为认证时系统是为每个连接请求顺序检查“pg_hba.conf”里的记录的所以这些记录的顺序是非常关键的。
说明 在配置“pg_hba.conf”文件时请依据通讯需求按照格式内容从上至下配置记录优先级高的需求需要配置在前面。openGauss和扩容配置的IP优先级最高用户手动配置的IP请放在这二者之后如果已经进行的客户配置和扩容节点的IP在同一网段请在扩容前删除扩容成功后再进行配置。 因此对于认证规则的配置建议如下 靠前的记录有比较严格的连接参数和比较弱的认证方法。靠后的记录有比较宽松的连接参数和比较强的认证方法。
说明
一个用户要想成功连接到特定的数据库不仅需要通过pg_hba.conf中的规则检查还必须要有该数据库上的CONNECT权限。如果希望控制某些用户只能连接到指定数据库赋予/撤销CONNECT权限通常比在pg_hba.conf中设置规则更为简单。
4. 配置客户端认证示例
对应openGauss外部客户端连接trust为不安全的认证方式请将认证方式设置为sha256。 [ommworker1 dn1]$ vim pg_hba.conf
示例 TYPE DATABASE USER ADDRESS METHOD
“local” is for Unix domain socket connections only #表示只允许以安装时-U参数指定的用户从服务器本机进行连接。 local all all trust IPv4 local connections: #表示允许jack用户从192.0.2.121主机上连接到任意数据库使用sha256算法对密码进行加密。 host all jack 192.0.2.121/32 sha256 #表示允许任何用户从192.0.2.121/24网段的主机上连接到任意数据库使用sha256算法对密码进行加密并且经过SSL加密传输。 hostssl all all 192.0.2.121/24 sha256 #表示禁止任何用户从192.0.2.121/32网段的主机上连接到任意数据库。 host all all 192.0.2.121/32 reject 二、SSL证书管理
openGauss默认配置了通过openssl生成的安全证书、私钥。
1、证书生成
在测试环境下用户可以用通过以下方式进行数字证书测试。在客户的运行环境中请使用从CA认证中心申请的数字证书。
2、自认证证书生成过程
2.1 搭建CA环境。
–假设用户为omm已存在,搭建CA的路径为test –以root用户身份登录Linux环境,切换到用户omm
[rootworker1 ~]# su - ommLast login: Tue Jun 4 22:05:29 CST 2024 on pts/0[ommworker1 ~]$ lsgaussdb_tmp[ommworker1 ~]$ mkdir test[ommworker1 ~]$ cd /etc/pki/tls/[ommworker1 tls]$ lscert.pem certs misc openssl.cnf private[ommworker1 tls]$ –copy 配置文件openssl.cnf到test下
[ommworker1 tls]$ lscert.pem certs misc openssl.cnf private[ommworker1 tls]$ cp openssl.cnf ~/test[ommworker1 tls]$ cd ~/test[ommworker1 test]$ lsopenssl.cnf[ommworker1 test]$ –到test文件夹下开始搭建CA环境 –创建文件夹demoCA./demoCA/newcerts./demoCA/private
[ommworker1 test]$ mkdir ./demoCA ./demoCA/newcerts ./demoCA/private[ommworker1 test]$ chmod 700 ./demoCA/private[ommworker1 test]$ –创建serial文件,写入01 [ommworker1 test]$ echo 01./demoCA/serial –创建文件index.txt
[ommworker1 test]$ touch ./demoCA/index.txt[ommworker1 test]$ –修改openssl.cnf配置文件中的参数
[ommworker1 test]$ lsdemoCA openssl.cnf[ommworker1 test]$ vim openssl.cnf
dir ./demoCAdefault_md sha256 –至此CA环境搭建完成
2.2 生成根私钥。
–生成CA私钥
[ommworker1 test]$ [ommworker1 test]$ openssl genrsa -aes256 -out demoCA/private/cakey.pem 2048Generating RSA private key, 2048 bit long modulus (2 primes)............................................................e is 65537 (0x010001)Enter pass phrase for demoCA/private/cakey.pem: –设置根私钥的保护密码假设为Test123 Enter pass phrase for demoCA/private/cakey.pem: –再次输入私钥密码 Test123 Verifying - Enter pass phrase for demoCA/private/cakey.pem: 2.3 生成根证书请求文件。
–生成CA根证书申请文件careq.pem
[ommworker1 test]$ [ommworker1 test]$ openssl req -config openssl.cnf -new -key demoCA/private/cakey.pem -out demoCA/careq.pemEnter pass phrase for demoCA/private/cakey.pem: –输入根私钥密码 Test123
[ommworker1 test]$ [ommworker1 test]$ openssl req -config openssl.cnf -new -key demoCA/private/cakey.pem -out demoCA/careq.pemEnter pass phrase for demoCA/private/cakey.pem:You are about to be asked to enter information that will be incorporatedinto 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 blankFor some fields there will be a default value,If you enter ., the field will be left blank.----- –以下名称请牢记生成服务端证书和客户端证书时填写的信息需要与此处的一致
Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:shanxiLocality Name (eg, city) [Default City]:xianOrganization Name (eg, company) [Default Company Ltd]:AbcOrganizational Unit Name (eg, section) []:helloCommon Name (eg, your name or your servers hostname) []:openEmail Address []:
Please enter the following extra attributesto be sent with your certificate requestA challenge password []:An optional company name []:[ommworker1 test]$ 2.4 生成自签发根证书。
–生成根证书时需要修改openssl.cnf文件设置basicConstraintsCA:TRUE [ommworker1 test]$ vim openssl.cnf –生成CA自签发根证书
[ommworker1 test]$ [ommworker1 test]$ openssl ca -config openssl.cnf -out demoCA/cacert.pem -keyfile demoCA/private/cakey.pem -selfsign -infiles demoCA/careq.pemUsing configuration from openssl.cnfEnter pass phrase for demoCA/private/cakey.pem: –输入根私钥密码 Test123
[ommworker1 test]$ openssl ca -config openssl.cnf -out demoCA/cacert.pem -keyfile demoCA/private/cakey.pem -selfsign -infiles demoCA/careq.pemUsing configuration from openssl.cnfEnter pass phrase for demoCA/private/cakey.pem:Check that the request matches the signatureSignature okCertificate Details: Serial Number: 1 (0x1) Validity Not Before: Jun 9 06:58:22 2024 GMT Not After : Jun 9 06:58:22 2025 GMT Subject: countryName CN stateOrProvinceName shanxi organizationName Abc organizationalUnitName hello commonName world X509v3 extensions: X509v3 Basic Constraints: CA:TRUE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 2C:49:CE:02:2F:37:8F:AE:3E:5F:83:A9:38:1A:12:16:1B:E1:FB:C0 X509v3 Authority Key Identifier: keyid:2C:49:CE:02:2F:37:8F:AE:3E:5F:83:A9:38:1A:12:16:1B:E1:FB:C0
Certificate is to be certified until Jun 9 06:58:22 2025 GMT (365 days)Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated[ommworker1 test]$ –至此CA根证书自签发完成根证书demoCA/cacert.pem。
2.5 生成服务端证书私钥。
–生成服务端私钥文件server.key
[ommworker1 test]$ openssl genrsa -aes256 -out server.key 2048Generating RSA private key, 2048 bit long modulus (2 primes).............................................................................................................................................e is 65537 (0x010001)Enter pass phrase for server.key:Verifying - Enter pass phrase for server.key:[ommworker1 test]$ –服务端私钥的保护密码假设为Test123 Verifying - Enter pass phrase for server.key: –再次确认服务端私钥的保护密码即为Test123
2.6 生成服务端证书请求文件。
–生成服务端证书请求文件server.req
[ommworker1 test]$ openssl req -config openssl.cnf -new -key server.key -out server.reqEnter pass phrase for server.key:You are about to be asked to enter information that will be incorporatedinto 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 blankFor some fields there will be a default value,If you enter ., the field will be left blank.----- –以下填写的信息与创建CA时的信息一致
Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:shanxiLocality Name (eg, city) [Default City]:xianOrganization Name (eg, company) [Default Company Ltd]:AbcOrganizational Unit Name (eg, section) []:helloCommon Name (eg, your name or your servers hostname) []:worldEmail Address []:
Please enter the following extra attributesto be sent with your certificate requestA challenge password []:An optional company name []:[ommworker1 test]$ 2.7 生成服务端证书。
–生成服务端/客户端证书时修改openssl.cnf文件设置basicConstraintsCA:FALSE
[ommworker1 test]$ vim openssl.cnf –修改demoCA/index.txt.attr中属性为no。
[ommworker1 test]$ vim demoCA/index.txt.attr –对生成的服务端证书请求文件进行签发签发后将生成正式的服务端证书server.crt
[ommworker1 test]$ openssl ca -config openssl.cnf -in server.req -out server.crt -days 3650 -md sha256Using configuration from openssl.cnfEnter pass phrase for ./demoCA/private/cakey.pem:Check that the request matches the signatureSignature okCertificate Details: Serial Number: 2 (0x2) Validity Not Before: Jun 9 07:07:00 2024 GMT Not After : Jun 7 07:07:00 2034 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: 2B:E3:44:16:67:1B:D1:27:C8:8D:9C:F1:02:72:3C:59:D8:26:B0:47 X509v3 Authority Key Identifier: keyid:2C:49:CE:02:2F:37:8F:AE:3E:5F:83:A9:38:1A:12:16:1B:E1:FB:C0
Certificate is to be certified until Jun 7 07:07:00 2034 GMT (3650 days)Sign the certificate? [y/n]: –选择y对证书进行签发 Sign the certificate? [y/n]:y
–选择y证书签发结束 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated 去掉私钥密码保护方法如下
–去掉服务端私钥的密码保护
[ommworker1 test]$ openssl rsa -in server.key -out server.keyEnter pass phrase for server.key:writing RSA key[ommworker1 test]$ –如果不去掉服务端私钥的密码保护需要使用gs_guc工具对存储密码进行加密保护
[ommworker1 test]$ gs_guc encrypt -M server -D ./The gs_guc run with the following arguments: [gs_guc -M server -D ./ encrypt ].Password: gs_guc encrypt -M server [ommworker1 test]$ –根据提示输入服务端私钥的密码加密后会生成server.key.cipher,server.key.rand两个私钥密码保护文件
2.8 客户端证书私钥的生成。
生成客户端证书和客户端私钥的方法和要求与服务端相同。
–生成客户端私钥
[ommworker1 test]$ openssl genrsa -aes256 -out client.key 2048Generating RSA private key, 2048 bit long modulus (2 primes)...........................................................e is 65537 (0x010001)Enter pass phrase for client.key:Verifying - Enter pass phrase for client.key:[ommworker1 test]$ –生成客户端证书请求文件
[ommworker1 test]$ openssl req -config openssl.cnf -new -key client.key -out client.reqEnter pass phrase for client.key:You are about to be asked to enter information that will be incorporatedinto 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 blankFor some fields there will be a default value,If you enter ., the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:shanxiLocality Name (eg, city) [Default City]:xianOrganization Name (eg, company) [Default Company Ltd]:AbcOrganizational Unit Name (eg, section) []:helloCommon Name (eg, your name or your servers hostname) []:worldEmail Address []:
Please enter the following extra attributesto be sent with your certificate requestA challenge password []:An optional company name []:[ommworker1 test]$ –对生成的客户端证书请求文件进行签发签发后将生成正式的客户端证书client.crt
[ommworker1 test]$ openssl ca -config openssl.cnf -in client.req -out client.crt -days 3650 -md sha256Using configuration from openssl.cnfEnter pass phrase for ./demoCA/private/cakey.pem:Check that the request matches the signatureSignature okCertificate Details: Serial Number: 3 (0x3) Validity Not Before: Jun 9 07:15:47 2024 GMT Not After : Jun 7 07:15:47 2034 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: 1C:2C:1A:11:FE:56:55:E5:71:78:60:AF:C3:89:B5:7C:E2:C8:DF:F6 X509v3 Authority Key Identifier: keyid:2C:49:CE:02:2F:37:8F:AE:3E:5F:83:A9:38:1A:12:16:1B:E1:FB:C0
Certificate is to be certified until Jun 7 07:15:47 2034 GMT (3650 days)Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated[ommworker1 test]$ 去掉私钥密码保护方法如下
–去掉客户端私钥的密码保护
[ommworker1 test]$ openssl rsa -in client.key -out client.keyEnter pass phrase for client.key:writing RSA key[ommworker1 test]$ –如果不去掉客户端私钥的密码保护需要使用gs_guc工具对存储密码进行加密保护
[ommworker1 test]$ gs_guc encrypt -M client -D ./The gs_guc run with the following arguments: [gs_guc -M client -D ./ encrypt ].Password: gs_guc encrypt -M client [ommworker1 test]$ –根据提示输入客户端私钥的密码加密后会生成client.key.cipher,client.key.rand两个私钥密码保护文件。 将客户端密钥转化为DER格式方法如下
[ommworker1 test]$ openssl pkcs8 -topk8 -outform DER -in client.key -out client.key.pk8 -nocrypt[ommworker1 test]$ lsclient.crt client.key.cipher client.key.rand demoCA server.crt server.key.cipher server.reqclient.key client.key.pk8 client.req openssl.cnf server.key server.key.rand[ommworker1 test]$ 三、用SSL进行安全的TCP/IP连接
openGauss支持SSL标准协议TLS 1.2SSL协议是安全性更高的协议标准它们加入了数字签名和数字证书来实现客户端和服务器的双向身份验证保证了通信双方更加安全的数据传输。
前提条件 从CA认证中心申请到正式的服务器、客户端的证书和密钥。假设服务器的私钥为server.key证书为server.crt客户端的私钥为client.key证书为client.crtCA根证书名称为cacert.pem。 当用户远程连接到数据库主节点时需要使用sha256的认证方式。 当内部服务器之间连接时需要使用trust的认证方式支持IP白名单认证。 openGauss在数据库部署完成后默认已开启SSL认证模式。服务器端证书私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。
1、配置客户端参数。
已从CA认证中心申请到客户端默认证书私钥根证书以及私钥密码加密文件。假设证书、私钥和根证书都放在“/home/omm”目录。
[ommworker1 test]$ lsclient.crt client.key.cipher client.key.rand demoCA server.crt server.key.cipher server.reqclient.key client.key.pk8 client.req openssl.cnf server.key server.key.rand[ommworker1 test]$ pwd/home/omm/test[ommworker1 test]$ 1.1 双向认证需配置如下参数
[ommworker1 test]$ [ommworker1 test]$ export PGSSLCERT/home/omm/test/client.crt[ommworker1 test]$ export PGSSLKEY/home/omm/test/client.key[ommworker1 test]$ export PGSSLMODEverify-ca[ommworker1 test]$ export PGSSLROOTCERT/home/omm/test/cacert.pem[ommworker1 test]$ 1.2 单向认证需要配置如下参数
export PGSSLMODE“verify-ca” export PGSSLROOTCERT/home/omm/cacert.pem
2、修改客户端密钥的权限。
客户端根证书密钥证书以及密钥密码加密文件的权限需保证权限为600。如果权限不满足要求则客户端无法以SSL连接到openGauss。
[ommworker1 test]$ chmod 600 client.key[ommworker1 test]$ chmod 600 client.crt[ommworker1 test]$ chmod 600 client.key.cipher[ommworker1 test]$ chmod 600 client.key.rand[ommworker1 test]$ chmod 600 cacert.pem[ommworker1 test]$
须知 从安全性考虑建议使用双向认证方式。 配置客户端环境变量必须包含文件的绝对路径。
3、验证SSL配置
使用支持SSL的数据库客户端工具如gsql、psql等连接到OpenGauss服务器并检查连接是否使用了SSL。可以通过客户端工具的输出或服务器的日志文件来验证SSL连接是否成功建立。
[ommworker1 test]$ gsql sslmoderequire host192.0.2.121 port15000 useromm dbnamepostgresgsql: FATAL: Forbid remote connection with initial user.[ommworker1 test]$ gsql sslmoderequire host192.0.2.121 port15000 userjack dbnamepostgresPassword: gsql ((openGauss 6.0.0-RC1 build ed7f8e37) compiled at 2024-03-31 11:59:31 commit 0 last mr )SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128)Type help for help.
openGauss 显示SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128) 说明使用了SSL
结语
本文介绍了在等保要求下为openGauss配置SSL客户端接入认证的过程。通过启用SSL、配置客户端接入认证规则以及验证SSL连接等步骤可以确保OpenGauss数据库与客户端之间通信的安全性。在配置SSL时请确保你使用的证书和私钥是有效的并且与你的openGauss服务器和客户端兼容。同时需要注意证书管理、权限控制、日志记录和备份恢复等方面的问题注意保护你的SSL证书和私钥文件以防止未经授权的访问和使用。如果你在生产环境中使用openGauss请确保你遵循最佳的安全实践和标准来配置和管理你的SSL连接。以确保整个系统的安全性。