当前位置: 首页 > news >正文

PostgreSQL+SSL链路测试

SSL一个各种证书在此就不详细介绍了,PostgreSQL要支持SSL的前提需要打开openssl选项,包括客户端和服务器端。

测试过程。

1. 生成私钥

root用户:

mkdir -p /opt/ssl/private
mkdir -p /opt/ssl/share/ca-certificateschmod 755 -R /opt/ssl
chown -R postgres134:postgres134 /opt/ssl/shareopenssl genrsa -des3 -out /opt/ssl/private/trustly-ca.key 2048#需两次输入密码,测试时输入postgres,生成文件trustly-ca.keychmod 444 /opt/ssl/private/trustly-ca.key#查看私钥内容file /opt/ssl/private/trustly-ca.key
/opt/ssl/private/trustly-ca.key: PEM RSA private key

 2. 生成公钥证书

openssl req -new -x509 -days 3650 -subj '/C=CN/ST=Beijing/L=Chaoyang/O=YZR/CN=trustly' -key /opt/ssl/private/trustly-ca.key -out /opt/ssl/share/ca-certificates/trustly-ca.crt
Enter pass phrase for /opt/ssl/private/trustly-ca.key:
#输入私钥的密码
#查看公钥的文件信息
file /opt/ssl/share/ca-certificates/trustly-ca.crt
/opt/ssl/share/ca-certificates/trustly-ca.crt: PEM certificate

 3. 配置PG服务器部分,我的PG服务器是在postgres134用户下,因此需要

 su - postgres134

 在PG的PGDATA目录中需要生成三个文件

server.key
server.crt
root.crt #containing the CA for the server certificate, plus your client certificate (postgresql.crt)

 生成server.key

#生成server.keyopenssl genrsa -des3 -out $PGDATA/server.key 2048
#输入两次密码,我们都用postgres#移除密码, 为了方便做自启动脚本openssl rsa -in $PGDATA/server.key -out $PGDATA/server.key
#输入私钥的密码#修改文件权限
chmod 400 $PGDATA/server.key#查看文件属性
file $PGDATA/server.key
/home/postgres123/pgdata/server.key: PEM RSA private key

 生成server.csr(服务器签名)

openssl req -new -nodes -key $PGDATA/server.key  -out $PGDATA/server.csr -subj '/C=CN/ST=Beijing/L=Chaoyang/O=YZR/CN=geoscene.yzr.local'#查看文件属性
file $PGDATA/server.csr
/home/postgres123/pgdata/server.csr: PEM certificate request

生成server.crt

#使用CA生成server.crtopenssl req -x509 -key /opt/ssl/private/trustly-ca.key -in $PGDATA/server.csr -out $PGDATA/server.crt
Enter pass phrase for /opt/ssl/private/trustly-ca.key:
//输入私钥的密码

生成root.crt

cp $PGDATA/server.crt $PGDATA/root.crt
#将公钥证书内容添加到root.crt后面
cat /opt/ssl/share/ca-certificates/trustly-ca.crt>>$PGDATA/root.crt

4 在postgresql.conf中配置:

ssl = onssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'root.crt'

5. 设置pg_hba.conf

hostssl    all             all             192.168.100.0/24     md5

6. 启动数据库

7.实际上这时候就可以用psql 连接,只不过是ssl的单向认证,也就是客户端对服务器端的认证

psql -h 192.168.100.51 -U postgres -d postgres -p 5433
Password for user postgres:
psql (13.4)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.postgres=#

如果要实现双向认证,也就是服务器端对客户端的认证,还需要为客户端也配置证书,如下:

1. 客户端证书缺省引用地址(也可以通过环境变量引用到别的地址)

win:%APPDATA%postgresql/
*nix:~/.postgresql/

2. psql(libpq需要以下证书)

posgresql.crt
posgresql.csr
posgresql.key#linux 下生成证书的流程su - postgres134#创建默认存储路径~/.postgresqlmkdir ~/.postgresql
chmod 700 ~/.postgresql##生成postgresql.key
openssl genrsa -des3 -out ~/.postgresql/postgresql.key 1024##去掉密码
openssl rsa -in ~/.postgresql/postgresql.key -out ~/.postgresql/postgresql.keychmod 400 ~/.postgresql/postgresql.key##生成客户端签名postgresql.csropenssl req -new -key ~/.postgresql/postgresql.key -out ~/.postgresql/postgresql.csr -subj '/C=CN/ST=Beijing/L=Chaoyang/O=YZR/CN=client1'##生成客户端证书
openssl x509 -req -in ~/.postgresql/postgresql.csr -CA /opt/ssl/share/ca-certificates/trustly-ca.crt -CAkey /opt/ssl/private/trustly-ca.key -out ~/.postgresql/postgresql.crt -CAcreateserial

 3. pg_hba.conf添加一行

