2010-01-26 9 views
31

मैंने एसएसएल जावा कनेक्शन का परीक्षण करने के लिए एक स्व-हस्ताक्षरित प्रमाणपत्र स्थापित किया है - हालांकि, यह जावा ट्रस्टस्टोर का पता लगाने से इंकार कर रहा है। मैंने उस फ़ोल्डर के अलावा/जावा/जेआर 6/lib/सुरक्षा में प्रतियों को सहेज लिया है जहां कक्षाओं को संकलित किया गया है (नेटबीन का उपयोग कर रहा हूं) और/java/jre6/bin उपर्युक्त में से कोई भी काम नहीं करता है, क्योंकि जब मैं निम्नलिखित चलाता हूं - ट्रस्टस्टोर = शून्य।जावा - ट्रस्टस्टोर के लिए पथ - सेट संपत्ति काम नहीं करती है?

public class ShowTrustStore { 

    public static void main(String[] args) { 

     System.setProperty("javax.net.ssl.keyStore", "keystore.jks"); 
     System.setProperty("javax.net.ssl.trustStrore", "cacerts.jks"); 
     System.setProperty("javax.net.ssl.keyStorePassword", "changeit"); 



     String trustStore = System.getProperty("javax.net.ssl.trustStore"); 
     if (trustStore == null) { 
      System.out.println("javax.net.ssl.trustStore is not defined"); 
     } else { 
      System.out.println("javax.net.ssl.trustStore = " + trustStore); 
     } 
    } 
} 

पथ को सही तरीके से कैसे सेट करें?

********** अद्यतन ************ getFile() विधि और कुछ और डीबग डेटा का उपयोग करना:

package ssltest; 

public class Main { 

    public static void main(String[] args) { 

//  System.setProperty("javax.net.ssl.keyStore", "/keystore.jks"); 
//  System.setProperty("javax.net.ssl.trustStrore", "/java.home/cacerts.jks"); 
//  System.setProperty("javax.net.ssl.keyStorePassword", "changeit"); 
//  System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 

     try { 
      Main.class.getResource("trustStore.jks").getFile(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     String trustStore = System.getProperty("javax.net.ssl.trustStore"); 

     if (trustStore == null) { 
      String storeLoc; 
      storeLoc = System.getProperty("java.class.path"); 
      System.out.println("classpath: " + storeLoc); 
     } 

     trustStore = System.getProperty("javax.net.ssl.trustStore"); 
     if (trustStore == null) { 
      System.out.println("javax.net.ssl.trustStore is not defined"); 
     } else { 
      System.out.println("javax.net.ssl.trustStore = " + trustStore); 
     } 
    } 
} 

रन: java.lang.NullPointerException क्लासपाथ: सी: \ उपयोगकर्ता \ मुख्य \ दस्तावेज़ \ NetBeansProjects \ sslTest \ build \ classes; सी: \ उपयोगकर्ता \ मुख्य \ दस्तावेज़ \ NetBeansProjects \ sslTest \ src ssltest.Main.main (Main.java) पर : 15) javax.net.ssl.trustStore को परिभाषित नहीं किया गया है निर्मित सफल (कुल समय: 0 सेकंड)

+0

में अपना अद्यतन उत्तर – Bozho

+0

कार्य किया है! बहुत धन्यवाद! – oneAday

+0

यह जानकर अच्छा लगा कि मैं अकेला नहीं हूं जिसने घंटे के लिए एक बग घंटे खोजा है ... थोड़ा टाइपो की वजह से ... ;-) – Steffen

उत्तर

47

आपके पास एक टाइपो है - यह trustStore है।

System.setProperty(..) साथ चर स्थापित करने के अलावा, आप भी उपयोग कर सकते हैं

-Djavax.net.ssl.keyStore=path/to/keystore.jks 
+0

मुझे यकीन नहीं है कि मैं और क्या कोशिश कर सकता हूं - Ive java.home value सी: \ प्रोग्राम फ़ाइलें (x86) \ जावा \ jdk1.6.0_17 \ jre अब भी अगर मैं यहां दो फाइलों को संग्रहीत करता हूं और इसे चलाता हूं: System.setProperty ("javax.net.ssl.keyStore", "/ java .home/keystore.jks "); System.setProperty ("javax.net.ssl.trustStrore", "/java.home/cacerts.jks"); यह अभी भी उन्हें नहीं ढूंढता है ... – oneAday

+0

java.home को पथ के रूप में हल नहीं किया गया है। आप इसे System.getProperty ("java.home") के माध्यम से प्राप्त कर सकते हैं, लेकिन वहां कीस्टोर को रखने की सलाह नहीं दी जाती है। इसके अलावा, मैंने आपको तीन विकल्प दिए हैं - उन्हें आज़माएं। – Bozho

+0

मैंने दोनों का उपयोग करने का प्रयास किया है - पहला काम नहीं करता है और दूसरी विधि एक शून्य सूचक अपवाद फेंकता है - ive ने कोड और डीबग जानकारी ऊपर जोड़ा। ive ने इन दोनों स्थानों पर फ़ाइलों को संग्रहीत किया (जो क्लासपाथ के रूप में दिखाई देते हैं): सी: \ उपयोगकर्ता \ मुख्य \ दस्तावेज़ \ NetBeansProjects \ sslTest \ build \ classes; सी: \ उपयोगकर्ता \ मुख्य \ दस्तावेज़ \ NetBeansProjects \ sslTest \ src कोई विचार क्या गलत हो रहा है? धन्यवाद !! – oneAday

37

ऐसा लगता है कि लिखने में कोई त्रुटि है - "trustStrore" होना चाहिए "trustStore", यानी

System.setProperty("javax.net.ssl.trustStrore", "cacerts.jks"); 

होना चाहिए :

System.setProperty("javax.net.ssl.trustStore", "cacerts.jks"); 
+0

क्या यह काम किया? मुझे आश्चर्य है कि मुझे -Djavax.net.ssl ​​का उपयोग करने की आवश्यकता है .... सामान – simgineer

+3

यह टॉमकैट 8 – Goot

5

दोनों

-Djavax.net.ssl.trustStore=path/to/trustStore.jks 

और

System.setProperty("javax.net.ssl.trustStore", "cacerts.jks"); 

एक ही बात करते हैं और कोई बुद्धिमान काम कर रहा अंतर है। आपके मामले में आपके पास एक टाइपो है। आपने trustStore को javax.net.ssl.trustStore.

+3

के साथ '-Djavax.net.ssl.trustStore =/home/path/to/truststore' का उपयोग करके मेरे लिए काम करता है। सच नहीं, भ्रामक। ट्रस्टस्टोर विश्वसनीय सर्वर की सार्वजनिक कुंजी के लिए क्लाइंटसाइड कंटेनर है, जबकि कीस्टोर आपकी निजी कुंजी का कंटेनर है। – peterh

+1

@peterh सच नहीं है, भ्रामक। भरोसेमंद हस्ताक्षरकर्ताओं के * प्रमाण पत्र * के लिए एक ट्रस्टस्टोर क्लाइंट- * या सर्वर- * साइड कंटेनर है। – EJP

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