共计 3472 个字符,预计需要花费 9 分钟才能阅读完成。
01 / 简介 /
🚀TLS 是大多数应用程序中最罕用的平安协定之一,但也鲜为人知🌏。在这篇博客中,我将简要解释 TLS 的概念,以及如何将其配置为应用兼容的 OpenSSL 库编译的 Postgres 15 版本。💐
02 /PostgreSQL 服务器端设置 /
这些是 postgresql.conf 中与 TLS 相干的 TLS 设置。
🔔 请留神,这些参数以前缀 SSL 结尾,这是一个可与 TLS(较新术语)调换应用的术语。两者都指同一件事。
#ssl = off
#ssl_ca_file = ''#ssl_cert_file ='server.crt'#ssl_crl_file =''
#ssl_crl_dir = ''#ssl_key_file ='server.key'#ssl_ciphers ='HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
#ssl_prefer_server_ciphers = on
#ssl_ecdh_curve = 'prime256v1'
#ssl_min_protocol_version = 'TLSv1.2'
#ssl_max_protocol_version = ''#ssl_dh_params_file =''
#ssl_passphrase_command = ''
#ssl_passphrase_command_supports_reload = off
大多数时候,您只须要填写 SSL,ssl_ca_file,ssl_cert_file,ssl_key_file,可能还有 ssl_passphrase_command。例如:
ssl = on
ssl_ca_file = '/home/user/cert/cacert.pem'
ssl_cert_file = '/home/user/cert/server.pem'
ssl_key_file = '/home/user/cert/server.key'
ssl_passphrase_command = 'echo passphrase'
💁这些根本 TLS 参数通知 Postgres 您心愿在服务器上启用 TLS,并提供证书颁发机构(CA)证书文件、实体证书文件和私钥文件的门路。这 3 个文件通常被称为 X509 证书,次要用于保障客户端和服务器之间的信赖。
📕CA 证书文件(ssl_ca_file)是信赖根,您能够应用 openSSL 为您的组织生成一个证书,并应用它来创立和签订其余实体证书以供应用程序应用。
📕实体证书(ssl_cert_file)和私钥(ssl_key_file)造成一个 pair,在某种意义上,证书自身蕴含公钥,而私钥文件蕴含私钥。这些密钥用于 TLS 握手期间的异步身份验证。实体证书通常应用在 ssl_ca_file 中配置的雷同 CA 证书文件签名,这样它就能够被信赖。也能够应用 openssl 生成和签名私钥和实体证书文件。
🔧ssl_passphrase_command 用于获取明码短语以解密 ssl_key_file(如果在生成时已加密)。
请参阅此处🔗 的这篇博客文章📝,理解如何应用 openssl 创立和签订这些证书文件,以及对其余大部分默认 TLS 相干参数的简短阐明。
03 /PostgreSQL 服务器端 pg_hba 设置 /
除了上述次要设置外,😆您还须要配置 pg_hba.conf 以限度哪些连贯须要 TLS,哪些不须要。对于大多数人来说,这些设置通常更简单😅。启用 TLS 后,可能波及 2 个身份验证; 一个波及 TLS 握手(以验证客户端和服务器之间的信赖),另一个波及 PG 中以查看连贯用户是否被受权。
请思考以下示例:
hostssl mydatabase myuser 192.168.1.0/24 trust
hostssl mydatabase myuser2 192.168.1.0/24 trust clientcert=verify-ca
hostssl mydatabase myuser3 192.168.1.0/24 password clientcert=verify-ca
hostssl mydatabase myuser4 192.168.1.0/24 cert clientcert=verify-ca
hostnossl mydatabase myuser5 127.0.0.1/32 trust
🔨hostssl mydatabase myuser 192.168.1.0/24 trust
💡意味着只有 myuser 应用 TLS 在 192.168.1.0 网络中连贯,myuser 就会立刻取得拜访 mydatabase 的权限。
🔨hostssl mydatabase myuser2 192.168.1.0/24 trust clientcert=verify-ca
🔔示意如果 myuser2 应用 TLS 在 192.168.1.0 网络中连贯,则 myuser2 须要提供本人的 X509 证书,服务器将应用 ssl_ca_file 中配置的 CA 证书验证客户端证书。如果证书能够信赖,则 myuser2 将被授予对 mydatabase 的拜访权限。
🔨hostssl mydatabase myuser3 192.168.1.0/24 password clientcert=verify-ca
💡示意如果 myuser3 应用 TLS 在 192.168.1.0 网络中连贯,则 myuser3 须要提供本人的 X509 证书,服务器将应用 ssl_ca_file 中配置的 CA 证书验证客户端证书。如果证书能够信赖,则 myuser3 将提醒输出明码。如果明码匹配,则 myuser3 将被授予拜访 mydatabase 的权限。
🔨hostssl mydatabase myuser4 192.168.1.0/24 cert clientcert=verify-ca
🔔示意如果 myuser4 应用 TLS 在 192.168.1.0 网络中连贯,则 myuser4 须要提供本人的 X509 证书,服务器将应用 ssl_ca_file 中配置的 CA 证书验证客户端证书。如果证书能够信赖,则 PG 将读取客户端提供的证书中的专用名(CN)字段,并查看它是否与连贯用户的用户名匹配,如果匹配,则 user4 将有权拜访 mydatabase。
🔨hostnossl mydatabase myuser5 127.0.0.1/32 trust
💡意味着如果 myuser5 在 127.0.0.1 localhost 中不应用 TLS 连贯,myuser5 将只被授予对 mydatabase 的拜访权限。
04 /PostgreSQL 客户端 TLS 选项 /
大多数状况下,当 psql 客户端连贯到启用了 TLS 的 Postgres 服务器时,是 psql 客户端将验证 Postgres 服务器发送的实体证书(在 postgresql.conf 中 ssl_cert_file 配置)。💁换句话说,客户端验证服务器。当然,psql 客户端还须要具备 CA 证书的正本(或由公共根 CA 签名的子 CA 证书),客户端能够应用该正本在握手期间🤝验证服务器的证书。
🌏这相似于用户在浏览器上连贯到 https 网站。例如,Web 服务器 google.ca 握手期间🤝将其服务器证书发送到您的浏览器,浏览器将应用浏览器附带的许多内置 CA 证书来验证此证书。如果证书能够信赖,则容许您连贯。如果没有,它会给你一个正告页面,说“你的连贯不是公有的”,你能够抉择持续或不持续。
应用 psql 客户端,您能够指定要发送到服务器的证书和用于验证服务器证书的 CA 证书。
psql -U myuser2 -h 192.168.1.123 -d "sslmode=verify-ca dbname=mydatabase sslrootcert=/home/user/cert/cacert.pem sslcert=/home/user/cert/client.pem sslkey=/home/user/cert/client.key"
🗺️这意味着 psql 客户端将应用 sslrootcert 中指定的 CA 证书验证服务器的证书。🔔因为服务器还要求客户端提供证书(因为 pg_hba.conf 中的 clientcert=verify-ca),客户端会将 sslcert 中指定的证书发送到服务器进行互相身份验证。
对于 IvorySQL
IvorySQL 致力于创立容纳和激情的社区,保持凋谢,自在,共享的精力,放弃专一、专业性。
官网网址:
https://www.ivorysql.org/zh-cn/
社区仓库:
https://github.com/IvorySQL/IvorySQL
IvorySQL 社区欢送并赞叹所有类型的奉献,期待您的退出!
还有,别忘了在 GitHub 给咱们一个 ⭐奥~