hostssl    all             all             192.168.100.0/24     cert clientcert=1

5. 创建用户

首先需要创建数据库登录用户client1,因为之前postgresql.csr生成时指定的CN=client1,需要和登录用户匹配才能连接。
create role client1 login encrypted password 'client1';

4. psql链接

psql postgresql://client1:client1@192.168.100.51:5433/postgres
psql (13.4)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help
postgres=>##验证客户端ca文件,由于没有把root.crt放到入相应目录中因此报错
psql postgresql://client1:client1@192.168.100.51:5433/postgres?sslmode=verify-ca
psql: error: root certificate file "/home/postgres134/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.cp $PGDATA/root.crt ~/.postgresql/psql postgresql://client1:client1@192.168.100.51:5433/postgres?sslmode=verify-ca
psql (13.4)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=>##使用verfify-full,除了验证证书文件还验证/CN项是否正确,/CN项为geoscene.yzr.local
psql postgresql://client1:client1@192.168.100.51:5433/postgres?sslmode=verify-full
psql: error: server certificate for "geoscene.yzr.local" does not match host name "192.168.100.51"##可以通过如下命令查看
openssl x509 -in root.crt -noout -text
Certificate:Data:Version: 3 (0x2)Serial Number:75:11:9b:20:22:d6:e1:04:a2:4d:01:87:d4:94:74:2d:b2:23:a0:dbSignature Algorithm: sha256WithRSAEncryptionIssuer: C = CN, ST = Beijing, L = Chaoyang, O = YZR, CN = geoscene.yzr.localValidityNot Before: Aug 23 06:51:55 2023 GMTNot After : Sep 22 06:51:55 2023 GMTSubject: C = CN, ST = Beijing, L = Chaoyang, O = YZR, CN = geoscene.yzr.localSubject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public-Key: (2048 bit)Modulus:00:dc:29:81:59:b2:a4:7e:60:79:6e:c4:9e:b7:b1:c4:6e:b6:92:d3:83:48:4d:f6:4a:d1:76:d2:d9:e4:29:ca:81:2f:29:de:7d:64:8a:23:ec:80:a2:0d:da:b2:7d:71:7f:ae:97:20:53:12:b1:0c:1b:1b:e3:38:b5:32:bb:d8:bc:d1:e9:cb:e1:87:c9:90:41:5d:c2:77:74:e5:36:78:35:69:bc:e0:ee:d1:51:0e:2c:44:bf:36:aa:81:5e:d4:93:76:d8:9a:55:60:27:49:48:ff:17:39:c7:f6:33:13:de:0b:65:29:7d:c2:1c:ff:28:ff:0a:59:2f:36:5a:92:98:2d:87:f6:af:b5:c1:16:fc:4b:1c:35:fa:85:6d:f0:81:f9:4f:13:f8:77:d6:da:41:dd:96:46:62:12:2c:93:75:ff:84:65:ae:61:7d:99:eb:fd:da:68:fb:aa:ad:23:9d:c8:af:60:94:e7:35:26:3d:92:29:f9:37:f3:30:1c:3c:ac:9b:81:2a:54:77:5b:ff:ec:c1:5f:7b:51:81:dd:d9:11:35:84:48:25:54:b1:d8:c5:6f:16:7d:85:4c:94:d8:6a:14:45:55:f7:f4:b5:56:d6:cb:17:aa:b1:55:ec:2d:eb:3c:e5:76:c1:cc:7f:aa:ef:f4:6b:55:77:24:da:43Exponent: 65537 (0x10001)X509v3 extensions:X509v3 Subject Key Identifier:55:E3:A3:6D:F2:90:6A:72:74:F1:F5:7F:B0:21:86:4E:20:BD:67:AEX509v3 Authority Key Identifier:keyid:55:E3:A3:6D:F2:90:6A:72:74:F1:F5:7F:B0:21:86:4E:20:BD:67:AEX509v3 Basic Constraints: criticalCA:TRUESignature Algorithm: sha256WithRSAEncryptiona4:a7:24:72:f7:f5:82:75:d1:e9:b3:9c:a1:46:e4:ca:18:85:64:d5:dd:aa:ff:b5:ca:b5:2a:ea:b0:df:77:ac:d6:bd:1f:e7:38:4c:e2:54:63:06:08:12:50:65:ad:8c:a7:1d:87:79:73:3a:a7:dc:45:35:46:12:dc:cf:65:a5:f1:9a:ad:62:65:40:3d:0c:c7:b1:7e:6c:26:3f:19:89:7f:81:d2:64:1e:b2:be:5c:d5:ff:1d:d9:e0:d8:82:b5:4e:54:81:fe:f1:98:f2:ec:80:2d:77:57:94:04:71:c6:65:3b:c2:91:45:8a:d8:d6:f5:d0:34:e5:fa:54:da:6f:46:23:18:4a:bf:05:20:e2:90:2a:dd:64:70:f1:4f:e8:60:78:4a:2f:6a:50:5a:3d:8a:46:03:2d:b4:ae:d5:d9:3d:06:83:0f:2d:82:32:fe:68:e9:68:cd:73:86:c1:e7:97:47:9c:ec:73:3e:78:59:d8:d2:23:a6:6e:f5:02:b2:2d:bd:57:98:b1:2e:e3:6d:49:8d:f8:0c:ca:bd:41:27:4c:59:54:9e:58:e4:c9:6a:61:03:bc:9d:ed:cc:8d:85:53:9a:3e:a4:d3:57:5d:9f:fe:94:fe:8d:43:ce:82:ac:49:9d:b0:7e:29:38:8f:6c:23:56:00:e9:5e:0d:1c:f9##换成正确的CN,通过
psql postgresql://client1:client1@geoscene.yzr.local:5433/postgres?sslmode=verify-full
psql (13.4)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.postgres=>

