PostgreSQL数据库配置SSL操作说明书
背景:
因为postgresql或者mysql目前通过docker安装,只需要输入主机IP、用户名、密码即可访问成功,这样其实是不安全的,可能会通过一些手段获取到用户名密码导致数据被窃取。而ES、kafka等也是通过用户名/密码方式连接,但是这些数据重要性相比较于数据库要低一些,毕竟都是一些日志以及消息而已。
解决方案:
通过开启SSL证书认证的方式加强防护,配合使用防火墙策略白名单方式、增加密码复杂度。本文档主要是介绍开启SSL认证方式。
具体实施步骤:
一、创建目录存储配置信息
1、mkdir /postgre
2、进入 文件夹
cd postgre
3、创建目录
mkdir certs
4、创建目录
mkdir data
二、创建Openssl配置文件
1、进入cd /postgre/certs 目录
2、执行 touch openssl.cnf
3、修改文件vim openssl.cnf
4、将下面信息粘贴至文件中
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no[ req_distinguished_name ]
C = CN
ST = Beijing
L = Beijing
O = MyOrg
OU = IT
CN = postgres
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 192.168.2.1 #数据库主机地址
DNS.1 = postgres #数据库用户名
如下图:
三、创建SSL证书生成脚本generate_certs.sh
1、进入 cd /postgre/certs 目录
2、touch generate_certs.sh
3、vim generate_certs.sh
4、将下面信息粘贴至文件中
#!/bin/bash
ROOT_KEY="root.key"
ROOT_CRT="root.crt"
SERVER_KEY="server.key"
SERVER_CSR="server.csr"
SERVER_CRT="server.crt"
DAYS=365
BITS=2048echo "生成根私钥..."
openssl genpkey -algorithm RSA -out "$ROOT_KEY"echo "生成根证书..."
openssl req -x509 -new -nodes -key "$ROOT_KEY" -sha256 -days "$DAYS" -out "$ROOT_CRT" -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Root CA/OU=IT Department/CN=postgres"echo "生成服务器私钥..."
openssl genpkey -algorithm RSA -out "$SERVER_KEY"echo "生成证书签名请求 (CSR)..."
openssl req -new -key "$SERVER_KEY" -out "$SERVER_CSR" -config openssl.cnfecho "使用根证书签署服务器证书..."
openssl x509 -req -in "$SERVER_CSR" -CA "$ROOT_CRT" -CAkey "$ROOT_KEY" -CAcreateserial -out "$SERVER_CRT" -days 365 -extfile openssl.cnfecho "验证服务器证书..."
openssl verify -CAfile "$ROOT_CRT" "$SERVER_CRT"echo "生成完成!以下是生成的文件:"
ls -l "$ROOT_KEY" "$ROOT_CRT" "$SERVER_KEY" "$SERVER_CSR" "$SERVER_CRT"
如图:
四、创建配置证书目录以及生成证书
1、执行cd /postgre/certs
2、执行sh generate_certs.sh 运行该脚本
3、如下图代表生成成功
4、查看生成的证书
五、为证书目录赋权限,以便postgre容器可以访问执行这些证书
1、cd /postgre
2、chmod 777 certs
3、chmod 777 data
2、chown 999:999 certs/* 之所以所属用户/组设置为999 是因为postgre默认进程所属就是999。
3、chmod 600 certs/* 为证书目录设置为所属用户可读可写,如果权限过大会在连接数据库时报错!
六、创建配置文件postgresql.conf
1、进入 cd /postgre
2、执行 touch postgresql.conf 命令
3、执行 vim postgresql.conf 命令
4、复制如下配置信息到文件中
ssl = on #开启SSL认证
ssl_cert_file = '/var/lib/postgresql/certs/server.crt' #服务器证书路径
ssl_key_file = '/var/lib/postgresql/certs/server.key' #密钥路径
ssl_ca_file = '/var/lib/postgresql/certs/root.crt' #根证书路径
listen_addresses = '*' #监听所有
ssl_min_protocol_version = 'TLSv1.2' #SSL等级最小为1.2
logging_collector = on # 开启日志
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1d # 日志文件保留一天后轮换
log_rotation_size = 10MB # 当日志文件达到10MB时轮换
log_min_messages = debug # 记录警告级别及以上的消息
log_connections = on # 记录连接尝试
log_disconnections = on # 记录断开连接
如下图
七、创建配置文件pg_hba.conf
1、cd /postgre
1、执行 touch pg_hba.conf 命令
2、执行 vim pg_hba.conf 命令
3、复制如下配置信息到文件中
hostssl all all 0.0.0.0/0 cert clientcert=1
如下图
八、安装并启动PostgreSQl
1、安装postgreSQL 13.3版本
镜像会提供给运维。
2、启动postgreSQL容器
docker run -d --name my-postgres-ssl -p 5432:5432 -e POSTGRES_PASSWORD=xxxx -v /postgre/postgresql.conf:/etc/postgresql/postgresql.conf -v /postgre/certs:/var/lib/postgresql/certs -v /postgre/data:/var/lib/postgresql/data b2fcd079c1d4 -c 'config_file=/etc/postgresql/postgresql.conf'其中 -e POSTGRES_PASSWORD=password 为数据库设置密码为 “password” 默认用户名为 “postgres”其中 -v /postgre/postgresql.conf:/etc/postgresql/postgresql.conf 将宿主机的配置文件挂载到容器中。其中 -v /postgre/certs:/var/lib/postgresql/certs 为数据库映射证书目录 将宿主机中的证书目录挂载到容器中 前面为宿主机目录 后面为容器中目录。可固定写死。其中 -v /postgre/data:/var/lib/postgresql/data 为数据库映射数据存储目录。
其中 -c 'config_file=/etc/postgresql/postgresql.conf' 强制数据库使用自定义的配置文件,忽略系统内置的配置信息 后面会介绍如何编写postgresql.conf文件。
九、替换容器中的pg_hba.conf配置文件
1、查询 容器id 执行
docker ps --filter "name=my-postgres-ssl" --format "{{.ID}}"
2、将配置文件复制容器中
docker cp /postgre/pg_hba.conf 容器ID:/var/lib/postgresql/data
3、重启docker容器
docker restart 容器ID
4、查看运行日志
docker logs -f --tail 200 容器ID
5、如图则运行成功
十、使用客户端连接数据库 此处使用Navicat
其中SSL配置中 客户端密钥 上传 server.key客户端证书 上传 server.crt根证书 上传 root.crt
点击【测试链接】
相关文章:

PostgreSQL数据库配置SSL操作说明书
背景: 因为postgresql或者mysql目前通过docker安装,只需要输入主机IP、用户名、密码即可访问成功,这样其实是不安全的,可能会通过一些手段获取到用户名密码导致数据被窃取。而ES、kafka等也是通过用户名/密码方式连接,…...
MySQL 的 super_read_only 和 read_only 参数
MySQL 的 super_read_only 和 read_only 参数 一、参数基本概念 1. read_only 参数 作用:控制普通用户是否只能读取数据影响范围:所有非SUPER权限的用户默认值:OFF(可读写) 2. super_read_only 参数 作用…...

低碳理念在道路工程中的应用-预制路面
一、引子 在上一篇文章里,给大家介绍了预制基层的应用,有人提出,既然基层能够预制,那么,道路面层能不能预制呢,有没有相关的研究成果和应用实例呢?答案是肯定的,在本篇文章中&#x…...

12-后端Web实战(登录认证)
在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的,所以我们今天的主题就是登录认证。最终要实现的效果是&#…...
TIDB创建索引失败 mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory.
TIDB创建索引失败:解决“mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory”问题 在使用 TIDB 数据库时,我们有时会遇到创建索引失败的问题。常见的错误信息为: mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directo…...
Redis 插入中文乱码键
Java 代码: Bean// 静态代理模式: Redis 客户端代理类增强public StringRedisTemplateProxy stringRedisTemplateProxy(RedisKeySerializer redisKeySerializer,StringRedisTemplate stringRedisTemplate,RedissonClient redissonClient) {stringRedisTemplate.setK…...
Mac OS 使用说明
Mac 的启动组合键 了解可通过在启动时按住一个或多个按键来访问的 Mac 功能和工具。 若要使用这些组合键中的任何一个,请在按下电源按钮以开启 Mac 后或在 Mac 开始重新启动后,立即按住相应按键。请一直按住,直至电脑出现对应的行为。 !!!上…...

4.2.2 Spark SQL 默认数据源
在本实战概述中,我们探讨了如何在 Spark SQL 中使用 Parquet 格式作为默认数据源。首先,我们了解了 Parquet 文件的存储特性,包括其二进制存储方式和内嵌的 Schema 信息。接着,通过一系列命令,我们演示了如何在 HDFS 上…...

234. Palindrome Linked List
目录 一、题目描述 方法一、使用栈 方法二、将链表全部结点值复制到数组,再用双指针法 方法三、递归法逆序遍历链表 方法四、快慢指针反转链表 一、题目描述 234. Palindrome Linked List 方法一、使用栈 需要遍历两次。时间复杂度O(n),空间复杂度…...
广州邮科高频开关电源:以创新科技赋能通信能源绿色未来
在数字化浪潮席卷全球的当下,通信网络作为信息社会的基石,其稳定运行对电源系统的可靠性、效率及智能化水平提出了更高要求。作为国内通信电源领域的领军企业,广州邮科凭借其自主研发的高频开关电源技术,以高效节能、智能管控、绿…...
day41 python图像识别任务
目录 一、数据预处理:为模型打下坚实基础 二、模型构建:多层感知机的实现 三、训练过程:迭代优化与性能评估 四、测试结果:模型性能的最终检验 五、总结与展望 在深度学习的旅程中,多层感知机(MLP&…...

无人机报警器探测模块技术解析!
一、运行方式 1. 频谱监测与信号识别 全频段扫描:模块实时扫描900MHz、1.5GHz、2.4GHz、5.8GHz等无人机常用频段,覆盖遥控、图传及GPS导航信号。 多路分集技术:采用多传感器阵列,通过信号加权合并提升信噪比,…...
Docker 替换宿主与容器的映射端口和文件路径
在使用 Docker 容器化应用程序时,经常需要将宿主机的端口和文件路径映射到容器中,以便在本地访问容器中的服务和数据。本文将详细介绍如何替换和配置 Docker 容器的端口和文件路径映射。 1. 端口映射 端口映射用于将宿主机的端口转发到容器中的端口&am…...
我的3种AI写作节奏搭配模型,适合不同类型写作者
—不用内耗地高效写完一篇内容,原来可以这样搭配AI ✍️ 开场:为什么要“搭配节奏”写作? 很多人以为用AI写作,就是丢一句提示词,然后“等它写完”。 但你有没有遇到这些情况: AI写得很快,学境…...

Bonjour
Bonjour 是苹果的一套零配置网络协议,用于发现局域网内的其他设备并进行通信,比如发现打印机、手机、电视等。 一句话:发现局域网其他设备和让其他设备发现。 Bonjour 可以完成的工作 IP 获取名称解析搜索服务 实际应用场景示例࿰…...

华为云Flexus+DeepSeek征文 | 基于Dify和DeepSeek-R1开发企业级AI Agent全流程指南
作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 环境准备 2.1 华为云资源准备 2.1 实…...

HarmonyOS-ArkUI固定样式弹窗(1)
固定样式弹窗指的就是ArkUI中为我们提供的一些具备界面模板性质的弹窗。样式是固定的,我们可以决定在这些模板里输入什么样的内容。常见的有,警告弹窗, 列表选择弹窗, 选择器弹窗,对话框,操作菜单。 下图是本文中要讲到的基类固定样式弹窗,其中选择器弹窗没有包含在内,…...

痉挛性斜颈相关内容说明
一、颈部姿态的异常偏移 痉挛性斜颈会打破颈部原本自然笔直的状态,让颈部像被无形的力量牵引,出现不自主的歪斜、扭转。它就像打乱了颈部原本和谐的 “平衡游戏”,使得颈部姿态偏离正常,影响日常的体态与活动。 二、容易察觉…...
C语言| 函数参数传递指针
C语言| 拷贝传递(指针控制内存单元)-CSDN博客 【函数参数传指针和传数据的区别】 如果希望在另外一个函数中修改本函数中变量的值,那么在调用函数时只能传递该变量的地址。 1 普通变量,传递它的地址,可以直接操作该变量的内存空间。 举例…...

【25-cv-05917】HSP律所代理Le Petit Prince 小王子商标维权案
Le Petit Prince 小王子 案件号:25-cv-05917 立案时间:2025年5月28日 原告:SOCIETE POUR LOEUVRE ET LA MEMOIRE DANTOINE DE SAINT EXUPERY - SUCCESSION DE SAINT EXUPERY-DAGAY 代理律所:HSP 原告介绍 《小王子》&#x…...
MyBatis 动态 SQL 详解:灵活构建强大查询
MyBatis 的动态 SQL 功能是其最强大的特性之一,它允许开发者根据不同条件动态生成 SQL 语句,极大地提高了 SQL 的灵活性和复用性。本文将深入探讨 MyBatis 的动态 SQL 功能,包括 OGNL 表达式的使用以及各种动态 SQL 元素(如 if、c…...
从 “金屋藏娇” 到 自然语言处理(NLP)
文章目录 从两个问题理解自然语言处理(NLP)1、汉武帝喜欢阿娇吗1. 政治联姻的背景2. 早期情感与后期疏远3. 历史评价的复杂性4. 现代视角结论 2、刘彻和淮南王关系一、背景:诸侯王与中央的矛盾二、刘彻与刘安的互动三、深层原因与历史评价结论…...

vue3 ElMessage提示语换行渲染
在 ElMessage.error 中使用换行符 \n 并不会实现换行,因为 ElMessage 默认会将字符串中的换行符忽略。要实现换行显示,可以使用 HTML 标签 <br> 并结合 ElMessage 的 dangerouslyUseHTMLString 选项。以下是实现换行提示的代码示例: i…...

Java 微服务架构设计:服务拆分与服务发现的策略
Java 微服务架构设计:服务拆分与服务发现的策略 微服务架构作为一种热门的软件架构风格,在 Java 领域有着广泛的应用。它通过将系统拆分为一组小型服务来实现更灵活、可扩展的系统设计。在微服务架构中,服务拆分和服务发现是两个关键环节。本…...

华为OD机试真题——二叉树中序遍历(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《二叉树中序遍历》: 目录 …...
解决 Go 中 `loadinternal: cannot find runtime/cgo` 错误
在 Go 开发中,loadinternal: cannot find runtime/cgo 是一个相对不常见但可能令人困惑的错误。这个错误通常与 CGO 的使用和配置有关。本文将探讨这个错误的成因,并提供解决方案,帮助你在未来的开发中避免类似问题。 错误背景 在 Go 项目中…...

VSCode + GD32F407 构建烧录
前言 最近调试一块 GD32F407VET6(168Mhz,8Mhz晶振) 板子时,踩了一些“启动失败”的坑。本以为是时钟配置有误,最后发现是链接脚本(.ld 文件)没有配置好,导致程序根本没能正常执行 ma…...

Linux研学-入门命令
一 目录介绍 1 介绍 Linux与Windows在目录结构组织上差异显著:Linux采用树型目录结构,以单一根目录/为起点,所有文件和子目录由此向下延伸形成层级体系,功能明确的目录各司其职,使文件系统层次清晰、逻辑连贯…...
Hive在实际应用中,如何选择合适的JOIN优化策略?
在实际应用中选择Hive JOIN优化策略时,需综合考虑数据规模、分布特征、表结构设计、集群资源及业务需求。以下是具体的决策流程和参考标准: 一、数据特征分析 1. 统计数据规模 通过DESCRIBE FORMATTED table_name查看表大小和分区信息。使用SELECT CO…...

设计模式之结构型:桥接模式
桥接模式(Bridge Pattern) 定义 桥接模式是一种结构型设计模式,通过将抽象部分与实现部分分离,使它们可以独立变化。它通过组合代替继承,解决多层继承导致的类爆炸问题,适用于多维度变化的场景(如形状与颜…...