วิธีการรับตำแหน่งของ cacerts ของการติดตั้ง java เริ่มต้น?


92

ฉันกำลังมองหาวิธีรับตำแหน่งcacertsของการติดตั้ง java เริ่มต้นเมื่อคุณไม่มีJAVA_HOMEหรือJRE_HOMEกำหนด

ฉันจำเป็นต้องใช้วิธีการแก้ปัญหาที่ทำงานอย่างน้อยสำหรับและOS XLinux

ใช่. java -vถือว่าทำงาน :)

คำตอบ:


161

ภายใต้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

6
ใน OS X วิธีค้นหา JAVA_HOME "อย่างเป็นทางการ" กำลังทำงานอยู่/usr/libexec/java_home
Daniel Serodio

2
@DanielSerodio เห็นด้วย /usr/libexec/java_homeให้คำตอบที่แตกต่างจากreadlinkคำสั่ง -based ด้านบนและดูเหมือนว่าคำสั่งเดิมจะถูกต้องเนื่องจากมีcacertsไฟล์อยู่
Andrew Ferrier

1
@DanielSerodio และ AndrewFerrier ขอบคุณพวกอัพเดตคำตอบ
Kuf

@Kuf JDK ของฉันไม่มีโฟลเดอร์ lib / security บน Mac Yosemite ฉันมั่นใจว่าฉันอยู่ในสิทธิ $ JAVA_HOME
Brian

1
บน OSX 10.10.5 โฟลเดอร์ความปลอดภัยจะอยู่ภายใต้: Home / jre / lib / security
Sid Sarasvati

48

สำหรับ OS X 10.10.1 (Yosemite) ตำแหน่งของcacertsไฟล์ถูกเปลี่ยนเป็น

$(/usr/libexec/java_home)/jre/lib/security/cacerts

10

หากคุณต้องการเข้าถึงใบรับรองเหล่านั้นโดยใช้โปรแกรมจะเป็นการดีที่สุดที่จะไม่ใช้ไฟล์เลย แต่ให้เข้าถึงผ่านทางผู้จัดการความน่าเชื่อถือ รหัสต่อไปนี้มาจากกรณีทดสอบ OpenJDK (ซึ่งทำให้แน่ใจว่าคอลเลกชัน cacerts ที่สร้างขึ้นไม่ว่างเปล่า):

TrustManagerFactory trustManagerFactory =
    TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
    trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
    (X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
    trustManager.getAcceptedIssuers();

คุณจึงไม่ต้องจัดการกับตำแหน่งไฟล์หรือรหัสผ่านที่เก็บคีย์


นี่ไม่ได้อ่านใบรับรองที่ติดตั้งใน cacerts ฉันสามารถทำได้ถ้าใช้เส้นทางไฟล์และรหัสผ่าน
สมนาถสิงห์

8

ใน 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

1
หมายเหตุ: สำหรับ sdkman เวอร์ชันปัจจุบันที่มี JDK 11 ตำแหน่งคือ~/.sdkman/candidates/java/current/lib/security
Snekse


1

คุณสามารถปรึกษา readlink -f " which java" อย่างไรก็ตามมันอาจใช้ไม่ได้กับเครื่องห่อไบนารีทั้งหมด เป็นไปได้ดีกว่าที่จะเริ่มคลาส Java จริงๆ

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