เมื่อพยายามรักษาข้อมูลในฐานข้อมูล PostgreSQL ให้ปลอดภัยสิ่งแรกที่ต้องทำคือเข้ารหัสการเชื่อมต่อทั้งหมดเพื่อปกป้องข้อมูลรับรองการพิสูจน์ตัวตน (ชื่อผู้ใช้ / รหัสผ่าน) คู่มือนี้จัดทำขึ้นเพื่อช่วยในการสร้างการเชื่อมต่อ SSL ที่ปลอดภัยกับคอนเทนเนอร์ PostgreSQL ซึ่งโฮสต์อยู่ที่ Ruk-Com Cloud

ด้านล่างนี้เราจะสำรวจ การปรับแต่ง PostgreSQL Server ที่เหมาะสมซึ่งจำเป็นสำหรับการเปิดใช้ SSL และการสร้างใบรับรอง จากนั้นเราจะสร้างและเพิ่มใบรับรองสำหรับเครื่อง link # client และสุดท้ายจะสร้าง connection ที่ปลอดภัยกับเซิร์ฟเวอร์ของเราผ่านเครื่องมือ pgAdmin ไปดูกันต่อเลย
การกำหนดค่า PostgreSQL Server
เห็นได้ชัดว่าสำหรับบทนี้เราจะใช้ Environment ที่มีฐานข้อมูล PostgreSQL อยู่ภายในซึ่งคุณสามารถ link # create ได้อย่างง่ายดายหากคุณยังไม่ได้ทำมาก่อน

Tip: ในกรณีที่คุณไม่เคยดำเนินการที่คล้ายกันมาก่อนคุณจำเป็นต้องรู้เรืองเหล่านี้
- สร้าง SSH keypair
- เพิ่ม public SSH key ของคุณที่แดชบอร์ด
- เข้าถึงบัญชีของคุณ ผ่านทาง SSH protocol

2. ตอนนี้เพื่อให้สามารถทำงานกับ SSL ได้ คุณต้องเพิ่มไฟล์ 3 ไฟล์ต่อไปนี้ในไดเร็กทอรีเซิร์ฟเวอร์ /var/lib/pgsql/data
- server.key – ไพรเวทคีย์
- server.crt – ใบรับรองเซิร์ฟเวอร์
- root.crt – ใบรับรองหลักที่เชื่อถือได้
เคล็ดลับ :
- เราจะไม่อธิบายรายละเอียดเกี่ยวกับพารามิเตอร์คำสั่งในที่นี้ แต่หากคุณต้องการทราบข้อมูลเพิ่มเติม เพียงแค่ดูหน้า link # Self-Signed Custom SSL ในเอกสารของเราหรือตรวจสอบเว็บไซต์ official link # OpenSSL เพื่อดูลิสการดำเนินการทั้งหมดที่มีอยู่
- คุณยังสามารถใช้ใบรับรอง link # custom SSL ได้เช่นเดียวกับที่อธิบายไว้ด้านล่าง (ทำตามส่วนสร้างใบรับรอง Custom SSL ของคำแนะนำที่เชื่อมโยงกันเพื่อรับข้อมูลดังกล่าว) ในกรณีหลังนี้คุณสามารถข้ามขั้นตอนการสร้างและข้ามไปยัง link # 6th step ของคำสั่งนี้ได้โดยตรง
ไปที่โฟลเดอร์ที่กล่าวถึงและดำเนินการตามขั้นตอนด้านล่าง
3. ก่อนอื่นมาทำการสร้างไฟล์แรก – ไพรเวทคีย์:
– ดำเนินการคำสั่งต่อไปนี้:
cd /var/lib/pgsql/data
openssl genrsa -des3 -out server.key 1024

ในระหว่างการสร้าง server.key คุณจะถูกขอ pass phrase – ระบุและยืนยันเพื่อเสร็จสิ้นการสร้าง
– ตอนนี้เพื่อที่จะทำงานกับคีย์นี้ต่อไปจำเป็นต้องลบรหัสผ่านที่คุณได้เพิ่มไว้ก่อนหน้านี้ ให้ดำเนินการคำสั่งต่อไปนี้:
openssl rsa -in server.key -out server.key

ป้อนรหัส passphase อีกครั้ง เพื่อยืนยันอีกครั้ง
– ตั้งค่า การอนุญาต และสิทธิ์การเป็นเจ้าของที่เหมาะสมสำหรับไฟล์ไพรเวทคีย์ของคุณด้วยคำสั่งถัดไป:
chmod 400 server.key
chown postgres.postgres server.key