相关文章:

PostgreSQL+SSL链路测试

SSL一个各种证书在此就不详细介绍了,PostgreSQL要支持SSL的前提需要打开openssl选项,包括客户端和服务器端。 测试过程。 1. 生成私钥 root用户: mkdir -p /opt/ssl/private mkdir -p /opt/ssl/share/ca-certificateschmod 755 -R /opt/ss…...

服务器(容器)开发指南——code-server

文章目录 code-server简介code-server的安装与使用code-server的安装code-server的启动code-server的简单启动指定配置启动code-server code-server环境变量配置 code-server端口转发自动端口转发手动添加转发端口 nginx反向代理code-servercode-server打包开发版镜像 GitHub官…...

C++贪吃蛇(控制台版)

C自学精简实践教程 目录(必读) 目录 主要考察 需求 输入文件 运行效果 实现思路 枚举类型 enum class 启动代码 输入文件data.txt 的内容 参考答案 学生实现的效果 主要考察 模块划分 文本文件读取 UI与业务分离 控制台交互 数据抽象 需求 用户输入字母表示方…...

Java之字符串实践

功能概述 字符串是Java编程中常用的数据类型,本文对String部分常见功能做了对应实践以及分析。 功能实践 场景1:字符串比较 用例代码 Test public void test_string_compare() {String s1 "abc";String s2 s1;String s5 "abc&quo…...

BM20 数组中的逆序对

描述 解题思路:归并排序 分治:分治即“分而治之”,“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题,子问题继续按照这样划分,直到问题可以被轻易解决;“治”指的是将子问题单独进…...

高德猎鹰轨迹查询相关接口

高德猎鹰轨迹官网:服务管理-API文档-开发指南-猎鹰轨迹服务 | 高德地图API 轨迹查询 httpclient的post // post方法请求 创建轨迹 private static void createTrace() {String key "高德注册的key";String sid "服务id"; // 服务idString…...

整理总结新手开始抖音小店经营:常见问题及解决办法

抖音小店作为一种新兴的电商模式,在短时间内获得了广泛的关注和使用。然而,对于新手来说,抖音小店经营可能会遇到一些问题。下面是四川不若与众总结的一些常见的问题以及相应的解决办法。 问题一:产品选择困难 对于新手来说&#…...

4-1-netty

非阻塞io 服务端就一个线程,可以处理无数个连接 收到所有的连接都放到集合channelList里面 selector是有事件集合的 对server来说优先关注连接事件 遍历连接事件...

hive 动态分区-动态分区数量太多也会导致效率下降只设置非严格模式也能执行动态分区

hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区 结论 在非严格模式下不开启动态分区的功能的参数(配置如下),同样也能进行动态分区数据写入,目测原因是不严格检查SQL中是否指定分区或者…...

java八股文面试[JVM]——JVM调优

知识来源: 【2023年面试】JVM性能调优实战_哔哩哔哩_bilibili...

FairyGUI-Unity 异形屏适配

本文中会修改到FairyGUI源代码,涉及两个文件Stage和StageCamera,需要对Unity的屏幕类了解。 在网上查找有很多的异形屏适配操作,但对于FairyGUI相关的描述操作很少,这里我贴出一下自己在实际应用中的异形屏UI适配操作。 原理 获…...

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

在启动oracle的服务OracleOraDb11g_home1TNSListener时,提示服务启动后又停止了。 解决方法: 修改oracle安装目录下的两个配置文件: 以上两个文件,对应的HOST的值,都改为127.0.0.1 然后再启动服务,启动成…...

Spring复习:(58)<context:annotation-config/>的作用

引入如下的BeanPostProcessor • ConfigurationClassPostProcessor • AutowiredAnnotationBeanPostProcessor • CommonAnnotationBeanPostProcessor • PersistenceAnnotationBeanPostProcessor • EventListenerMethodProcessor如果xml文件配置了bean中使用了Autowired注解…...

“东方杯”英特尔oneAPI黑客松大赛—参赛经验分享

目录 前言1、大赛要求2、oneMKL介绍3、准备 oneMKL基本使用1、下载:2、安装:3、初始化oneMKL环境:4、编译代码5、运行 所需的头文件使用oneMKL工具生成随机数使用fftw3计算FFT调用oneMKL API加速计算FFT对比两种方法的准确性输出结果结束语 前…...

win10家庭版远程桌面补丁_rdp wrapper

RDP Wrapper Library 就是可以帮你在 Windows 7、Windows 8、Windows 10 家庭版中打开远程桌面的工具。 1、把电脑上打开的安全软件与杀毒软件都关掉,因为这个远程桌面补丁会修改系统文件,所以安全软件可能会拦截。 2、下载RDP Wrapper Library补丁压缩…...

【C++设计模式】开放-封闭原则

2023年8月27日,周日下午 我觉得我的这篇博客还是写得很不错的,哈哈哈。 目录 概述举例说明用开放-封闭原则重构 概述 开放-封闭原则(Open-Closed Principle,OCP)是面向对象设计中的一个重要原则,也是许多…...

vue+file-saver+xlsx+htmlToPdf+jspdf实现本地导出PDF和Excel

页面效果如下(echarts图表按需添加,以下代码中没有) 1、安装插件 npm install xlsx --save npm install file-saver --save npm install html2canvas --save npm install jspdf --save2、main.js引入html2canvas import htmlToPdf from …...

axios 进阶

axios 进阶 接口传参方式 使用 xhr 原生技术或者是 axios 时,它的 post 传参方式是键值对的形式 keyvalue。但是在实际开发中一般是使用对象的形式定义数据,方便读取和赋值。所以当我们需要发起请求时可以通过 qs 这一款插件将对象转成键值对形式&…...

Redis限流实践:实现用户消息推送每天最多通知2次的功能

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…...

uniapp 存储base64资源为http链接图片

1. 新建一个base64.js 文件 const fsm wx.getFileSystemManager(); // base64data base64资源 // name 文件名 function base64src(base64data, name, cb) {const time new Date().getTime();const filePath ${wx.env.USER_DATA_PATH}/${name}.${time}.png;const buffer …...

列表类控件虚拟化

WPF列表控件提供的最重要的功能是UI虚拟化(WPF编程宝典说的)。所有的WPF列表控件(所有继承自ItemsControl的控件,包括ListBox、CombBox、ListView、TreeView、DataGrid)都支持UI虚拟化。 UI虚拟化的支持实际上没有被构…...

c# 多线程Task.Run 取消正在执行的多线程

c# 异步处理,上次处理没有完成,下次有紧接着处理多线程出错 在 C# 中进行异步处理时,确保处理上一个任务完成后再处理下一个任务是很重要的,特别是在涉及多线程的情况下。如果上一个任务尚未完成,而下一个任务又开始执…...

sql server 如何设置主键

开始之前 限制和局限 一个表只能包含一个 PRIMARY KEY 约束。 在 PRIMARY KEY 约束中定义的所有列都必须定义为 NOT NULL。 如果没有指定为 Null 性,则加入 PRIMARY KEY 约束的所有列的为 Null 性都将设置为 NOT NULL。 创建主键会自动创建相应的唯一群集索引、…...

【LeetCode-中等题】19. 删除链表的倒数第 N 个结点

文章目录 题目方法一:节点加入集合找索引方法二:直接计算长度,然后找出要删除的节点的前一个节点方法三:栈方法四:前后双指针 题目 这题的关键在与两个点 一定要设置一个哑结点,防止删除第一个元素时,导致空…...

Matlab图像处理-减法运算

减法运算 图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。常用来检测一系列相同场景图像的差异,其主要的应用在于检测同一场景下两幅图像之间的变化或是混合图像的分离。 差影法 将同一景物在不同时问拍摄的图像或同一景…...

stm32之11.USART串口通信

可以添加上拉电阻&#xff0c;但会增加功耗&#xff0c;传输距离变长 要添加库函数USART 官方参考文档说明书位置 ALT&#xff0b;左键可实现整体删除&#xff08;如下图&#xff09; 输出模式第三种模式AF ---------------------- 源码 远程控制pc端 #include <stm32f4x…...

Python实现T检验

今天来分享一下T检验的python实现方法。 01 先来上一波概念。 1.单样本t检验&#xff0c;又称单样本均数t检验&#xff0c;适用于来自正态分布的某个样本均数与已知总体均数的比较&#xff0c;其比较目的是检验样本均数所代表的总体均数是否与已知总体均数有差别。已知总体均数…...

校招算法题实在不会做,有没有关系?

文章目录 前言一、校招二、时间复杂度1、单层循环2、双层循环 三、空间复杂度四、数据结构五、校招算法题实在不会做&#xff0c;有没有关系&#xff1f;六、英雄算法集训 前言 英雄算法联盟八月集训 已经接近尾声&#xff0c;九月算法集训将于 09月01日 正式开始&#xff0c;目…...

Michael.W基于Foundry精读Openzeppelin第32期——SignatureChecker.sol

Michael.W基于Foundry精读Openzeppelin第32期——SignatureChecker.sol 0. 版本0.1 SignatureChecker.sol 1. 目标合约2. 代码精读2.1 isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) 0. 版本 [openzeppelin]&#xff1a;v4.8.3&#xff0c;[for…...

