如何用OpenSSH生成證書SSL
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1191
要在 PostgreSQL 中使用 SSL/TLS,你需要產生伺服器憑證(server certificate)與可選的客戶端憑證(client certificate)。以下是使用 OpenSSL 自行簽署憑證的完整流程(適用於測試或內部部署環境):
一步步產生 PostgreSQL 用的 SSL 憑證
本示範以 Linux/macOS 為例,在 Windows 可用 Git Bash 或安裝 OpenSSL 工具。
建立一個工作資料夾
mkdir pgssl && cd pgssl
步驟一:建立自簽 CA(可重用)
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=MyTestCA"
這會產生:
-
ca.key:CA 的私鑰
-
ca.crt:CA 的公鑰(可簽署其他憑證)
步驟二:產生伺服器憑證
2-1. 建立私鑰與簽署請求(CSR)
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=your.server.hostname"
CN 要與實際連接用的 FQDN(主機名)一致,例如:/CN=db.example.com
。
使用 IP 地址的話要加入 Subject Alternative Name(略複雜,後述補充)。
2-2. 使用 CA 簽署伺服器憑證
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out server.crt -days 365
步驟三(可選):產生客戶端憑證
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -subj "/CN=myuser"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out client.crt -days 365
設定檔案權限(非常重要)
chmod 600 server.key
chmod 600 client.key
最終檔案列表
檔案 | 用途 | 放置位置 |
---|---|---|
server.key | 伺服器私鑰 | PostgreSQL 伺服器(data 目錄) |
server.crt | 伺服器憑證 | 同上 |
ca.crt | CA 根憑證 | 放在 client 和 server 都需要的地方 |
client.key | 客戶端私鑰(若用雙向驗證) | 用戶端 |
client.crt | 客戶端憑證(若用雙向驗證) | 用戶端 |
PostgreSQL 中設定方式(伺服器端)
在 postgresql.conf
中加入:
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'ca.crt' # 如果要驗證客戶端(雙向驗證)
在 pg_hba.conf
中加入:
hostssl all all 0.0.0.0/0 cert
啟動 PostgreSQL 後測試
psql "host=your.server.hostname dbname=mydb user=myuser sslmode=verify-full sslrootcert=ca.crt sslcert=client.crt sslkey=client.key"
This article was last edited at