Score:0

อัปเกรดใบรับรองเซิร์ฟเวอร์ Postgres SSL / ต่ออายุด้วย openssl

ธง ms

ฉันได้รับมรดก Company Postgres Server พร้อมไคลเอนต์ SSL จนถึงขณะนี้มีผู้ใช้ประมาณ 100 ราย

ปัญหาสองประการ: Ca Cert ของฉัน (root.crt) จะหมดอายุในปีหน้าและดูเหมือนว่าจะยังเป็น TlsV1.0 ดังนั้นจึงจำเป็นต้องอัปเกรด (ต่ออายุ) อย่างเร่งด่วน

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

ดังนั้นฉันจึงค้นหาวิธีแก้ปัญหาที่ใบรับรองเก่าและใหม่จะทำงานได้ จนกว่าใบรับรองเก่าทั้งหมดจะหมดอายุ ฉันชอบคำใบ้มากมาย (เช่น Serverfault) แต่จนถึงตอนนี้ยังไม่มีอะไรได้ผล

สิ่งที่ฉันทำจนถึงตอนนี้: ฉันใช้รหัส ca เก่า (rootCa.key) และสร้าง root.crt ใหม่) และฉันใช้รหัสเซิร์ฟเวอร์เก่า (server.key) เพื่อสร้าง server.crt ใหม่ ฉันติดตั้งรายการเพิกถอน (root.crl),root.crt, server.crt และ server.key บนเซิร์ฟเวอร์สำรองข้อมูล Postgres ของฉัน

ฉันสามารถเชื่อมต่อกับใบรับรอง newUser.crt ได้ แต่ไม่ใช่กับใบรับรองเก่า .... อย่างที่ฉันคาดไว้

ฉันค้นหาเว็บเหมือนนรกและพบคำแนะนำในการรวมใบรับรองเก่าและใหม่บนเซิร์ฟเวอร์ ดังนั้นฉันจึงรวม certs กับ cat: cat oldRoot.crt >> root.crt สำหรับไฟล์อื่นด้วย รายการเพิกถอนใช้งานไม่ได้ ดังนั้นฉันจึงแสดงความคิดเห็นที่บรรทัด: #ssl_crl_file = ใน Postgres.conf ดูเหมือนว่า Postgres จะทำงานโดยไม่มีรายการเพิกถอน

ผลลัพธ์: ขึ้นอยู่กับว่าใบรับรองใดมาก่อนใน server.crt ฉันสามารถเชื่อมต่อกับใบรับรองเก่าหรือใหม่ได้ แต่ไม่ใช้กับทั้งสองอย่าง ในการทดสอบ ฉันใช้ root.crt ที่รวมกับ oldServer.cert และ newServer.cert ด้วย ทั้งสองทำงานกับใหม่หรือเก่า

นั่นหมายความว่า root.crt ที่ผสานนั้นทำงานได้ดี แต่ไม่ใช่ server.crt ที่ผสาน

ฉันตรวจสอบด้วย opensl และผสาน root.crt และผสาน server.crt: ยืนยัน openssl -verbose -x509_strict -CAfile root.crt -CApath old_cert.crt เซิร์ฟเวอร์.crt old_cert.crt: ตกลง server.crt: ตกลง

ยืนยัน openssl -verbose -x509_strict -CAfile root.crt -CApath new_cert.crt เซิร์ฟเวอร์.crt new_cert.crt: ตกลง server.crt: ตกลง

ดูเหมือนว่า openssl สามารถจัดการใบรับรองที่ผสานได้ แต่ไม่ใช่ Postgres

มีความคิดวิธีแก้ปัญหานี้หรือไม่?

คำใบ้ใด ๆ ที่ชื่นชม

ขอแสดงความนับถือ Schlauchi

เซิร์ฟเวอร์: Ubuntu 2104, Postgres13 เซิร์ฟเวอร์สำรอง: Ubuntu 1604, Postgres13

Score:0
ธง ms

คำตอบสั้น ๆ ของฉันสำหรับคำถามของฉันคือ: Yabadabbadoo....เป็นไปได้และใช้งานได้กับระบบสำรองข้อมูลของฉัน!

มันไม่ยอมให้ฉันหลับ ฉันเลยเริ่มใหม่ตั้งแต่เริ่มต้น: อันดับแรก ฉันตรวจสอบใบรับรองเก่าและใหม่เพื่อหาข้อแตกต่างอีกครั้ง ข้อแตกต่างเพียงอย่างเดียวคือลำดับในหัวเรื่องต่างกัน แต่เนื้อหาเหมือนกัน

#1 ดังนั้นฉันจึงสร้าง root.crt และ server.crt ใหม่ด้วย rootCa.key เก่าและ server.key เก่าที่มีลำดับหัวเรื่องที่เหมือนกัน ตอนนี้เอาต์พุตข้อความก็เหมือนกัน (หัวเรื่อง, อัลกอริทึมลายเซ็น ....)

#2 ฉันสร้าง userCert ใหม่ด้วย root.crt

#3 ฉันติดตั้งใบรับรองใน Postgres และทดสอบ -> ใช้งานได้

#4 คราวนี้ฉันเริ่มด้วยใบรับรองใหม่ที่ด้านบน

แมว root_old.crt >> root.crt
แมว server_old.crt >> server.crt
cat server_old.key >> server.key

postgres เริ่มต้นใหม่ ...... และตอนนี้ใบรับรองเก่าและใหม่กำลังทำงาน!

#5 ตรวจสอบวิธีอื่นในการคัดลอกใบรับรองเก่าที่ผสานแล้ว:

แมว root_new.crt >> root.crt
cat server_new.crt >> server.crt
cat server_new.key >> server.key

postgres รีสตาร์ท ...... และไม่ทำงานอีกต่อไป ย้อนกลับไปที่ขั้นตอนที่ 4 ทุกอย่างทำงานได้ดีอีกครั้ง

#6 รายการเพิกถอน: ฉันสร้างรายการเพิกถอนสำหรับใบรับรองใหม่และติดตั้งใน postgres แล้ว:

แมว root_old.crl >> root.crl

ไม่แสดงความคิดเห็นบรรทัด: ssl_crl_file = /root.crl รีสตาร์ท postgres ......และทุกอย่างทำงานได้ดี

ฉันไม่รู้ว่าทำไมมันถึงใช้งานได้ในตอนนี้ ฉันไม่อยากจะเชื่อเลยจริงๆว่ามันเป็นคำสั่งเรื่อง ... เดาว่าฉันทำอย่างอื่นผิดในการลองครั้งแรก แต่ฉันจะไม่พยายามค้นหา มันใช้งานได้ และนั่นคือมัน :-)

บทสรุป:

สร้าง root.crt (CA) และ server.crt ด้วยคีย์เก่าและเหมือนกันมากที่สุด (ตรวจสอบเรื่องและอื่น ๆ )

รวมใบรับรอง รายการเพิกถอน และคีย์ เพื่อให้ใบรับรองเก่าอยู่ที่ด้านล่างของไฟล์

ขณะนี้ใบรับรองเก่ากำลังทำงานจนกว่าจะหมดอายุ และคุณสามารถสร้างใบรับรองใหม่ (พร้อม CA ใหม่) ด้วย Tls ที่อัปเกรดแล้วได้

ข้อมูลเพิ่มเติมบางอย่างเกี่ยวกับเวอร์ชัน Tls เมื่อฉันอัปเกรดเซิร์ฟเวอร์เป็น Ubuntu 2104 และ Postgres 13 ใบรับรองไม่ทำงาน ฉันพบคำใบ้ให้เพิ่มบรรทัดนี้ใน /etc/ssl/openssl.conf

โปรโตคอลขั้นต่ำ = TLSv1.0

ฉันรู้ว่ามันไม่ดี แต่ช่วยได้ในขณะนี้ ฉันไม่พบวิธีทดสอบว่าใบรับรองเป็น Tlsv1.0 หรือสูงกว่า การทดสอบเพียงอย่างเดียวว่า TlsV1.2 ใช้ pgsql (13) หรือ pgadmin4 ทั้งคู่จะไม่ทำงานกับ TlsV1.0

ดังนั้นในไฟล์ปรับแต่งสำหรับการสร้างใบรับรอง ฉันใช้สิ่งนี้:

โปรโตคอลขั้นต่ำ = TLSv1.2

psql (13) และ pgadmin4 ทำงานร่วมกับใบรับรองใหม่ได้แล้ว พออันเก่าหมดก็เปลี่ยน /etc/ssl/openssl.conf เป็นค่านั้นใหม่

อัปเกรดเป็นเวอร์ชัน Tls ถัดไปได้สูญเสียการต่อย :-)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา