openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接
文章目录
- openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接
- 100.1 背景信息
- 100.2 前提条件
- 100.3 注意事项
- 100.4 操作步骤
- 100.5 相关参考
openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接
100.1 背景信息
openGauss支持SSL标准协议(TLS 1.2),SSL协议是安全性更高的协议标准,它们加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。
100.2 前提条件
从CA认证中心申请到正式的服务器、客户端的证书和密钥。(假设服务器的私钥为server.key,证书为server.crt,客户端的私钥为client.key,证书为client.crt,CA根证书名称为cacert.pem。)
100.3 注意事项
- 当用户远程连接到数据库主节点时,需要使用sha256的认证方式。
- 当内部服务器之间连接时,需要使用trust的认证方式,支持IP白名单认证。
100.4 操作步骤
openGauss在数据库部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。
配置SSL认证相关的数字证书参数,具体要求请参见表1。
-
配置客户端参数。
已从CA认证中心申请到客户端默认证书,私钥,根证书以及私钥密码加密文件。假设证书、私钥和根证书都放在“/home/omm”目录。
双向认证需配置如下参数:
export PGSSLCERT="/home/omm/client.crt" export PGSSLKEY="/home/omm/client.key" export PGSSLMODE="verify-ca" export PGSSLROOTCERT="/home/omm/cacert.pem"
单向认证需要配置如下参数:
export PGSSLMODE="verify-ca" export PGSSLROOTCERT="/home/omm/cacert.pem"
-
修改客户端密钥的权限。
客户端根证书,密钥,证书以及密钥密码加密文件的权限,需保证权限为600。如果权限不满足要求,则客户端无法以SSL连接到openGauss。
chmod 600 client.key chmod 600 client.crt chmod 600 client.key.cipher chmod 600 client.key.rand chmod 600 cacert.pem
须知: 从安全性考虑,建议使用双向认证方式。 配置客户端环境变量,必须包含文件的绝对路径。
表 1 认证方式
认证方式 | 含义 | 配置客户端环境变量 | 维护建议 |
---|---|---|---|
双向认证(推荐) | 客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。 | 设置如下环境变量:PGSSLCERTPGSSLKEYPGSSLROOTCERTPGSSLMODE | 该方式应用于安全性要求较高的场景。使用此方式时,建议设置客户端的PGSSLMODE变量为verify-ca。确保了网络数据的安全性。 |
单向认证 | 客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。 | 设置如下环境变量:PGSSLROOTCERTPGSSLMODE | 为防止基于TCP链接的欺骗,建议使用SSL证书认证功能。除配置客户端根证书外,建议客户端使用PGSSLMODE变量为verify-ca方式连接。 |
100.5 相关参考
在服务器端的postgresql.conf文件中配置相关参数,详细信息请参见表2。
表 2 服务器参数
参数 | 描述 | 取值范围 |
---|---|---|
ssl | 表示是否启动SSL功能。 | on:开启SSL功能。off:关闭SSL功能。**默认值:**off |
require_ssl | 设置服务器端是否强制要求SSL连接。该参数只有当参数ssl为on时才有效。 | on:服务器端强制要求SSL连接。off:服务器端对是否通过SSL连接不作强制要求。**默认值:**off |
ssl_cert_file | 指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。 | 请以实际的证书名为准,其相对路径是相对于数据目录的。默认值:server.crt |
ssl_key_file | 指定服务器私钥文件,用以对公钥加密的数据进行解密。 | 请以实际的服务器私钥名称为准,其相对路径是相对于数据目录的。默认值:server.key |
ssl_ca_file | CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。 | 请以实际的CA服务器根证书名称为准。默认值:cacert.pem |
ssl_crl_file | 证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。 | 请以实际的证书吊销列表名称为准。默认值:空,表示没有吊销列表。 |
ssl_ciphers | SSL通讯使用的加密算法。 | 本产品支持的加密算法的详细信息请参见表4。**默认值:**ALL,表示允许对端使用产品支持的所有加密算法,但不包含ADH、LOW、EXP、MD5算法。 |
ssl_cert_notify_time | SSL服务器证书到期前提醒的天数。 | 请按照需求配置证书过期前提醒天数。**默认值:**90 |
在客户端配置SSL认证相关的环境变量,详细信息请参见表3。
说明: 客户端环境变量的路径以“/home/omm”为例,在实际操作中请使用实际路径进行替换。
表 3 客户端参数
环境变量 | 描述 | 取值范围 |
---|---|---|
PGSSLCERT | 指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。 | 必须包含文件的绝对路径,如:export PGSSLCERT='/home/omm/client.crt' 默认值:空 |
PGSSLKEY | 指定客户端私钥文件,用以对公钥加密的数据进行解密。 | 必须包含文件的绝对路径,如:export PGSSLKEY='/home/omm/client.key' 默认值:空 |
PGSSLMODE | 设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。 | **取值及含义:**disable:只尝试非SSL连接。allow:首先尝试非SSL连接,如果连接失败,再尝试SSL连接。prefer:首先尝试SSL连接,如果连接失败,将尝试非SSL连接。require:只尝试SSL连接。如果存在CA文件,则按设置成verify-ca的方式验证。verify-ca:只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。verify-full:只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。**默认值:**prefer |
PGSSLROOTCERT | 指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。 | 必须包含文件的绝对路径,如:export PGSSLROOTCERT='/home\/omm\/certca.pem' **默认值:**空 |
PGSSLCRL | 指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。 | 必须包含文件的绝对路径,如:export PGSSLCRL='/home/omm/sslcrl-file.crl' **默认值:**空 |
服务器端参数ssl、require_ssl与客户端参数sslmode配置组合结果如下:
ssl(服务器) | sslmode(客户端) | require_ssl(服务器) | 结果 |
---|---|---|---|
on | disable | on | 由于服务器端要求使用SSL,但客户端针对该连接禁用了SSL,因此无法建立连接。 |
disable | off | 连接未加密。 | |
allow | on | 连接经过加密。 | |
allow | off | 连接未加密。 | |
prefer | on | 连接经过加密。 | |
prefer | off | 连接经过加密。 | |
require | on | 连接经过加密。 | |
require | off | 连接经过加密。 | |
verify-ca | on | 连接经过加密,且验证了服务器证书。 | |
verify-ca | off | 连接经过加密,且验证了服务器证书。 | |
verify-full | on | 连接经过加密,且验证了服务器证书和主机名。 | |
verify-full | off | 连接经过加密,且验证了服务器证书和主机名。 | |
off | disable | on | 连接未加密。 |
disable | off | 连接未加密。 | |
allow | on | 连接未加密。 | |
allow | off | 连接未加密。 | |
prefer | on | 连接未加密。 | |
prefer | off | 连接未加密。 | |
require | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
require | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-ca | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-ca | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-full | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-full | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 |
SSL传输支持一系列不同强度的加密和认证算法。用户可以通过修改postgresql.conf中的ssl_ciphers参数指定数据库服务器使用的加密算法。目前本产品SSL支持的加密算法如表4所示。
表 4 加密算法套件
OpenSSL套件名 | IANA套件名 | 安全程度 |
---|---|---|
ECDHE-RSA-AES128-GCM-SHA256 | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | HIGH |
ECDHE-RSA-AES256-GCM-SHA384 | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | HIGH |
ECDHE-ECDSA-AES128-GCM-SHA256 | TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | HIGH |
ECDHE-ECDSA-AES256-GCM-SHA384 | TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | HIGH |
DHE-RSA-AES128-GCM-SHA256 | TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 | HIGH |
DHE-RSA-AES256-GCM-SHA384 | TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 | HIGH |
说明:
- 目前只支持上表中的6种加密算法套件。
- 配置参数ssl_ciphers的默认值为ALL,表示支持上表中的所有加密算法。为保持前向兼容保留了DHE算法套件,即DHE-RSA-AES128-GCM-SHA256和DHE-RSA-AES256-GCM-SHA384,根据CVE-2002-20001漏洞披露DHE算法存在一定安全风险,非兼容场景不建议使用,可将ssl_ciphers参数配置为仅支持ECDHE类型算法套件。
- 如需指定以上加密算法套件,可以设置ssl_ciphers为上表中OpenSSL套件名称,加密算法套件之间需要使用分号分割,如在postgresql.conf设置:ssl_ciphers=‘ECDHE-RSA-AES128-GCM-SHA256;ECDHE-ECDSA-AES128-GCM-SHA256’。
- SSL连接认证不仅增加了登录(创建SSL环境)及退出过程(清理SSL环境)的时间消耗,同时需要消耗额外的时间用于加解密所需传输的内容,因此对性能有一定影响。特别的,对于频繁的登录登出,短时查询等场景有较大的影响。
- 在证书有效期小于7天的时候,连接登录会在日志中产生告警提醒。
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!
相关文章:

openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接
文章目录 openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接100.1 背景信息100.2 前提条件100.3 注意事项100.4 操作步骤100.5 相关参考 openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安…...

ESP8266 Node Mcu开发板连接WIFI并上报数据到MQTT服务器——物联网应用开发
一、前言 本文主要介绍关于ESP8266 Node Mcu开发板如何连接WIFI并将本地采集的数据上传到MQTT服务器中。 大家调试可以使用MQTTBox 二、WIFI连接 首先,导入WIFI连接所需的头文件,引入所需库。 #include <ESP8266WiFi.h> 声明字符串常量࿰…...

苍穹外卖(八) 使用WebSocket协议完成来单提醒及客户催单功能
WebSocket介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP…...

网站如何应对网络流量攻击
网络安全问题中,受到流量攻击是一种常见挑战。以下是一系列的专业建议,帮助您预防和减轻这类攻击,从而确保您的网站和数据的安全。 使用 Web 应用程序防火墙 (WAF) Web 应用程序防火墙是一项专门的安全工具,能够检测和拦截恶意流…...
设置Json序列化时字段的顺序
1. 背景 在部分使用场景(如元数据驱动,后台接口仅返回序列化后的json字符串,前端需要根据每个字段在前端呈现),需要手动设置字段的长度。通常情况下,框架是有默认的顺序,如 jackson 默认使用字…...
AcWing5277. 三元组
给定一个长度为 n 的正整数数组 a1,a2,…,an 请你计算,一共有多少个三元组 (i,j,k)(1≤i<j<k≤n),使得 ai⋅aj⋅ak 为最小可能值。 输入格式 第一行包含整数 n。 第二行包含 n 个正整数 a1,a2,…,an。 输出格式 一个整…...

【LeetCode热题100】--121.买卖股票的最佳时机
121.买卖股票的最佳时机 class Solution {public int maxProfit(int[] prices) {int minprice Integer.MAX_VALUE;int maxprofit 0;for(int i 0;i<prices.length;i){if(prices[i] < minprice){minprice prices[i]; //找到最小值}else if(prices[i] - minprice > ma…...
高精度计算
1.高精度加法: 两个非常大的数相加. 代码如下: #include <iostream> #include <cstring> #include <algorithm> #include <vector>using namespace std;vector<int> add(vector<int>&A,vector<int>&am…...

KMP 算法 + 详细笔记
给两个字符串,T"AAAAAAAAB",P"AAAAB"; 可以暴力匹配,但是太费时和效率不太好。于是KMP问世,我们一起来探究一下吧!!! (一)最长公共前后缀 D[i] p[…...

基于主动移频法与AFD孤岛检测的单相并网逆变器matlab仿真
微❤关注“电气仔推送”获得资料(专享优惠) 仿真模型 算法介绍 (1)仿真模型由单相电网、逆变器、滤波环节、PI控制器、PWM生成器、锁相环、AFD控制器s函数、测量模块等构成; (2)采用主动移频法(AFD)进行孤岛检测; (3)相应速度…...

MIT 6.S081 Operating System/Fall 2020 macOS搭建risc-v与xv6开发调试环境
文章目录 本机配置安装环境Homebrew执行安装脚本查看安装是否成功 RISC-V tools执行brew的安装脚本 QEMUXV6 测试有用的参考链接(感谢前辈)写在结尾 本机配置 电脑型号:Apple M2 Pro 2023 操作系统:macOS Ventura 13.4 所以我的电…...

JMeter定时器
一. 同步定时器(Synchronizing Timer) (在Loadrunner中叫做集合点) 思考: 如何模拟多个用户同时抢一个红包?如何测试电商网站中抢购活动、秒杀活动? 1.1 介绍 Sync Timer的目的是阻塞线程,直…...

zookeeper应用场景(二)
单机环境下可以利用jvm级别的锁,比如synchronized、Lock等来实现锁,如果是多机部署就需要一个共享数据存储区域来实现分布式锁 一、分布式锁实现方式 1、基于数据库实现分布式锁 可以用数据库唯一索引来实现 2、基于redis实现分布式锁 redis实现的分…...
Android webView加载高德地图定位不显示问题
如果只显示地图 val webView: WebView findViewById(R.id.webView)webView.settings.javaScriptEnabled truewebView.loadUrl("https://test.cn")//h5地址 如果需要定位,则需要加以下代码,否则不弹窗 webView.webChromeClient object : We…...

94. 二叉树的中序遍历(递归+迭代)
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路: 方法一:递归 中序遍历的操作定义为,若二叉树为空,则空操作,否则: 中序遍历左子树访问根节点中…...

UGUI交互组件Slider
一.Slider对象的结构 对象介绍Slider附加Slider组件Background背景Fill Area填充范围Fill填充对象Handle Slider Area滑块移动范围Handle滑块 二.Slider组件属性 属性说明Fill Rect关联填充对象Handle Rect关联滑块对象Direction设置方向Min Value最大取值Max Value最小取值Wh…...
JAVA经典百题之按位或运算符 `|的使用
当学习Java语言中的按位或运算符 | 时,需要理解其用途、应用场景、示例源代码以及相应的注意事项。以下是一篇关于Java语言按位或运算符的详细文章,包括示例源代码和注释。 Java语言中的按位或运算符 | 按位或运算符 | 是Java语言中用于对二进制位进行…...
C多线程编程- 近似求解π
本程序使用蒙特卡洛方法估算圆周率(π)。它首先创建了指定数量的线程,每个线程生成一个随机点并检查该点是否在单位圆内。基于这些线程的结果,程序计算在单位圆内的点的比例,并乘以4来估算π的值。为了对比,…...
YOLOV7量化第二步: 模型标定
2.模型标定 当然可以,模型量化中的标定(calibration)是一个关键过程,它主要确保在降低计算精度以减少模型大小和提高推理速度的同时,不会显著损害模型的准确性。现在,我将根据您提供的步骤解释这一过程。 …...

前端-uniapp-开发指南
美团外卖微信小程序开发 uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端,学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样式 请求商家外卖数据封装请求并发请求 uni-app框架调用https接口 开发小程…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...