فعال کردن احراز هویت SSL برای اتصالات برقرار شده با سرور یکی از راههای تضمین حریم خصوصی دادهها است. PostgreSQL از اتصالات SSL برقرار شده با سرور پایگاه داده پشتیبانی میکند، بنابراین تضمین میکند که تمام ارتباطات رد و بدل شده بین کلاینت و سرور رمزگذاری شده باشند.
در این آموزش، نحوه فعال کردن اتصالات SSL برای سرور پایگاه داده PostgreSQL را نشان خواهیم داد.
مرحله ۱: نصب سرور PostgreSQL #
اول از همه، باید سرور PostgreSQL را روی سیستم لینوکس خود نصب کنید. اگر PostgreSQL از قبل روی سرور شما نصب شده است، میتوانید از این مرحله صرف نظر کنید و به مرحله بعدی بروید.
در این راهنما، با نصب آخرین نسخه PostgreSQL (PostgreSQL 14) روی Rocky Linux 8 شروع خواهیم کرد.
ابتدا از طریق SSH به سرور خود وارد شوید. سپس مخازن را رفرش کرده و بستهها را به آخرین نسخههای خود ارتقا دهید.
sudo dnf update
آخرین نسخه PostgreSQL توسط مخزن AppStream ارائه نشده است. برای تأیید این موضوع، ماژولهای PostgreSQL موجود را فهرست کنید.
dnf module list postgresql -y

از خروجی بالا، آخرین نسخه 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 را غیرفعال کنید:
sudo dnf module disable postgresql -qy
در مرحله بعد، سرور و کلاینت PostgreSQL 14 را به شرح زیر نصب کنید.
sudo dnf install postgresql14 postgresql14-server -y

پس از آن، پایگاه داده PostgreSQL را به صورت زیر مقداردهی اولیه کنید.
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

به طور پیشفرض، PostgreSQL هنگام نصب در Rocky Linux به طور خودکار شروع نمیشود. بنابراین، سرویس پایگاه داده را شروع کنید.
$ sudo systemctl start postgresql-14
علاوه بر این، آن را طوری فعال کنید که در هنگام راهاندازی سیستم شروع به کار کند.
$ sudo systemctl enable postgresql-14
برای تأیید اینکه سرویس PostgreSQL در حال اجرا است، دستور زیر را اجرا کنید:
$ sudo systemctl status postgresql-14

خروجی بالا تأیید میکند که سرور PostgreSQL فعال و در حال اجرا است. به طور پیشفرض، PostgreSQL به پورت ۵۴۳۲ گوش میدهد و میتوانید با اجرای ssدستور زیر این موضوع را تأیید کنید.
$ ss -pnltu | grep 5432
شما باید خروجی زیر را دریافت کنید که تأیید میکند همه چیز به خوبی کار میکند.

مرحله ۲: پیکربندی رمز عبور برای کاربر Postgres #
هنگام نصب PostgreSQL، یک کاربر پیشفرض به نام postgresدر سیستم ایجاد میشود. این کاربر، یک کاربر ارشد (super user) است و دارای امتیازات دسترسی برای انجام تقریباً هر کاری از جمله مدیریت پایگاههای داده، جداول، توابع طرحواره و هر شیء دیگری در پایگاه داده PostgreSQL میباشد.
کاربر Postgres از روش احراز هویت ident استفاده میکند و هیچ رمز عبوری تنظیم نشده است. به دلایل امنیتی، توصیه میشود برای جلوگیری از نقضهای احتمالی، رمز عبور تعیین کنید.
برای انجام این کار، به کاربر ریشه (root) بروید
$ sudo su
بعد، به postgresکاربر مورد نظر بروید.
$ su - postgres
به پوسته PostgreSQL بروید
$ psql
سپس postgresرمز عبور کاربر را با استفاده از ALTERکوئری همانطور که نشان داده شده است، تنظیم کنید.
ALTER USER postgres WITH PASSWORD 'your-password'

مرحله ۳: ایجاد گواهینامههای SSL برای سرور PostgreSQL #
برای اینکه SSL با PostgreSQL کار کند، باید سه فایل گواهی ایجاد کنید:
- server.key – این فایل کلید خصوصی است
- server.crt – این فایل گواهی سرور است
- root.crt – این گواهی ریشه معتبر است
ابتدا، همانطور که نشان داده شده است، دایرکتوری را به دایرکتوری داده PostgreSQL تغییر دهید.
cd /var/lib/pgsql/14/data
در مرحله بعد، یک کلید خصوصی RSA 2048 بیتی با رمزگذاری AES به شرح زیر ایجاد کنید.
openssl genrsa -aes128 2048 > server.key
در طول ایجاد کلید خصوصی، از شما یک عبارت عبور خواسته میشود. آن را تایپ و تأیید کنید.
بعداً میتوانید با اجرای دستور زیر از وجود کلید اطمینان حاصل کنید:
ls -l | grep server.key

کلید خصوصی دارای یک عبارت عبور مرتبط با خود است. با این حال، برای استفاده بیشتر از این کلید، باید عبارت عبور را حذف کنید. برای انجام این کار، دستور زیر را اجرا کنید:
openssl rsa -in server.key -out server.key

یک بار دیگر، عبارت عبور را دوباره وارد کنید و ENTER را بزنید.
مرحله ۴: اعمال مجوزهای لازم و حقوق مالکیت #
برای امنیت بیشتر، باید مجوزهای فقط خواندنی کلید خصوصی را همانطور که نشان داده شده است به کاربر ریشه اختصاص دهید.
chmod 400 server.key
علاوه بر این، مالکیت کلید را به کاربر و گروه postgres تنظیم کنید.
chown postgres.postgres server.key
مرحله ۵: ایجاد فایل گواهی سرور #
اکنون، یک فایل گواهی خودامضا شده بر اساس کلید خصوصی ایجاد کنید. فایل گواهی زیر به مدت ۳۶۵ روز معتبر است.
# openssl req -new -key server.key -days 365 -out server.crt -x509
این دستور از شما اطلاعاتی میخواهد که در فایل گواهی گنجانده خواهد شد. بنابراین، تمام جزئیات را به درستی وارد کنید.

از آنجایی که شما از یک گواهی خودامضا استفاده میکنید، با تهیه یک کپی از فایل گواهی سرور، همانطور که نشان داده شده است، از آن به عنوان گواهی ریشه مورد اعتماد استفاده خواهید کرد.
# cp server.crt root.crt
مرحله ۶: پیکربندی 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
مرحله ۷: تست اتصال SSL #
در این مرحله، PostgreSQL طوری پیکربندی شده است که از SSL برای اتصالات از راه دور استفاده کند. برای انجام این کار، همانطور که نشان داده شده است، با استفاده از کاربر postgres به سرور پایگاه داده وارد میشویم.
psql -U postgres -p 5432 -h 45.79.192.104
این -Uپرچم، کاربر لاگینی را که برای دسترسی به سرور پایگاه داده استفاده میکنیم، نشان میدهد.
این -pپرچم، پورتی را که PostgreSQL به آن گوش میدهد (بهطور پیشفرض ۵۴۳۲) مشخص میکند.
این -hپرچم، آدرس IP میزبان را مشخص میکند.
خروجی زیر تأیید میکند که SSL فعال است و ما از یک گواهی خودامضا (self-signed certificate) استفاده میکنیم.

نتیجه گیری #
در این آموزش، نحوه فعالسازی پشتیبانی SSL در PostgreSQL Server با استفاده از یک گواهی SSL خودامضا شده را نشان دادهایم. ما اتصال SSL را برای همه پایگاههای داده و کاربران پیکربندی شده در سرور PostgreSQL فعال کردهایم. سرور به همه اتصالات ورودی روی پورت پیشفرض PostgreSQL گوش میدهد و از کلاینتها میخواهد که از SSL استفاده کنند.
