2010-01-26 12 views
31

Bir ssl java bağlantısını sınamak için kendinden imzalı bir sertifika ayarlıyorum - ancak, java trustStore'u bulmayı reddediyor./Java/jre6/lib/security içindeki kopyaları, sınıfların derlendiği klasöre (netbeans kullanarak) ve ayrıca/java/jre6/bin 'un yukarıdakilerin hiçbirinin çalışmamasına, çünkü aşağıdakileri çalıştırdığımda - trustStore = null.java - trustStore yolu - set özelliği çalışmıyor?

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); 
     } 
    } 
} 

Yolu nasıl doğru şekilde ayarlayacağınız?

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); 
     } 
    } 
} 

çalışma: getFile() yöntemi ve biraz daha ayıklama verilerini kullanarak

********** GÜNCELLEME ************ java.lang.NullPointerException sınıf yolu: C: \ Kullanıcılar \ Ana \ Belgeler \ NetBeansProjects \ sslTest \ build \ classes; C: \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ src ssltest.Main.main (Main.java : 15) javax.net.ssl.trustStore tanımlı değil BİNA BAŞARI (toplam süre: 0 saniye)

+0

içinde trustStore'u yanlış yazmışsınız, güncellenmiş yanıtıma bakın – Bozho

+0

işler! çok teşekkürler! – oneAday

+0

Ben bir saat için bir hata saat arayarak sadece bir kişi değilim biliyorum ... küçük bir yazım hatası nedeniyle ;-) – Steffen

cevap

47

Yazım hatası var - trustStore. "TrustStrore" "truststore" olmalıdır

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

olmalıdır, yani - Bir yazım hatası var gibi

dışında System.setProperty(..) ile değişkenleri ayarlayarak, ayrıca

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

im başka ne deneyebilirsiniz emin değilim - java.home değeri var İki dosyayı burada saklayıp şunu çalıştırsam bile C: \ Program Files (x86) \ Java \ jdk1.6.0_17 \ jre olarak şu şekilde çalıştırın: System.setProperty ("javax.net.ssl.keyStore", "/ java .home/keystore.jks "); System.setProperty ("javax.net.ssl.trustStrore", "/java.home/cacerts.jks"); hala onları bulamıyor ... – oneAday

+0

java.home yol olarak çözümlenmiyor. System.getProperty ("java.home") aracılığıyla alabilirsiniz, ancak orada keystore koymak için tavsiye edilmez. Ayrıca sana üç seçenek verdim - onları dene. – Bozho

+0

Her ikisini de kullanmayı denedim - ilk çalışma ve ikinci yöntem boş bir işaretçi istisnası atar - yukarıdaki kodu ve hata ayıklama bilgisini ekledi. dosyaları bu konumların her ikisinde de saklar (sınıf yolu olarak görünür): C: \ Kullanıcılar \ Ana \ Belgeler \ NetBeansProjects \ sslTest \ build \ classes; C: \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ src herhangi bir fikir yanlış giden ne? Teşekkürler! – oneAday

37

görünüyor kullanabilirsiniz :

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

Bu iş mi? -Djavax.net.ssl ​​.... stuff – simgineer

+3

kullanmam gerekip gerekmediğini merak ediyorum Tomcat8 – Goot

5

İkisi

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

ve

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

aynı şeyi yapmak ve bilge çalışan belirgin fark yoktur. Senin durumunda sadece bir yazım hatası var.

+3

ile '-Djavax.net.ssl.trustStore =/home/path/to/truststore' kullanarak çalıştı Doğru değil, yanıltıcı. Bir trustStore, güvenilir sunucuların ortak anahtarları için bir istemci konteynır, keyStore ise özel anahtarlarınızın bir konteyneridir. – peterh

+1

@peterh Doğru değil, yanıltıcı. Bir güvenilir mağaza, güvenilir imza sahiplerinin * sertifikaları * için * istemci veya * sunucu tarafıdır. – EJP

İlgili konular