# 如何在PostgreSQL上配置SSL

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/13097.html | 发布：2022-11-24 | 更新：2022-11-24 | 分类：IDC云库

数据库安全通常是组织最关心的问题之一。开箱即用的 PostgreSQL 不提供足够的保护措施来确保数据保护和隐私。

数据库安全通常是组织最关心的问题之一。开箱即用的 PostgreSQL 不提供足够的保护措施来确保数据保护和隐私。因此，需要采取额外措施来确保数据隐私和安全。为与服务器建立的连接启用 SSL 身份验证是确保数据隐私的方法之一。PostgreSQL 支持与数据库服务器建立的 SSL 连接，从而确保客户端和服务器之间交换的所有通信都是加密的。

 

![使用MySQL命令行导出文件](https://www.mfisp.com/wp-content/uploads/2022/06/20220615164312szyelJ.jpg)

 

在本教程中，我们将演示如何为 PostgreSQL 数据库服务器启用 SSL 连接。

 

## 第 1 步：安装 PostgreSQL 服务器

 

首先，您需要在 Linux 系统上安装 PostgreSQL 服务器。如果您的服务器上已经安装了 PostgreSQL，请随时跳到下一步。

 

在本指南中，我们将从在 Rocky Linux 8 上安装最新版本的 PostgreSQL (PostgreSQL 14) 开始。

 

首先，通过 SSH 登录到您的服务器。接下来，刷新存储库并将包升级到最新版本。

 

```
sudo dnf update
```

 

AppStream 存储库未提供最新版本的 PostgreSQL。要验证这一点，请列出可用的 PostgreSQL 模块。

 

```
dnf module list postgresql -y
```

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-oLNtvk.png)

 

从上面的输出来看，存储库提供的最新版本的 PostgreSQL 是 PostgreSQL 13.x。要安装最新版本的 PostgreSQL，请将 PostgreSQL 存储库添加到您的系统。

 

```
sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y
```

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-WhWYNP.png)

 

接下来，禁用默认的 PostgreSQL 存储库：

 

```
sudo dnf module disable postgresql -qy
```

 

接下来，按如下方式安装 PostgreSQL 14 Server 和客户端。

 

```
sudo dnf install postgresql14 postgresql14-server -y
```

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-1gwrkO.png)

 

此后，按如下方式初始化 PostgreSQL 数据库。

 

```
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
```

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-tdQLgC.png)

 

默认情况下，PostgreSQL 安装在 Rocky Linux 上时不会自动启动。因此，启动数据库服务。

 

```
$ sudo systemctl start postgresql-14
```

 

此外，使其在系统启动时启动。

 

```
$ sudo systemctl enable postgresql-14
```

 

要确认 PostgreSQL 服务正在运行，请执行以下命令：

 

```
$ sudo systemctl status postgresql-14
```

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-oKRFlQ.png)

 

上面的输出确认 PostgreSQL 服务器已启动并正在运行。默认情况下，PostgreSQL 侦听端口 5432，您可以通过运行以下`ss`命令来确认这一点。

 

```
$ ss -pnltu | grep 5432
```

 

您应该得到以下输出，确认一切正常。

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-KSavas.png)

 

## 第 2 步：为 Postgres 用户配置密码

 

`postgres`安装 PostgreSQL 时，会在系统中创建一个名为的默认用户。这是一个超级用户，拥有执行几乎任何任务的访问权限，包括管理数据库、表、模式函数和 PostgreSQL 数据库中的任何其他对象。

 

Postgres用户使用ident认证方式，不设置密码。出于安全原因，建议您设置密码以防止潜在的违规行为。

 

为此，请切换到根用户

 

```
$ sudo su
```

 

接下来，切换到`postgres`用户。

 

```
$ su - postgres
```

 

切换到 PostgreSQL shell

 

```
$ psql
```

 

然后使用如图所示的查询设置`postgres`用户密码。`ALTER`

 

```
ALTER USER postgres WITH PASSWORD 'your-password'
```

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-LTUkVu.png)

 

## 第 3 步：为 PostgreSQL 服务器生成 SSL 证书

 

要使 SSL 与 PostgreSQL 一起工作，您需要生成三个证书文件：

 
 
- server.key - 这是私钥文件 
- server.crt - 这是服务器证书文件 
- root.crt - 这是受信任的根证书 

 

首先，将目录更改为 PostgreSQL 的数据目录，如图所示。

 

```
cd /var/lib/pgsql/14/data
```

 

接下来，生成一个 2048 位的 AES 加密的 RSA 私钥，如下所示。

 

```
openssl genrsa -aes128 2048 > server.key
```

 

在创建私钥期间，系统会提示您输入密码。输入并确认。

 

您稍后可以通过运行以下命令确认密钥存在：

 

```
ls -l | grep server.key
```

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-xVNmPM.png)

 

私钥有一个与之关联的密码。但是，为了进一步使用此密钥，您需要删除密码。为此，请运行以下命令：

 

```
openssl rsa -in server.key -out server.key
```

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-SOzG5W.png)

 

再一次，重新输入密码并按 ENTER。

 

## 第 4 步：应用所需的权限和所有权

 

为了增强安全性，您需要将私钥的只读权限分配给 root 用户，如图所示。

 

```
chmod 400 server.key
```

 

此外，将密钥的所有权设置为 postgres 用户和组。

 

```
chown postgres.postgres server.key
```

 

## 第 5 步：创建服务器证书文件

 

现在，根据私钥生成一个自签名证书文件。以下证书文件的有效期为 365 天。

 

```
# openssl req -new -key server.key -days 365 -out server.crt -x509
```

 

该命令将要求您提供一些将合并到证书文件中的信息。因此，请相应地填写所有详细信息。

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-skFh7k.png)

 

由于您使用的是自签名证书，因此您将通过制作服务器证书文件的副本将其用作受信任的根证书，如图所示。

 

```
# cp server.crt root.crt
```

 

## 第 6 步：配置 PostgreSQL 以使用 SSL

 

下一步是配置 PostgreSQL 以使用 SSL。访问`postgresql.conf`位于`data`目录内的配置文件。

 

```
$ sudo vim /var/lib/pgsql/14/data/postgresql.conf
```

 

在 下`Connection Settings`，找到`listen_addresses`参数并将其设置为允许来自所有外部主机的连接。

 

```
listen_addresses = '*'
```

 

在该`SSL`部分中，取消注释以下参数并设置值，如下所示。

 

```
ssl = on
ssl_ca_file = 'root.crt'
ssl_cert_file = 'server.crt'
ssl_crl_file = ''
ssl_key_file = 'server.key'
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
ssl_prefer_server_ciphers = on
```

 

保存更改并退出文件。接下来，打开`pg_hba.conf`配置文件。这是 PostgreSQL 客户端身份验证配置文件，指定允许连接哪些主机以及如何对客户端进行身份验证。

 

```
$ sudo vim /var/lib/pgsql/14/data/pg_hba.conf
```

 

在 下`IPv4 local connections`，按如下方式修改该行以允许来自所有主机的连接。

 

```
host    all           all           0.0.0.0/0          md5
```

 

接下来，在文件末尾添加以下行以启用 SSL 并允许来自所有主机的连接。

 

```
hostssl	 all         all          0.0.0.0/0    		md5
```

 

保存更改并退出配置文件。要使更改生效，请重新启动 PostgreSQL。

 

```
$ sudo systemctl restart postgresql-14
```

 

如果启用了 firewalld，请允许 Postgresql 服务，如图所示

 

```
$ sudo firewall-cmd --add-service=postgresql --permanent 

$ sudo firewall-cmd --reload
```

 

## 步骤 7：测试 SSL 连接

 

此时，PostgreSQL 已配置为使用 SSL 进行远程连接。为此，我们将使用用户 postgres 登录到数据库服务器，如图所示

 

```
psql -U postgres -p 5432 -h 45.79.192.104
```

 

该`-U`标志表示我们用来访问数据库服务器的登录用户

 

该`-p`标志指定 PostgreSQL 正在侦听的端口（默认为 5432）

 

该`-h`标志指定主机的 IP 地址。

 

下面的输出确认 SSL 已启用并且我们使用的是自签名证书。

 

![如何在PostgreSQL上配置SSL](https://www.mfisp.com/wp-content/uploads/2022/11/13097-VLQyt1.png)

 

## 结论

 

在本教程中，我们演示了如何使用自签名 SSL 证书在 PostgreSQL Server 上启用 SSL 支持。我们为 PostgreSQL 服务器上配置的所有数据库和用户启用了 SSL 连接。服务器将侦听默认 PostgreSQL 端口上的所有传入连接，并要求客户端使用 SSL。

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
