PostgreSQL數(shù)據(jù)庫配置SSL操作的實現(xiàn)方法
背景:
因為postgresql或者mysql目前通過docker安裝,只需要輸入主機(jī)IP、用戶名、密碼即可訪問成功,這樣其實是不安全的,可能會通過一些手段獲取到用戶名密碼導(dǎo)致數(shù)據(jù)被竊取。而ES、kafka等也是通過用戶名/密碼方式連接,但是這些數(shù)據(jù)重要性相比較于數(shù)據(jù)庫要低一些,畢竟都是一些日志以及消息而已。
解決方案:
通過開啟SSL證書認(rèn)證的方式加強(qiáng)防護(hù),配合使用防火墻策略白名單方式、增加密碼復(fù)雜度。本文檔主要是介紹開啟SSL認(rèn)證方式。
一、創(chuàng)建目錄存儲配置信息
1、mkdir /postgre 2、進(jìn)入 文件夾 cd postgre 3、創(chuàng)建目錄 mkdir certs 4、創(chuàng)建目錄 mkdir data
二、創(chuàng)建Openssl配置文件
1、進(jìn)入cd /postgre/certs 目錄 2、執(zhí)行 touch openssl.cnf 3、修改文件 vim openssl.cnf 4、將下面信息粘貼至文件中
[ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext prompt = no [ req_distinguished_name ] C = CN ST = Beijing L = Beijing O = MyOrg OU = IT CN = postgres [ req_ext ] subjectAltName = @alt_names [ alt_names ] IP.1 = 192.168.2.1 #數(shù)據(jù)庫主機(jī)地址 DNS.1 = postgres #數(shù)據(jù)庫用戶名
如下圖:
三、創(chuàng)建SSL證書生成腳本generate_certs.sh
1、進(jìn)入 cd /postgre/certs 目錄 2、touch generate_certs.sh 3、vim generate_certs.sh 4、將下面信息粘貼至文件中
#!/bin/bash ROOT_KEY="root.key" ROOT_CRT="root.crt" SERVER_KEY="server.key" SERVER_CSR="server.csr" SERVER_CRT="server.crt" DAYS=365 BITS=2048 echo "生成根私鑰..." openssl genpkey -algorithm RSA -out "$ROOT_KEY" echo "生成根證書..." openssl req -x509 -new -nodes -key "$ROOT_KEY" -sha256 -days "$DAYS" -out "$ROOT_CRT" -subj "/C=CN/ST=Beijing/L=Beijing/O=Example Root CA/OU=IT Department/CN=postgres" echo "生成服務(wù)器私鑰..." openssl genpkey -algorithm RSA -out "$SERVER_KEY" echo "生成證書簽名請求 (CSR)..." openssl req -new -key "$SERVER_KEY" -out "$SERVER_CSR" -config openssl.cnf echo "使用根證書簽署服務(wù)器證書..." openssl x509 -req -in "$SERVER_CSR" -CA "$ROOT_CRT" -CAkey "$ROOT_KEY" -CAcreateserial -out "$SERVER_CRT" -days 365 -extfile openssl.cnf echo "驗證服務(wù)器證書..." openssl verify -CAfile "$ROOT_CRT" "$SERVER_CRT" echo "生成完成!以下是生成的文件:" ls -l "$ROOT_KEY" "$ROOT_CRT" "$SERVER_KEY" "$SERVER_CSR" "$SERVER_CRT"
如圖:
四、創(chuàng)建配置證書目錄以及生成證書
1、執(zhí)行cd /postgre/certs 2、執(zhí)行sh generate_certs.sh 運行該腳本 3、如下圖代表生成成功 4、查看生成的證書
五、為證書目錄賦權(quán)限,以便postgre容器可以訪問執(zhí)行這些證書
1、cd /postgre 2、chmod 777 certs 3、chmod 777 data 2、chown 999:999 certs/* 之所以所屬用戶/組設(shè)置為999 是因為postgre默認(rèn)進(jìn)程所屬就是999。 3、chmod 600 certs/* 為證書目錄設(shè)置為所屬用戶可讀可寫,如果權(quán)限過大會在連接數(shù)據(jù)庫時報錯!
六、創(chuàng)建配置文件postgresql.conf
1、進(jìn)入 cd /postgre 2、執(zhí)行 touch postgresql.conf 命令 3、執(zhí)行 vim postgresql.conf 命令 4、復(fù)制如下配置信息到文件中
ssl = on #開啟SSL認(rèn)證 ssl_cert_file = '/var/lib/postgresql/certs/server.crt' #服務(wù)器證書路徑 ssl_key_file = '/var/lib/postgresql/certs/server.key' #密鑰路徑 ssl_ca_file = '/var/lib/postgresql/certs/root.crt' #根證書路徑 listen_addresses = '*' #監(jiān)聽所有 ssl_min_protocol_version = 'TLSv1.2' #SSL等級最小為1.2 logging_collector = on # 開啟日志 log_directory = 'log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_rotation_age = 1d # 日志文件保留一天后輪換 log_rotation_size = 10MB # 當(dāng)日志文件達(dá)到10MB時輪換 log_min_messages = debug # 記錄警告級別及以上的消息 log_connections = on # 記錄連接嘗試 log_disconnections = on # 記錄斷開連接
如下圖
七、創(chuàng)建配置文件pg_hba.conf
1、cd /postgre 1、執(zhí)行 touch pg_hba.conf 命令 2、執(zhí)行 vim pg_hba.conf 命令 3、復(fù)制如下配置信息到文件中 hostssl all all 0.0.0.0/0 cert clientcert=1
如下圖
八、安裝并啟動PostgreSQl
1、安裝postgreSQL 13.3版本 鏡像會提供給運維。 2、啟動postgreSQL容器 docker run -d --name my-postgres-ssl -p 5432:5432 -e POSTGRES_PASSWORD=xxxx -v /postgre/postgresql.conf:/etc/postgresql/postgresql.conf -v /postgre/certs:/var/lib/postgresql/certs -v /postgre/data:/var/lib/postgresql/data b2fcd079c1d4 -c 'config_file=/etc/postgresql/postgresql.conf' 其中 -e POSTGRES_PASSWORD=password 為數(shù)據(jù)庫設(shè)置密碼為 “password” 默認(rèn)用戶名為 “postgres” 其中 -v /postgre/postgresql.conf:/etc/postgresql/postgresql.conf 將宿主機(jī)的配置文件掛載到容器中。 其中 -v /postgre/certs:/var/lib/postgresql/certs 為數(shù)據(jù)庫映射證書目錄 將宿主機(jī)中的證書目錄掛載到容器中 前面為宿主機(jī)目錄 后面為容器中目錄??晒潭▽懰?。 其中 -v /postgre/data:/var/lib/postgresql/data 為數(shù)據(jù)庫映射數(shù)據(jù)存儲目錄。 其中 -c 'config_file=/etc/postgresql/postgresql.conf' 強(qiáng)制數(shù)據(jù)庫使用自定義的配置文件,忽略系統(tǒng)內(nèi)置的配置信息 后面會介紹如何編寫postgresql.conf文件。
九、替換容器中的pg_hba.conf配置文件
1、查詢 容器id 執(zhí)行 docker ps --filter "name=my-postgres-ssl" --format "{{.ID}}" 2、將配置文件復(fù)制容器中 docker cp /postgre/pg_hba.conf 容器ID:/var/lib/postgresql/data 3、重啟docker容器 docker restart 容器ID 4、查看運行日志 docker logs -f --tail 200 容器ID 5、如圖則運行成功
十、使用客戶端連接數(shù)據(jù)庫 此處使用Navicat
其中SSL配置中 客戶端密鑰 上傳 server.key 客戶端證書 上傳 server.crt 根證書 上傳 root.crt 點擊【測試鏈接】
到此這篇關(guān)于PostgreSQL數(shù)據(jù)庫配置SSL操作的實現(xiàn)方法的文章就介紹到這了,更多相關(guān)PostgreSQL配置SSL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決sqoop import 導(dǎo)入到hive后數(shù)據(jù)量變多的問題
這篇文章主要介紹了解決sqoop import 導(dǎo)入到hive后數(shù)據(jù)量變多的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12PostgreSQL的擴(kuò)展dict_int應(yīng)用案例解析
dict_int擴(kuò)展為PostgreSQL提供了專業(yè)的整數(shù)文本處理能力,特別適合需要精確處理數(shù)字內(nèi)容的搜索場景,本文給大家介紹PostgreSQL的擴(kuò)展dict_int實際應(yīng)用案例,感興趣的朋友一起看看吧2025-07-07PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法
這篇文章主要給大家介紹了關(guān)于PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法, 在PostgreSQL中創(chuàng)建一個新用戶非常簡單,但可能會遇到權(quán)限問題,需要的朋友可以參考下2023-09-09Windows下Postgresql數(shù)據(jù)庫的下載與配置方法
這篇文章主要介紹了Windows下Postgresql數(shù)據(jù)庫的下載與配置方法 ,需要的朋友可以參考下2014-06-06PostgreSQL數(shù)據(jù)類型格式化函數(shù)操作
這篇文章主要介紹了PostgreSQL數(shù)據(jù)類型格式化函數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12postgreSQL自動生成隨機(jī)數(shù)值的實例
這篇文章主要介紹了postgreSQL自動生成隨機(jī)數(shù)值的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01在postgresql中結(jié)束掉正在執(zhí)行的SQL語句操作
這篇文章主要介紹了在postgresql中結(jié)束掉正在執(zhí)行的SQL語句操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12