Score:1

"ใบรับรองที่ลงนามด้วยตนเองในห่วงโซ่ใบรับรอง" เซิร์ฟเวอร์หรือไคลเอ็นต์

ธง cn

ฉันกำลังสร้างการสื่อสาร SSL ระหว่างเซิร์ฟเวอร์ pg DB และไคลเอนต์โหนด หลังจากทำตามเอกสารบางส่วนและนำไปใช้กับ opensl แล้ว การร้องเรียนของโหนด "ใบรับรองที่ลงนามด้วยตนเองในห่วงโซ่ใบรับรอง" การเพิ่มใบรับรองไปยังที่เก็บใบรับรองของ Windows ไม่ได้ช่วยอะไร

opensl สำหรับ DB Server ตาม หน้าเอกสาร:

openssl req -new -x509 -days 3650 -nodes -text -out serverdb.crt -keyout serverdb.key -subj "/CN=localhost"
การสร้างคีย์ส่วนตัว RSA
กำลังเขียนรหัสส่วนตัวใหม่ไปที่ 'serverdb.key'

openssl req -new -nodes -text -out rootdb.csr -keyout rootdb.key -subj "/CN=localhost"
การสร้างคีย์ส่วนตัว RSA
กำลังเขียนรหัสส่วนตัวใหม่ไปที่ 'rootdb.key'

openssl x509 -req -in rootdb.csr -text -days 3650 -extfile cnf\openssl.cnf -extensions v3_ca -signkey rootdb.key -out rootdb.crt
ลายเซ็นตกลง
หัวเรื่อง = CN = localhost
รับรหัสส่วนตัว

openssl req -new -nodes -text -out serverdb.csr -keyout serverdb.key -subj "/CN=localhot"
การสร้างคีย์ส่วนตัว RSA
กำลังเขียนรหัสส่วนตัวใหม่ไปที่ 'serverdb.key'

opensl x509 -req -in serverdb.csr -text -days 3650 -CA rootdb.crt -CAkey rootdb.key -CAcreateserial -out serverdb.crt
ลายเซ็นตกลง
เรื่อง = CN = localhot
รับรหัสส่วนตัวของ CA

opensl สำหรับไคลเอนต์โหนด:

opensl genrsa -des3 -out clientToDB.key 2048
การสร้างคีย์ส่วนตัว RSA โมดูลัสยาว 2048 บิต (2 ไพรม์)
//rem ลบข้อความรหัสผ่าน
opensl rsa - ใน clientToDB.key - ออก clientToDB.key
การเขียนคีย์ RSA

//rem 2.8 สร้างใบรับรอง postgresql.crt
opensl req -new -key clientToDB.key -out clientToDB.csr
...
ชื่อสามัญ (เช่น เซิร์ฟเวอร์ FQDN หรือชื่อของคุณ) []:localhost
โปรดป้อนแอตทริบิวต์ 'พิเศษ' ต่อไปนี้
ที่จะส่งพร้อมกับคำขอใบรับรองของคุณ
รหัสผ่านท้าทาย []:
ชื่อบริษัทที่ไม่บังคับ []:

// rem 2.9 ลงชื่อโดยใช้ใบรับรองหลักที่เชื่อถือได้:
opensl x509 -req -in clientToDB.csr -CA rootdb.crt -CAkey rootdb.key -out clientToDB.crt -CAcreateserial
ลายเซ็นตกลง
รับรหัสส่วนตัวของ CA

postgresql.conf

ssl = เปิด 
ssl_cert_file = 'serverdb.crt'
ssl_key_file = 'เซิร์ฟเวอร์คีย์'
ssl_ciphers = 'สูง:ปานกลาง:+3DES:!aNULL' 
ssl_prefer_server_ciphers = เปิด
ssl_ca_file = 'rootdb.crt' 
ssl_crl_file = ''

การตั้งค่าโหนด ssl:

ssl: 
{
    ปฏิเสธไม่ได้รับอนุญาต: จริง // งานเท็จ
        ca: fs.readFileSync("serverdb.crt").toString(),  
        คีย์: fs.readFileSync("clientToDB.key").toString(), 
        ใบรับรอง: fs.readFileSync("clientToDB.crt").toString() 
}

สิ่งแวดล้อมคือ

Windows 10, pg และ node ทั้ง local, localhost
opensl v1.1.1k
โหนด v14
ไม่มีไฟร์วอลล์ของบริษัท
Steffen Ullrich avatar
se flag
`ca: fs.readFileSync("serverdb.crt").toString(),` - root CA ของไซต์เซิร์ฟเวอร์คือ rootdb.crt ไม่ใช่ serverdb.crt นอกจากนั้น คำสั่งของคุณยังสับสนตั้งแต่คุณสร้าง serverdb.* ในคำสั่งแรก จากนั้นเขียนทับในคำสั่งถัดไป
Jeb50 avatar
cn flag
คำสั่ง @SteffenUllrich อ้างอิงจาก [pg's doc](https://www.postgresql.org/docs/13/ssl-tcp.html#SSL-CERTIFICATE-CREATION) หลังจากแทนที่ `serverdb.crt` ด้วย `rootdb.crt` แล้ว จะได้ `code:'DEPTH_ZERO_SELF_SIGNED_CERT' ข้อความ: 'ใบรับรองที่ลงนามด้วยตนเอง' '
Steffen Ullrich avatar
se flag
*"คำสั่งอ้างอิงจาก pg's doc"* - คุณกำลังผสมคำสั่งจากเอกสารที่ไม่ควรผสมกัน จัดทำเอกสารสองวิธี: ใบรับรองที่ลงนามด้วยตนเองและใบรับรองที่ออกโดย CA และควรใช้แบบเดียวเท่านั้น นอกจากนี้ยังอธิบายว่าควรใช้เมื่อใด โปรดอ่านรายละเอียดเพิ่มเติมในเอกสารประกอบ
Jeb50 avatar
cn flag
@SteffenUllrich ขอบคุณคำแนะนำ

โพสต์คำตอบ

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