CLOUD PAAS / DATABASE

การสร้างการเชื่อมต่อ SSL กับฐานข้อมูล PostgreSQL Server

คู่มือนี้เรียบเรียงและปรับรูปแบบสำหรับ Ruk-Com Cloud PaaS ภาพหน้าจออาจแตกต่างเล็กน้อยตามเวอร์ชันของระบบ

คลิกหรือแตะภาพหน้าจอเพื่อดูรายละเอียดขนาดจริง

วัตถุประสงค์

บทความนี้อธิบายการใช้งาน การสร้างการเชื่อมต่อ SSL กับฐานข้อมูล PostgreSQL Server บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง

ก่อนเริ่มดำเนินการ

  • เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
  • ตรวจสอบชื่อ Environment, Region และทรัพยากรเป้าหมายก่อนบันทึกการเปลี่ยนแปลง
  • สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production

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

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

การกำหนดค่า PostgreSQL Server

เห็นได้ชัดว่าสำหรับบทนี้เราจะใช้ Environment ที่มีฐานข้อมูล PostgreSQL อยู่ภายในซึ่งคุณสามารถ link #สร้างได้อย่างง่ายดายหากคุณยังไม่ได้ทำมาก่อน

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

เคล็ดลับ:ในกรณีที่คุณไม่เคยดำเนินการที่คล้ายกันมาก่อนคุณจำเป็นต้องรู้เรืองเหล่านี้

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

2. ตอนนี้เพื่อให้สามารถทำงานกับ SSL ได้ คุณต้องเพิ่มไฟล์ 3 ไฟล์ต่อไปนี้ในไดเร็กทอรีเซิร์ฟเวอร์/var/lib/pgsql/data

  • server.key - ไพรเวทคีย์
  • server.crt - ใบรับรองเซิร์ฟเวอร์
  • root.crt – ใบรับรองหลักที่เชื่อถือได้

เคล็ดลับ :

  • เราจะไม่อธิบายรายละเอียดเกี่ยวกับพารามิเตอร์คำสั่งในตัวอย่างนี้ แต่หากคุณต้องการทราบข้อมูลเพิ่มเติม เพียงแค่ดูหน้า 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
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

ในระหว่างการสร้าง server.key คุณจะถูกขอ pass phrase – ระบุและยืนยันเพื่อเสร็จสิ้นการสร้าง

- ตอนนี้เพื่อที่จะทำงานกับคีย์นี้ต่อไปจำเป็นต้องลบรหัสผ่านที่คุณได้เพิ่มไว้ก่อนหน้านี้ ให้ดำเนินการคำสั่งต่อไปนี้:

openssl rsa -in server.key -out server.key
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

ป้อนรหัส passphase อีกครั้ง เพื่อยืนยันอีกครั้ง

- ตั้งค่า การอนุญาต และสิทธิ์การเป็นเจ้าของที่เหมาะสมสำหรับไฟล์ไพรเวทคีย์ของคุณด้วยคำสั่งถัดไป:

chmod 400 server.key
chown postgres.postgres server.key
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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]'
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

หมายเหตุ:นี่คือข้อมูลที่ต้องใส่สำหรับพารามิเตอร์ -วิชาถ้าใบรับรองนี้ ใช้กับ Production:

5. เนื่องจากเรากำลังจะลงนามใบรับรองด้วยตัวเอง ใบรับรองเซิร์ฟเวอร์ที่สร้างขึ้นจึงสามารถใช้เป็นใบรับรองหลักที่เชื่อถือได้เช่นกัน ดังนั้นเพียงแค่ทำสำเนาด้วยชื่อที่เหมาะสม:

cp server.crt root.crt
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

ตอนนี้คุณมีไฟล์ใบรับรองทั้ง 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
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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

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

ssl = on
ssl_ca_file = 'root.crt'
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

อย่าลืมบันทึกการแก้ไข

8. สุดท้ายรีสตาร์ทคอนเทนเนอร์ PostgreSQL ของคุณเพื่อใช้การตั้งค่าใหม่:

sudo service postgresql restart
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

ใบรับรองลูกค้า

ตอนนี้เรามาสร้างไฟล์ใบรับรอง 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
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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 ที่ถูกเรียกใช้ มิฉะนั้นควรระบุพาธแบบเต็ม
ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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 ใหม่ด้วยปุ่มชื่อเดียวกันที่หน้าต่างด้านบน

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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

หากคุณประสบปัญหาใด ๆ ขณะกำหนดค่าการเชื่อมต่อ SSL โปรดอย่าลังเลที่จะขอความช่วยเหลือจากผู้เชี่ยวชาญด้านเทคนิคของเราที่ Stackoverflow