openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接

news2024/11/18 18:39:18

文章目录

    • 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
    

img 须知: 从安全性考虑,建议使用双向认证方式。 配置客户端环境变量,必须包含文件的绝对路径。

表 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_fileCA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。请以实际的CA服务器根证书名称为准。默认值:cacert.pem
ssl_crl_file证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。请以实际的证书吊销列表名称为准。默认值:空,表示没有吊销列表。
ssl_ciphersSSL通讯使用的加密算法。本产品支持的加密算法的详细信息请参见表4。**默认值:**ALL,表示允许对端使用产品支持的所有加密算法,但不包含ADH、LOW、EXP、MD5算法。
ssl_cert_notify_timeSSL服务器证书到期前提醒的天数。请按照需求配置证书过期前提醒天数。**默认值:**90

在客户端配置SSL认证相关的环境变量,详细信息请参见表3

img 说明: 客户端环境变量的路径以“/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(服务器)结果
ondisableon由于服务器端要求使用SSL,但客户端针对该连接禁用了SSL,因此无法建立连接。
disableoff连接未加密。
allowon连接经过加密。
allowoff连接未加密。
preferon连接经过加密。
preferoff连接经过加密。
requireon连接经过加密。
requireoff连接经过加密。
verify-caon连接经过加密,且验证了服务器证书。
verify-caoff连接经过加密,且验证了服务器证书。
verify-fullon连接经过加密,且验证了服务器证书和主机名。
verify-fulloff连接经过加密,且验证了服务器证书和主机名。
offdisableon连接未加密。
disableoff连接未加密。
allowon连接未加密。
allowoff连接未加密。
preferon连接未加密。
preferoff连接未加密。
requireon由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。
requireoff由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。
verify-caon由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。
verify-caoff由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。
verify-fullon由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。
verify-fulloff由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

SSL传输支持一系列不同强度的加密和认证算法。用户可以通过修改postgresql.conf中的ssl_ciphers参数指定数据库服务器使用的加密算法。目前本产品SSL支持的加密算法如表4所示。

表 4 加密算法套件

OpenSSL套件名IANA套件名安全程度
ECDHE-RSA-AES128-GCM-SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256HIGH
ECDHE-RSA-AES256-GCM-SHA384TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384HIGH
ECDHE-ECDSA-AES128-GCM-SHA256TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256HIGH
ECDHE-ECDSA-AES256-GCM-SHA384TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384HIGH
DHE-RSA-AES128-GCM-SHA256TLS_DHE_RSA_WITH_AES_128_GCM_SHA256HIGH
DHE-RSA-AES256-GCM-SHA384TLS_DHE_RSA_WITH_AES_256_GCM_SHA384HIGH

img 说明:

  • 目前只支持上表中的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天的时候,连接登录会在日志中产生告警提醒。

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

image-20230710182909917

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue-3.4Vuex

Vuex概述 是什么: vuex是一个vue的状态管理工具,状态就是数据。 Vuex是一个插件,可以帮我们管理vue通用的数据(多组件共享的数据) 例如:购物车数据、个人信息数据 场景: 1)某个…

暴力递归转动态规划(十)

题目 给定一个二维数组matrix[][],一个人必须从左上角出发,最终到达右下角,沿途只可以向下或者向右走,沿途的数字都累加就是距离累加和。返回最小距离累加和。 这道题中会采用压缩数组的算法来进行优化 暴力递归 暴力递归方法的整…

OpenCV学习笔记-环境搭建

文章目录 概述下载安装Visual Studio 2022下载安装OpenCVVisual Studio 配置配置包含路径配置库路径配置链接器配置环境变量Path路径 测试C测试Python 测试 概述 OpenCV(Open source computer vision)是一个跨平台的计算机视觉和机器学习开源库&#xf…

C语言char与short取反以及符号判断问题

这个问题主要是在从对一个变量进行符号判断引出,有一种判断方法是#define ISUNSIGNED(Value) (Value >0 && ~Value >0) 主要是通过将符号位取反然后将变量与0进行比较。传入int与unsigned int结果正确,但是当传入unsigned char 与unsign…

差分进化算法,依旧强势

文章目录 前言DE算法DE代码DE再思考相关阅读 前言 过去两个月,一直在学习线性和整数规划。 今天开始,要回到智能优化算法了。用“回”这个字,主要是因为智能优化算法其实是我的老朋友了,毕竟在读博的大部分时间里,我…

论文阅读:Offboard 3D Object Detection from Point Cloud Sequences