4. ตอนนี้ต้องสร้างใบรับรองเซิร์ฟเวอร์ตามไฟล์ server.key ของคุณเช่น:
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=US/ST=Nontaburi/L=Nontaburi/O=RukCom/CN=mysite.com/[email protected]'

Note: นี่คือข้อมูลที่ต้องใส่สำหรับพารามิเตอร์ –subj ถ้าใบรับรองนี้ ใช้กับ Production:
Unit | Meaning | Example |
---|---|---|
/C= | Country | GB |
/ST= | State | London |
/L= | Location | London |
/O= | Organization | Global Security |
/OU= (optional) | Organizational Unit | IT Department |
/CN= | Common Name | example.com |
/emailAddress= | [email protected] | |
ถ้าคุณไม่ใส่พารามิเตอร์ -subj ในคำสั่ง จะเป็นการ inquiry โดยอัตโนมัติ. |
5. เนื่องจากเรากำลังจะลงนามใบรับรองด้วยตัวเอง ใบรับรองเซิร์ฟเวอร์ที่สร้างขึ้นจึงสามารถใช้เป็นใบรับรองหลักที่เชื่อถือได้เช่นกัน ดังนั้นเพียงแค่ทำสำเนาด้วยชื่อที่เหมาะสม:
cp server.crt root.crt

ตอนนี้คุณมีไฟล์ใบรับรองทั้ง 3 ไฟล์ คุณสามารถดำเนินการต่อในการกำหนดค่าฐานข้อมูล PostgreSQL ซึ่งจำเป็นสำหรับการเปิดใช้งานและใช้งาน SSL
6. เปิดไฟล์ pg_hba.conf ซึ่งอยู่ในโฟลเดอร์เดียวกันเพื่อแก้ไขด้วย terminal editor ที่ต้องการ (ตัวอย่างเช่น vim) หรือโดยตรงผ่านแดชบอร์ด
แทนที่เนื้อหาเริ่มต้นด้วยบรรทัดต่อไปนี้:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv4 remote connections for authenticated users
hostssl all webadmin 0.0.0.0/0 md5 clientcert=1

เคล็ดลับ : ในกรณีที่คุณกำลังจะทำงานกับฐานข้อมูลที่ไม่ใช่ผู้ใช้ webadmin เริ่มต้นให้เปลี่ยนค่าที่เหมาะสมภายในบรรทัดสุดท้ายของไฟล์เป็นชื่อที่ต้องการ โปรดทราบว่าในกรณีนี้คุณจะต้องใช้ชื่อผู้ใช้เดียวกันสำหรับคำสั่งเพิ่มเติมทั้งหมด (เราจะระบุตำแหน่งที่จำเป็นไว้)
7. เพื่อเสร็จสิ้นการกำหนดค่าคุณต้องใช้การเปลี่ยนแปลงเพิ่มเติมกับไฟล์ postgresql.conf ไปที่ส่วน ecurity และ Authentication (ประมาณบรรทัดที่ 80) และเปิดใช้งานการใช้งาน SSL โดยการนำคอมเมนต์ออกและเปลี่ยนค่าเป็น “on” นอกจากนี้ให้เพิ่มพารามิเตอร์ ssl_ca_file ใหม่ด้านล่าง:
ssl = on
ssl_ca_file = 'root.crt'

อย่าลืมบันทึกการแก้ไข
8. สุดท้ายรีสตาร์ทคอนเทนเนอร์ PostgreSQL ของคุณเพื่อใช้การตั้งค่าใหม่:
sudo service postgresql restart

Client Certificates
ตอนนี้เรามาสร้างไฟล์ใบรับรอง SSL สำหรับ client instance เพิ่มอีกหนึ่งชุดเพื่อรองรับการเชื่อมต่อที่ปลอดภัยทั้งสองด้าน
1. กลับไปที่หน้าต่างเทอร์มินัลพร้อมการเชื่อมต่อ SSH ไปยังเซิร์ฟเวอร์ PostgreSQL เมื่อเข้าไปข้างในแล้วให้สร้างไพรเวทคีย์สำหรับไคลเอนต์ ตัวอย่างเช่นในไดเร็กทอรี /tmp:
openssl genrsa -des3 -out /tmp/postgresql.key 1024
openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key

2. จากนั้นสร้างใบรับรอง SSL สำหรับผู้ใช้ฐานข้อมูล PostgreSQL (โดยค่าเริ่มต้นเป็น webadmin) และลงนามด้วยไฟล์ root.crt ที่เชื่อถือได้ของเราบนเซิร์ฟเวอร์
openssl genrsa -des3 -out /tmp/postgresql.key 1024
openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key
หมายเหตุ :
- ในขณะที่ข้อมูลทั่วไปสำหรับพารามิเตอร์ subj สามารถเปลี่ยนเป็นข้อมูลส่วนบุคคลของคุณได้ที่นี่ Common Name (/ CN =) ต้องเท่ากับชื่อผู้ใช้ฐานข้อมูลที่คุณตั้งไว้ในระหว่างการสร้างใบรับรองครั้งแรกในไฟล์การกำหนดค่าเซิร์ฟเวอร์ (ในกรณีของเราคือ webadmin)
- ไฟล์ root.crt และ server.key ควรอยู่ในโฟลเดอร์เดียวกันคำสั่งที่ 2 ที่ถูกเรียกใช้ มิฉะนั้นควรระบุพาธแบบเต็ม

3. หลังจากสร้างไฟล์ – postgresql.key, postgresql.crt, root.crt เสร็จแล้ว ต้องย้ายไฟล์เหล่านี้ไปยังโฟลเดอร์ .postgresql ที่เครื่องไคลเอนต์ของคุณ (คุณสามารถใช้โปรแกรมเสริม FTP หรือเพียงแค่คัดลอกและวางไฟล์เนื้อหาลงไป)
เคล็ดลับ : หากยังไม่มีไดเร็กทอรีดังกล่าวให้สร้างด้วย mkdir ~/.postgresql หรือคำสั่งที่คล้ายกันตามระบบปฏิบัติการของคุณ

นอกจากนี้หากจำเป็นคุณสามารถตั้งค่าสิทธิ์ในการอ่านคีย์สำหรับเจ้าของเท่านั้นด้วยคำสั่ง chmod 0400 ~/.postgresql/postgresql.key เพื่อให้เกิดความปลอดภัยมากขึ้น
เคล็ดลับ : อย่าลืมลบคีย์ออกจากไดเร็กทอรี tmp บนเซิร์ฟเวอร์ฐานข้อมูลของคุณในภายหลัง
สร้างการเชื่อมต่อผ่าน PgAdmin
ในที่สุดหลังจากการกำหนดค่าเซิร์ฟเวอร์และไคลเอ็นต์เสร็จสิ้นคุ ณก็พร้อมที่จะสร้างการเชื่อมต่อ ในกรณีของเราจะใช้เครื่องมือ pgAdmin 4 เป็นตัวอย่างดังนั้นจึงควรติดตั้งแอปพลิเคชันนี้ (หรือแอปพลิเคชันอื่น ๆ ที่ต้องการ) ไว้ล่วงหน้า
1. ในการเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลผ่าน SSL คุณต้องเชื่อมต่อ link # public IP หรือ link # endpoint สำหรับคอนเทนเนอร์ฐานข้อมูล PostgreSQL
เราจะพิจารณากรณีส่วนหลัง – เข้าถึงการตั้งค่า Environment เปลี่ยนไปที่ส่วน Endpoints และ Add จุด endpoint ใหม่ด้วยปุ่มชื่อเดียวกันที่หน้าต่างด้านบน

2. ตอนนี้เมื่อคุณมีจุดเชื่อมต่อแล้วให้เรียกใช้ไคลเอนต์ pgAdmin 4 และเลือก Create Server

3. เลือกที่ tab Connection ป้อนข้อมูล hostname และ port

4. เลือกที่แถบ SSL และ ที่ SSL Mode ให้เลือกเป็น Require เสร็จแล้วใหักด Save

ตอนนี้คุณสามารถเชื่อมต่อแอปพลิเคชันของคุณกับฐานข้อมูลได้แล้ว (ใช้คำแนะนำ เชื่อมต่อกับฐานข้อมูล เป็นตัวอย่าง) และเปิดใช้งานการกำหนดค่า SSL สำหรับโปรเจ็กต์ของคุณเพื่อเข้ารหัสข้อมูลของคุณในขณะที่ดึง / ถ่ายโอนข้อมูล
หากคุณประสบปัญหาใด ๆ ขณะกำหนดค่าการเชื่อมต่อ SSL โปรดอย่าลังเลที่จะขอความช่วยเหลือจากผู้เชี่ยวชาญด้านเทคนิคของเราที่ Stackoverflow