เชื่อมต่อ PostgreSQL ผ่าน SSL
คู่มือนี้เรียบเรียงสำหรับ Ruk-Com PaaS หน้าจอและตัวเลือกอาจแตกต่างตามเวอร์ชันและสิทธิ์ของบัญชี
ตรวจสอบ Environment, Region, สิทธิ์บัญชี และสำรองค่าปัจจุบันก่อนดำเนินการกับระบบจริง
วัตถุประสงค์
บทความนี้อธิบายการใช้งาน เชื่อมต่อ PostgreSQL ผ่าน SSL บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง
ก่อนเริ่มดำเนินการ
- เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
- ตรวจสอบชื่อ Environment, Region และ Resource เป้าหมายก่อนบันทึกการเปลี่ยนแปลง
- สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production
เมื่อพยายามรักษาข้อมูลใน Database PostgreSQL ให้ปลอดภัยสิ่งแรกที่ต้องทำคือเข้ารหัสการเชื่อมต่อทั้งหมดเพื่อปกป้องข้อมูลรับรองการพิสูจน์ตัวตน (ชื่อผู้ใช้ / รหัสผ่าน) คู่มือนี้จัดทำขึ้นเพื่อช่วยในการสร้างการเชื่อมต่อ SSL ที่ปลอดภัยกับ Container PostgreSQL ซึ่ง Host อยู่ที่ Ruk-Com Cloud

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

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

2. ตอนนี้เพื่อให้สามารถทำงานกับ SSL ได้ คุณต้องเพิ่มไฟล์ 3 ไฟล์ต่อไปนี้ใน Directory Server/var/lib/pgsql/data
- server.key - ไพรเวทคีย์
- server.crt - ใบรับรอง Server
- root.crt – ใบรับรองหลักที่เชื่อถือได้
เคล็ดลับ :
- เราจะไม่อธิบายรายละเอียดเกี่ยวกับ Parameter คำสั่งในตัวอย่างนี้ แต่หากคุณต้องการทราบข้อมูลเพิ่มเติม เพียงแค่ดูหน้า link # Self-Signed Custom SSL ในเอกสารของเราหรือตรวจสอบเว็บไซต์ official link # OpenSSL เพื่อดูลิสการดำเนินการทั้งหมดที่มีอยู่
- คุณยังสามารถใช้ใบรับรอง link #SSL แบบกำหนดเองได้เช่นเดียวกับที่อธิบายไว้ด้านล่าง (ทำตามส่วนสร้างใบรับรอง Custom SSL ของคำแนะนำที่เชื่อมโยงกันเพื่อรับข้อมูลดังกล่าว) ในกรณีหลังนี้คุณสามารถข้ามขั้นตอนการสร้างและข้ามไปยัง link #ขั้นตอนที่ 6ของคำสั่งนี้ได้โดยตรง
ไปที่โฟลเดอร์ที่กล่าวถึงและดำเนินการตามขั้นตอนด้านล่าง
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 ตามไฟล์ 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]'

หมายเหตุ:นี่คือข้อมูลที่ต้องใส่สำหรับ Parameter -วิชาถ้าใบรับรองนี้ ใช้กับ Production:
5. เนื่องจากเรากำลังจะลงนามใบรับรองด้วยตัวเอง ใบรับรอง Server ที่สร้างขึ้นจึงสามารถใช้เป็นใบรับรองหลักที่เชื่อถือได้เช่นกัน ดังนั้นเพียงแค่ทำสำเนาด้วยชื่อที่เหมาะสม:
cp server.crt root.crt

ตอนนี้คุณมีไฟล์ใบรับรองทั้ง 3 ไฟล์ คุณสามารถดำเนินการต่อในการกำหนดค่า Database PostgreSQL ซึ่งจำเป็นสำหรับการเปิดใช้งานและใช้งาน SSL
6. เปิดไฟล์pg_hba.confซึ่งอยู่ในโฟลเดอร์เดียวกันเพื่อแก้ไขด้วย terminal editor ที่ต้องการ (ตัวอย่างเช่น vim) หรือโดยตรงผ่าน Dashboard
แทนที่เนื้อหาเริ่มต้นด้วยบรรทัดต่อไปนี้:
# 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

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

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

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

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

3. หลังจากสร้างไฟล์ - postgresql.key, postgresql.crt, root.crt เสร็จแล้ว ต้องย้ายไฟล์เหล่านี้ไปยังโฟลเดอร์.postgresql ที่เครื่อง Client ของคุณ (คุณสามารถใช้โปรแกรมเสริม FTP หรือเพียงแค่คัดลอกและวางไฟล์เนื้อหาลงไป)
เคล็ดลับ: หากยังไม่มี Directory ดังกล่าวให้สร้างด้วย mkdir ~/.postgresql หรือคำสั่งที่คล้ายกันตามระบบปฏิบัติการของคุณ
นอกจากนี้หากจำเป็นคุณสามารถตั้งค่าสิทธิ์ในการอ่านคีย์สำหรับเจ้าของเท่านั้นด้วยคำสั่ง chmod 0400 ~/.postgresql/postgresql.key เพื่อให้เกิดความปลอดภัยมากขึ้น
เคล็ดลับ: อย่าลืมลบคีย์ออกจาก Directory tmp บน ServerDatabase ของคุณในภายหลัง
สร้างการเชื่อมต่อผ่าน PgAdmin
ในที่สุดหลังจากการกำหนดค่า Server และ Client เสร็จสิ้นคุ ณก็พร้อมที่จะสร้างการเชื่อมต่อ ในกรณีของเราจะใช้เครื่องมือ pgAdmin 4 เป็นตัวอย่างดังนั้นจึงควรติดตั้ง Application นี้ (หรือ Application อื่น ๆ ที่ต้องการ) ไว้ล่วงหน้า
1. ในการเชื่อมต่อกับ ServerDatabase ผ่าน SSL คุณต้องเชื่อมต่อ link # public IP หรือ link # endpoint สำหรับ ContainerDatabase PostgreSQL
เราจะพิจารณากรณีส่วนหลัง – เข้าถึงการตั้งค่า Environment เปลี่ยนไปที่ส่วน Endpoints และ Add จุด endpoint ใหม่ด้วยปุ่มชื่อเดียวกันที่หน้าต่างด้านบน

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

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

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

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