目录 概要 Motivation 整体架构流程 技术细节 3D Auto Labeling Pipeline The static object auto labeling model The dynamic object auto labeling model 小结 论文地址:[2103.05073] Offboard 3D Object Detection from Point Cloud Sequences (arxiv.o…

基于springboot+vue的前后端分离房屋租赁信息网站

项目介绍 在网络高速发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,房东只能以用户为导向,所以开发租房网站是必须的。 系统采用了Java技术&#x…

爬虫 | 【实践】Best Computer Science Scientists数据爬取

文章目录 📚数据需求📚数据爬取🐇排行榜页数据爬取🐇获取详情页🐇目标信息提取 📚完整代码与结果 📚数据需求 姓名,国家,学校 最有名研究领域 目前研究领域 共同作…

16 | 如何自定义 HandlerMethodArgumentResolvers

上一讲我们介绍了 SpringDataWebConfiguration 类的用法,那么这次我们来看一下这个类是如何被加载的,PageableHandlerMethodArgumentResolver 和 SortHandlerMethodArgumentResolver 又是如何生效的,以及如何定义自己的 HandlerMethodArgumen…

c语言练习89:链表的使用

链表的使用 虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构: 单链表 和 双向带头循环链表 1. ⽆头单向⾮循环链表:结构简单,⼀般不会单独⽤来存数据。实际中更多是作为其他数据结 构的⼦结构,如哈希桶、…

数据结构与算法—单链表

目录 一、链表 1、链表的概念及结构 2、分类 二、实现单向链表 1、声明链表结构体 2、输出 3、头插&尾插 4、头删尾删 5、查找 6、指定位置插入 7、删除指定节点 8、删除指定节点的后一个节点 9、单链表的销毁 完整版 LList.h LList.c text.c 一、链表 …

Go错误处理方式真的不好吗?

平时经常上一些网络平台阅读一些技术讨论的话题,对Go语言方面也有些浅浅的关注,正如标题所问,Go语言错误处理可以说算是网络上开发中对Go语言吐槽最多的点之一,那么,Go错误处理真的很不堪吗? 对此我认为&a…

CANoe制作网关实现CAN(FD)报文故障注入(报文长度/timeout/信号错误/E2E)1

CANoe制作网关实现CAN报文故障注入(报文长度/timeout/信号错误/E2E) 文章目录 CANoe制作网关实现CAN报文故障注入(报文长度/timeout/信号错误/E2E)1.基本介绍和实现功能 1.基本介绍和实现功能 下面是一个完整的CAN/CANFD总线&…

【Wifi】Wifi架构介绍

Wifi架构介绍 本文基于Android介绍其Wifi架构。Wifi是许多操作系统提供的重要功能之一,特别是越来越多的车载系统wifi是其必备功能。为啥wifi是必备功能? 一方面是传统的上网(现在有些车载使用DCM模块管理网络),另一方…

项目管理软件中注释功能的作用是什么?

在项目管理软件中,注释功能允许您对任务、文件夹和项目进行详细的标注。这一功能不仅便于团队成员之间的沟通与协作,还能提高项目管理的效率。通过在项目中添加评论,您可以及时了解项目的最新动态,提出疑问并寻求解决方案。此外&a…

【大模型应用开发教程】01_大模型简介

C1 大模型简介 一. 什么是LLM(大语言模型)?1. 发展历程2. 大语言模型的概念LLM的应用和影响 二、大模型的能力和特点1. 大模型的能力1.1 涌现能力(emergent abilities)1.2 作为基座模型支持多元应用的能力1.3 支持对话…

AN基础工具——填色工具

【AN基础工具——填色工具】 基本使用方法填色补充给色块周围画上线 变色动画渐变变色的蜥蜴 本篇内容:填色动画制作 重点内容:填色工具 工 具:Adobe Animate 2022 基本使用方法 填色补充 之前说图形要封闭才能填色,实际情况是有…

ESP8266 Node Mcu开发板连接WIFI并上报数据到MQTT服务器——物联网应用开发

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

3.1 模板测试与深度测试(Stencil Test Z Test)

一、模板测试&#xff08;Stencil Test&#xff09; 模板测试可以实现的一些效果图 1.是什么 ①从渲染管线出发&#xff1a;模板测试是在逐片源操作阶段&#xff0c;透明测试之后&#xff0c;深度测试之前的位置。 ②从书面概念上理解 说到模板测试&#xff0c;就要先说道模…

Java设计模式-结构性设计模式(享元设计模式)

简介 属于结构型模式&#xff0c;主要⽤于减少创建对象的数量&#xff0c;以减少内存占⽤和提⾼性能&#xff0c; 它提供了减少对象数量从⽽改善应⽤所需的对象结构的⽅式享元模式尝试重⽤现有的同类对象&#xff0c;如果未找到匹配的对象&#xff0c;则创建新对象应用场景 JAV…