为容器化的 Postgres 数据库启用 ssl 连接
时间:2022-07-25
本文章向大家介绍为容器化的 Postgres 数据库启用 ssl 连接,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
为容器化的 Postgres 数据库启用 ssl 连接
由于项目安全评测的原因, 需要为 Postgres 数据库启用 ssl 连接, 特记录如下。
使用 openssl 生成 ssl 证书
生成证书需要 openssl 工具, 如果没有安装的话, 可以直接登录进去 Postgres 数据库的容器, 已经内置了 openssl , 而且兼容性也比较好。
生成证书的命令如下:
openssl req -new -text -passout pass:abcd -subj /CN=localhost -out server.req -keyout privkey.pem
openssl rsa -in privkey.pem -passin pass:abcd -out server.key
openssl req -x509 -in server.req -text -key server.key -out server.crt
chmod 600 server.key
上面的命令会生成 privkey.pem
、 server.key
和 server.crt
三个文件, 这三个文件要妥善保管, 接下来就要用到这些文件。
配置 Postgres 启用 ssl 连接
需要修改 /var/lib/postgresql/data/postgresql.conf
以启用 ssl 连接, 打开这个文件, 搜索 # - SSL -
, 找到 ssl 相关的配置, 需要修改的内容如下所示:
# - SSL -
- # ssl = off
+ ssl = on
- # ssl_cert_file = ''
+ ssl_cert_file = '/var/lib/postgresql/data/server.crt'
- # ssl_key_file = ''
+ ssl_key_file = '/var/lib/postgresql/data/server.key'
修改配置文件, 需要重启数据库容器实例, 让这些修改的配置生效。
如果需要强制客户端只能使用 ssl 连接的话, 可以修改配置文件
/var/lib/postgresql/data/pg_hba.conf
, 这个配置文件很简单, 也有详细的说明, 就不在多说了。 修改这个文件也是需要重启数据库实例的。
配置客户端使用 ssl 连接数据库
.NET 应用
.NET 应用一般会使用 Npgsql
来连接 Postgres 数据库, 需要修改连接字符串
var builder = new NpgsqlConnectionStringBuilder {
Host = "localhost",
Port = 2009,
Database = "ssl_test",
Username = "postgres",
Password = "password",
SslMode = SslMode.Require,
TrustServerCertificate = true,
ApplicationName = "PgSslTest"
};
var connStr = builder.ToString();
Console.WriteLine(connStr);
这样, 就可以得到标准的连接字符串, 如下所示:
Host=localhost;Port=2009;Database=ssl_test;Username=postgres;Password=password;SSL Mode=Require;Trust Server Certificate=True;Application Name=PgSslTest
由于使用的是自签名证书, 所以 TrustServerCertificate 必须为设置为 true , 否则在使用 ssl 连接数据库时会出现证书错误。
Java 应用
Java 应用使用 JDBC 连接, 似乎必须提供证书, 可以使用上面生成的 server.crt
。
- netty-socketio 示例代码
- 树莓派:你是我的眼
- redis 学习笔记(7)-cluster 客户端(jedis)代码示例
- Python应用03 使用PyQT制作视频播放器
- struts2(三)之表单参数自动封装与参数类型自动转换
- mysql benchmark基准测试
- redis 学习笔记(6)-cluster集群搭建
- redis 学习笔记(6)-cluster集群搭建
- dubbox REST服务使用fastjson替换jackson
- JavaScript中removeEventListener()使用注意事项
- dubbox REST服务使用fastjson替换jackson
- struts2(二)之配置文件详解与结果视图
- CSS魔法堂:你真的懂text-align吗?
- 黑客可以利用传感器数据来破解手机密码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法