2012-05-17 1 views
2

내 웹 사이트 (다른 ​​웹 사이트 없음)에서 인증서를 가져올 수 없습니다. 내가 HttpsURLConnection 및 방법 getServerCertificates와 함께 몇 가지 솔루션을 시도했지만 아무것도 문제를 해결합니다.사이트에서 서버 인증서를 가져올 수 없습니다.

URL httpsURL = new URL("https://www.google.com.br/"); 
HttpsURLConnection connection = (HttpsURLConnection)httpsURL.openConnection(); 
Certificate[] certs = connection.getServerCertificates(); 

"getServerCertificates를 (를) 확인할 수 없음"이라는 예외가 있습니다.

저는 키 스토어를 사용하는 것이 필요하다고 생각하지 않습니다.

+1

항상 당신이 사용하는 언어 질문에서 분명히 확인하는 것이 좋습니다. 숙련 된 Java 프로그래머가 이것을 Java 코드로 즉시 인식 할 수도 있지만, 다른 사람들 (나 같은)은 여러분이 사용하는 언어를 아는 데 어려움을 겪습니다. – rlandster

+0

오, 죄송합니다. 나는 다음 질문에서 그 사실을 기억할 것입니다. 감사합니다 –

답변

1

나는 getServerCertificates가 해결 될 수 없다는 예외 .. 이상하다

를 얻을. 적절한 수업을 사용하고 있습니까? 나는이 코드를 실행하면 :

import java.io.IOException; 
import java.net.URL; 
import java.security.cert.Certificate; 

import javax.net.ssl.HttpsURLConnection; 

public class Test { 
    public static void main(String[] args) throws IOException { 
     URL httpsURL = new URL("https://www.google.com.br/"); 
     HttpsURLConnection connection = (HttpsURLConnection) httpsURL.openConnection(); 
     connection.connect(); 
     Certificate[] certs = connection.getServerCertificates(); 
     for (Certificate cer : certs) { 
      System.out.println(cer.getPublicKey()); 
     } 
    } 
} 

을 나는 같은 결과를 얻을 :

Sun RSA public key, 1024 bits 
    modulus: 13069990984429476578... 
    public exponent: 65537 
Sun RSA public key, 1024 bits 
    modulus: 14179907349200548596... 
    public exponent: 65537 

무엇 SSL 소켓을 사용하는 공장, 어쩌면 뭔가 문제가 확인합니다. 당신의 코드에 이것을 추가하고 (나 com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl 때문이다, 예를 들어) 그것에서 어떤 결과를 참조하십시오

System.out.println(connection.getSSLSocketFactory().getClass()); 
System.out.println(connection.getDefaultSSLSocketFactory().getClass()); 
+0

이제 제대로 작동합니다! 감사합니다. –