2010-01-26 3 views
31

ssl java 연결을 테스트하기 위해 자체 서명 된 인증서를 설정했지만 Java trustStore를 찾지 못합니다. 나는/java/jre6/lib/security에 클래스를 컴파일 할 폴더 (netbeans를 사용하여)와/java/jre6/bin에 사본을 저장했다. 위의 것들 중 아무 것도 동작하지 않는 것으로 보인다. 왜냐하면 내가 다음을 실행할 때 - trustStore = null이기 때문이다.java - truststore - set 속성에 대한 경로가 작동하지 않습니다?

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

경로를 올바르게 설정하는 방법은 무엇입니까?

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

실행 : 대해서 getFile() 메소드를 좀 더 디버그 데이터를 사용하여

********** UPDATE ************ C : \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ src 클래스 경로 : C : \ Users \ Main \ Documents \ : 15) javax.net.ssl.trustStore가 정의되지 않았습니다. 성공 (총 시간 : 0 초)

+0

업데이트 된 답변보기 – Bozho

+0

작품보기! 많은 감사합니다! – oneAday

+0

시간 만 버그 시간을 검색하는 유일한 사람이 아니라는 것을 알고 있기를 바랍니다 ... 약간의 오타로 인해 ...--) – Steffen

답변

47

오타가 있습니다 - trustStore입니다. "trustStrore" "신뢰"이어야합니다

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

것은해야 즉, - 당신이 오타를 가지고있는 것처럼

외에도 System.setProperty(..)으로 변수를 설정에서, 당신은 또한

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

다른 시도를 할 수 있는지 확실하지 않습니다. ive에서 java.home 값을 얻었습니다. 여기에 두 개의 파일을 저장하고 실행하더라도 C : \ Program Files (x86) \ Java \ 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

나는 둘 다 사용하려고 시도했다 - 첫 번째 나던 작업과 두 번째 방법은 널 포인터 예외를 throw한다. 위의 코드와 디버그 정보를 추가했다. iive는 두 위치 (클래스 경로로 표시됨)에 파일을 저장합니다. C : \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ build \ classes, C : \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ src 어떤 아이디어가 잘못 되었나요?감사합니다. !! – oneAday

37

이 보이는 사용할 수 있습니다 :

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

이 작품을 사용 했습니까? -Djavax.net.ssl ​​.... stuff를 사용해야하는지 궁금합니다. – simgineer

+3

Tomcat8을 사용하여'-Djavax.net.ssl.trustStore =/home/path/to/truststore'를 사용하여 저를 위해 일했습니다 – Goot

5

모두

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

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

같은 일을하고 현명한 작업 차이가 없습니다. 귀하의 경우에는 오타가 있습니다. trustStore의 철자가 잘못되었습니다. javax.net.ssl.trustStore.

+3

사실이 아니며 오해의 소지가 있습니다. trustStore는 신뢰할 수있는 서버의 공개 키를위한 클라이언트 측 컨테이너이며 keyStore는 개인 키의 컨테이너입니다. – peterh

+1

@peterh 사실이 아니며 오해의 소지가 있습니다. 트러스트 스토어는 트러스트 된 서명자의 * 인증서 *에 대한 클라이언트 * 또는 서버 * 컨테이너입니다. – EJP

관련 문제