如何修改字符串内容?

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; String 1. 修改字符串2. StringBuilder和…...

外国做家具的网站/it行业培训机构哪个好

三&#xff0e;下面分析一下高通的android2.3的代码中SD卡驱动的流程。 在kernel中&#xff0c;SD卡是作为平台设备加入到内核中去的&#xff0c;在/kernel/arch/arm/mach-msm/devices-msm7627a.c中&#xff1a; [cpp] view plaincopy static void __init msm7x2x_init(void) …...

推荐一个两学一做的网站/个人网站设计成品

2019独角兽企业重金招聘Python工程师标准>>> 本文描述 tcprstat 工具的安装和使用。 我是分割线 【安装】 tcprstat 的源码管理方式使用的是 bzr 。bzr 的简介和相应客户端的安装可以参考《 安装和使用 TPCC-MySQL 工具遇到的问题 》。 下载源码。 [rootBet…...

天津制作网页/杭州网站优化方案

R Markdown是一种用于在R中生成可重复生成的报告的开源工具。它可以帮助您将所有代码&#xff0c;结果和编写都放在一个地方&#xff0c;并以一种有吸引力且易于消化的方式格式化所有内容。它也是将您的数据工作展示给其他人的宝贵工具。使用R Markdown&#xff0c;您可以选择将…...

长武网站建设/亚马逊查关键词搜索量的工具

报错&#xff1a;&#xff08;CHTCollectionViewWaterfallLayout是通过pods添加进来的&#xff09;&#xff0c;然后pods中的其他库都可以编译通过&#xff0c;就是这个库一直找不到。最后得到同事的协助&#xff0c;找到了原因。 ld: library not found for -lCHTCollectionVi…...

wordpress跳转移动端模板/搜索引擎技巧

2、 新建test数据库&#xff0c;在test数据库中新建book_info表&#xff0c;结构如下&#xff1a; 并向表中插入两条记录&#xff0c;两条记录中image_path字段的值分别为a.jpg和e.jpg在网站中的路径。 3、 新建Gridview.aspx页面&#xff0c;通过GridView控件按照下面的格式显…...

慈善网站建设方案/百度软文推广公司

在File类中&#xff0c;需要导入命名空间&#xff1a;using System.IO,不需要实例化&#xff0c;直接使用即可。 基本操作&#xff1a;盘存、复制、移动、删除。 基本方法&#xff1a;File.Exist()、File.Copy()、File.Move()、File.Delete() File.Create(path)----在指定路径…...