วิธีสร้างที่เก็บคีย์และ truststore โดยใช้ใบรับรองที่ลงนามเอง?


17

เรามีเซิร์ฟเวอร์ JAVA และไคลเอ็นต์สื่อสารผ่านเครือข่ายโดยใช้ SSL เซิร์ฟเวอร์และไคลเอนต์รับรองความถูกต้องซึ่งกันและกันโดยใช้ใบรับรอง ชนิดที่เก็บคีย์ที่ใช้โดยเซิร์ฟเวอร์และไคลเอ็นต์คือ JKS เซิร์ฟเวอร์และไคลเอ็นต์โหลดไฟล์ที่เก็บคีย์และ truststore ของพวกเขา ชื่อไฟล์ keystore และ truststore คือ: server.keystore, server.truststore, client.keystore และ client.truststore ฉันใช้ใบรับรองแบบลงนามด้วยตนเองเพื่อการทดสอบเท่านั้น

คำถาม:

ไตรมาสที่ 1 ฉันต้องการทราบว่าทำไมฉันต้องเพิ่มใบรับรองของเซิร์ฟเวอร์และลูกค้าของตัวเองลงในร้านค้าที่เชื่อถือได้ในขั้นตอนที่ 6

ไตรมาสที่ 2 ฉันสามารถลดจำนวนขั้นตอนเพื่อให้ได้สิ่งเดียวกันได้หรือไม่? ถ้าใช่แล้วได้อย่างไร

ขั้นตอนในการสร้างคีย์ RSA ใบรับรองที่ลงนามเองที่เก็บคีย์และ truststore สำหรับเซิร์ฟเวอร์

  1. สร้างคีย์ RSA ส่วนตัว

    openssl genrsa -out diagserverCA.key 2048
    
  2. สร้างใบรับรอง x509

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. สร้างที่เก็บคีย์ PKCS12 จากไพรเวตคีย์และพับลิกใบรับรอง

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. แปลงที่เก็บคีย์ PKCS12 เป็นที่เก็บคีย์ JKS

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. นำเข้าใบรับรองของลูกค้าไปยังที่เก็บที่เชื่อถือได้ของเซิร์ฟเวอร์

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. นำเข้าใบรับรองของเซิร์ฟเวอร์ไปยังที่เก็บที่เชื่อถือได้ของเซิร์ฟเวอร์

    keytool -import -alias server-cert \
            -file diagserverCA.pem -keystore server.truststore
    

ขั้นตอนในการสร้างคีย์ส่วนตัว RSA ใบรับรองที่ลงนามเองที่เก็บคีย์และ truststore สำหรับไคลเอ็นต์

  1. สร้างรหัสส่วนตัว

    openssl genrsa -out diagclientCA.key 2048
    
  2. สร้างใบรับรอง x509

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. สร้างที่เก็บคีย์ PKCS12 จากไพรเวตคีย์และพับลิกใบรับรอง

    openssl pkcs12 -export -name client-cert \
                   -in diagclientCA.pem -inkey diagclientCA.key \
                   -out clientkeystore.p12
    
  4. แปลงที่เก็บคีย์ PKCS12 เป็นที่เก็บคีย์ JKS

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. นำเข้าใบรับรองของเซิร์ฟเวอร์ไปยังที่เก็บที่เชื่อถือได้ของลูกค้า

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. นำเข้าใบรับรองของลูกค้าไปยังที่เก็บความเชื่อถือของลูกค้า

    keytool -import -alias client-cert -file diagclientCA.pem \
            -keystore client.truststore
    

คำตอบ:


3

https ปกติต้องใช้ 1 คำสั่งเท่านั้น

keytool -genkeypair

หากลูกค้าไม่เชื่อถือใบรับรองใด ๆ โดยไม่ได้ตั้งใจคุณต้องคัดลอกใบรับรองสาธารณะของเซิร์ฟเวอร์ไปยังลูกค้า

ทำไมคุณถึงใช้ openssl เลย?

https://docs.oracle.com/javase/10/tools/keytool.htm


จนกว่าการแก้ไขของฉันจะได้รับการตรวจสอบโดยผู้ใช้: ธงคือ -genkeypair และคุณสามารถเพิ่มธงจำนวนมากเพื่อกำหนดใบรับรองเอง (เช่น -validity 365 หรือ -dname "cn = Mark Jones, = JavaSoft, o = Sun, c = US ") ดูลิงค์ที่ดีที่สุดในคำตอบสำหรับรายละเอียดเพิ่มเติม
โยฮันเนส Stadler

1
@JohannesStadler ขอบคุณฉันอนุมัติการแก้ไขของคุณและปรับปรุงการเชื่อมโยงไปยังจาวารุ่นล่าสุดโปรดทราบว่า "คำสั่งนี้มีชื่อว่า -genkey ในรุ่นก่อนหน้า"
user1133275
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.