2012-08-13 12 views
52

मैं देख रहा हूं कि डिफ़ॉल्ट जावा स्थापना के cacerts के स्थान को कैसे प्राप्त करें, जब आपके पास JAVA_HOME या JRE_HOME परिभाषित नहीं है।डिफ़ॉल्ट जावा स्थापना के कैकर्ट का स्थान कैसे प्राप्त करें?

मुझे ऐसे समाधान की आवश्यकता है जो कम से कम OS X और Linux के लिए काम करे।

हां। एक्स तहत मैक ओएस

$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts 

:

readlink -f /usr/bin/java | sed "s:bin/java::" 

cacertslib/security/cacerts तहत कर रहे हैं: java -v :)

उत्तर

86

काम करने के लिए तहत लिनक्स, $JAVA_HOME के स्थान खोजने के लिए माना जाता है , $JAVA_HOME चलाने के लिए:

/usr/libexec/java_home 

cacertsHome/lib/security/cacerts तहत कर रहे हैं:

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

अद्यतन (JDK के साथ ओएस एक्स)

कोड ऊपर JDK स्थापित बिना कंप्यूटर पर परीक्षण किया गया था। JDK के साथ स्थापित है, as pR0Ps said, यह

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

ओएस एक्स में, JAVA_HOME को खोजने का "आधिकारिक" तरीका '/ usr/libexec/java_home' –

+2

@DanielSerodio पर चल रहा है, सहमत है। '/ usr/libexec/java_home' मुझे उपरोक्त 'readlink'-based कमांड से एक अलग उत्तर देता है, और पूर्व सही लगता है, जिसमें इसमें' cacerts' फ़ाइल है। –

+1

@DanielSerodio और AndrewFerrier धन्यवाद दोस्तों, उत्तर अपडेट किया गया। – Kuf

33

पर है ओएस एक्स 10.10.1 (Yosemite) के रूप में, cacerts फ़ाइल का स्थान

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

को बदल दिया गया है तुम भी readlink से परामर्श कर सकते हैं - एफ "which java"। हालांकि यह सभी बाइनरी रैपरों के लिए काम नहीं कर सकता है। वास्तव में जावा क्लास शुरू करना बेहतर होता है।

0

यदि आपको प्रोग्रामिंग के उन प्रोग्रामों तक पहुंचने की आवश्यकता है तो फ़ाइल का उपयोग न करना सबसे अच्छा है, लेकिन ट्रस्ट मैनेजर के माध्यम से इसका उपयोग करना सबसे अच्छा है। निम्नलिखित कोड एक OpenJDK Test मामले से है (जो यह सुनिश्चित करता है बनाया cacerts संग्रह खाली नहीं है):

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

तो तुम फ़ाइल स्थान या कुंजीसंग्रह पासवर्ड से निपटने के लिए नहीं है।

संबंधित मुद्दे