โปรแกรม java ของฉันรู้ได้อย่างไรว่าที่เก็บคีย์ของฉันมีใบรับรองอยู่ที่ไหน หรือฉันจะบอกโปรแกรม Java ของฉันว่าจะหาที่เก็บคีย์ได้อย่างไร
หลังจากระบุที่เก็บคีย์ในบางวิธีแล้วจะระบุใบรับรองเพื่อใช้สำหรับการพิสูจน์ตัวตนเซิร์ฟเวอร์กับไคลเอ็นต์ได้อย่างไร?
โปรแกรม java ของฉันรู้ได้อย่างไรว่าที่เก็บคีย์ของฉันมีใบรับรองอยู่ที่ไหน หรือฉันจะบอกโปรแกรม Java ของฉันว่าจะหาที่เก็บคีย์ได้อย่างไร
หลังจากระบุที่เก็บคีย์ในบางวิธีแล้วจะระบุใบรับรองเพื่อใช้สำหรับการพิสูจน์ตัวตนเซิร์ฟเวอร์กับไคลเอ็นต์ได้อย่างไร?
คำตอบ:
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
ตั้งค่าคุณสมบัติ SSL ที่ระดับ JVM ผ่านคุณสมบัติระบบ หมายความว่าคุณสามารถตั้งค่าพวกเขาเมื่อคุณเรียกใช้โปรแกรม (java -D .... ) หรือคุณสามารถตั้งค่าพวกเขาในรหัสโดยทำ System.setProperty
คีย์เฉพาะที่คุณต้องตั้งค่าอยู่ด้านล่าง:
javax.net.ssl.keyStore - ตำแหน่งของไฟล์ Javaที่มีใบรับรองของตัวเองและไพรเวตคีย์ บน Windows ชื่อพา ธ ที่ระบุต้องใช้เครื่องหมายทับซ้าย / ในตำแหน่งแบ็กสแลช
javax.net.ssl.keyStorePassword - รหัสผ่านเพื่อเข้าถึงไพรเวตคีย์จากไฟล์ keystore ที่ระบุโดย javax.net.ssl.keyStore รหัสผ่านนี้ใช้สองครั้ง: เพื่อปลดล็อกไฟล์ keystore (รหัสผ่านร้านค้า) และเพื่อถอดรหัสคีย์ส่วนตัวที่เก็บไว้ใน keystore (รหัสผ่านคีย์)
javax.net.ssl.trustStore - ตำแหน่งของไฟล์ Java keoreoreที่มีการรวบรวมใบรับรอง CA ที่ไว้วางใจได้โดยกระบวนการแอ็พพลิเคชันนี้ (trust store) บน Windows ชื่อพา ธ ที่ระบุต้องใช้ฟอร์เวิร์ดสแลช
/
แทนแบ็กสแลช\
ในสถานที่ของเครื่องหมาย,หากไม่ได้ระบุตำแหน่ง trust store โดยใช้คุณสมบัตินี้การประยุกต์ใช้ SunJSSE จะค้นหาและใช้ไฟล์ keystore ในตำแหน่งต่อไปนี้ (ตามลำดับ):
$JAVA_HOME/lib/security/jssecacerts
$JAVA_HOME/lib/security/cacerts
javax.net.ssl.trustStorePassword - รหัสผ่านเพื่อปลดล็อกไฟล์ที่เก็บคีย์ (รหัสผ่านร้านค้า) ที่ระบุโดย
javax.net.ssl.trustStore
ตามที่ระบุไว้javax.net.ssl.trustStoreType - (ทางเลือก) สำหรับรูปแบบไฟล์ที่เก็บคีย์ Java คุณสมบัตินี้มีค่า jks (หรือ JKS) โดยปกติคุณไม่ได้ระบุคุณสมบัตินี้เนื่องจากค่าเริ่มต้นของมันคือ jks อยู่แล้ว
javax.net.debug - หากต้องการเปิดการบันทึกสำหรับเลเยอร์ SSL / TLS ให้ตั้งค่าคุณสมบัตินี้เป็น ssl
เพียงแค่คำเตือน หากคุณพยายามเปิดที่เก็บคีย์ JKS ที่มีอยู่ใน Java 9 เป็นต้นไปคุณต้องตรวจสอบให้แน่ใจว่าคุณพูดถึงคุณสมบัติต่อไปนี้พร้อมด้วยค่าเป็น "JKS":
javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType
สาเหตุที่ชนิด keystore ดีฟอลต์ตามที่กำหนดไว้ในไฟล์ java.security ถูกเปลี่ยนเป็น pkcs12 จาก jks จาก Java 9 เป็นต้นไป
ก่อนอื่นมีที่เก็บคีย์สองแบบ
รายบุคคลและทั่วไป
แอปพลิเคชันจะใช้อันที่ระบุในการเริ่มต้นหรือเริ่มต้นของระบบ
มันจะเป็นโฟลเดอร์อื่นถ้า JRE หรือ JDK กำลังทำงานอยู่หรือถ้าคุณตรวจสอบส่วนบุคคลหรือโฟลเดอร์ "global"
พวกเขาถูกเข้ารหัสด้วย
ในระยะสั้นเส้นทางจะเป็นดังนี้:
$JAVA_HOME/lib/security/cacerts
สำหรับ "นายพลคนหนึ่ง" ที่มี CA ทั้งหมดสำหรับเจ้าหน้าที่และมีความสำคัญมาก
คุณยังสามารถพูดถึงเส้นทางที่รันไทม์โดยใช้-D
คุณสมบัติดังต่อไปนี้
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks
ในแอปพลิเคชันประกาย apache ของฉันฉันใช้เพื่อให้เส้นทางของ certs และ keystore โดยใช้--conf
ตัวเลือกและextraJavaoptions
ในการส่งประกายดังต่อไปนี้
--conf 'spark.driver.extraJavaOptions=
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks'