ฉันกำลังมองหาวิธีรับตำแหน่งcacerts
ของการติดตั้ง java เริ่มต้นเมื่อคุณไม่มีJAVA_HOME
หรือJRE_HOME
กำหนด
ฉันจำเป็นต้องใช้วิธีการแก้ปัญหาที่ทำงานอย่างน้อยสำหรับและOS X
Linux
ใช่. java -v
ถือว่าทำงาน :)
ฉันกำลังมองหาวิธีรับตำแหน่งcacerts
ของการติดตั้ง java เริ่มต้นเมื่อคุณไม่มีJAVA_HOME
หรือJRE_HOME
กำหนด
ฉันจำเป็นต้องใช้วิธีการแก้ปัญหาที่ทำงานอย่างน้อยสำหรับและOS X
Linux
ใช่. java -v
ถือว่าทำงาน :)
คำตอบ:
ภายใต้Linuxเพื่อค้นหาตำแหน่งของ$JAVA_HOME
:
readlink -f /usr/bin/java | sed "s:bin/java::"
cacerts
อยู่ภายใต้การlib/security/cacerts
:
$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
ภายใต้mac OS Xเพื่อค้นหาการ$JAVA_HOME
รัน:
/usr/libexec/java_home
cacerts
อยู่ภายใต้การHome/lib/security/cacerts
:
$(/usr/libexec/java_home)/lib/security/cacerts
อัปเดต (OS X พร้อม JDK)
โค้ดข้างต้นได้รับการทดสอบบนคอมพิวเตอร์โดยไม่ติดตั้ง JDK เมื่อติดตั้ง JDK แล้วตามที่ pR0Ps กล่าวไว้มันอยู่ที่
$(/usr/libexec/java_home)/jre/lib/security/cacerts
/usr/libexec/java_home
ให้คำตอบที่แตกต่างจากreadlink
คำสั่ง -based ด้านบนและดูเหมือนว่าคำสั่งเดิมจะถูกต้องเนื่องจากมีcacerts
ไฟล์อยู่
สำหรับ OS X 10.10.1 (Yosemite) ตำแหน่งของcacerts
ไฟล์ถูกเปลี่ยนเป็น
$(/usr/libexec/java_home)/jre/lib/security/cacerts
หากคุณต้องการเข้าถึงใบรับรองเหล่านั้นโดยใช้โปรแกรมจะเป็นการดีที่สุดที่จะไม่ใช้ไฟล์เลย แต่ให้เข้าถึงผ่านทางผู้จัดการความน่าเชื่อถือ รหัสต่อไปนี้มาจากกรณีทดสอบ OpenJDK (ซึ่งทำให้แน่ใจว่าคอลเลกชัน cacerts ที่สร้างขึ้นไม่ว่างเปล่า):
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
(X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
trustManager.getAcceptedIssuers();
คุณจึงไม่ต้องจัดการกับตำแหน่งไฟล์หรือรหัสผ่านที่เก็บคีย์
ใน MacOS Mojave ตำแหน่งคือ:
/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts
หากใช้ sdkman เพื่อจัดการเวอร์ชัน java cacerts จะอยู่ใน
~/.sdkman/candidates/java/current/jre/lib/security
~/.sdkman/candidates/java/current/lib/security
ใน High Sierra cacertsตั้งอยู่ที่:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts
คุณสามารถปรึกษา readlink -f " which java
" อย่างไรก็ตามมันอาจใช้ไม่ได้กับเครื่องห่อไบนารีทั้งหมด เป็นไปได้ดีกว่าที่จะเริ่มคลาส Java จริงๆ
/usr/libexec/java_home