[Java lista] HTTPS

Maglódszki Viktor bocios at citromail.hu
2007. Feb. 6., K, 09:38:23 CET


Sziasztok !

Előre is bocsi a hosszú levélért!

Pár napja emlitettem egy problémát HTTPS -el kapcsolatban.

Van 1 cert fájlom a szerverről, amire kapcsolódni szeretnék, ezt a rendszergazda adta.
Be is tudom importálni.

keytool -import -alias ize -file ezaz.cert -keystore a

itt kéri a jelszót megadom: 123456

ki is teszi az "a" nevű fájlba

keytool -list
látja is ezt a key-t!
 
le is szeretném ezt kérni kódból

String alias = "ize";
String passwd = "123456";
try {
  KeyStore keyStore = KeyStore.getInstance("jks");
  File path = new File("c:\\a\\a");
  keyStore.load(new FileInputStream(path),"123456".toCharArray());
  char[] pass = passwd.toCharArray();
  Key key = keyStore.getKey(alias,pass);
  if (key instanceof PrivateKey) {
       Certificate cert = keyStore.getCertificate(alias);
       PublicKey publicKey = cert.getPublicKey();
       KeyPair pair = new KeyPair(publicKey,(PrivateKey)key);
  }
}
catch (Exception e) {
  e.printStackTrace();
}

megpróbáltam, hogy itt:File path = new File("c:\\a\\a"); mindjárt a .cert fájlt adom meg, de ekkor "Invalid type"-ot kapok.

ez a key:
Key key = keyStore.getKey(alias,pass);
null lesz sajnos
tehát nem találja meg

de miért ?


a célom: csatlakozni egy szerverhez HTTPS-en keresztül
a csatlakozás létrejön egyszer erről már irtam de itt a kód:


public HttpsURLConnection try_connect(URL url){
         HttpsURLConnection m_oHttpURLConnection;
     try {
          System.setProperty( "java.protocol.handler.pkgs" , "javax.net.ssl" );

          java.security.Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider() );
          TrustManager[] trustAllCerts = new TrustManager[] {
                    new X509TrustManager(){
                         public java.security.cert.X509Certificate[] getAcceptedIssuers(){
                              return null;
                         }
                    public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType ) { return; }
                    public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType ) { return; }
                    }
               };

          SSLContext sc = SSLContext.getInstance( "SSL" );
          sc.init( null, trustAllCerts, new java.security.SecureRandom() );
          HttpsURLConnection.setDefaultSSLSocketFactory( sc.getSocketFactory() );
          m_oHttpURLConnection =  (HttpsURLConnection) url.openConnection();
          m_oHttpURLConnection.setUseCaches( false );
          
          m_oHttpURLConnection.setDoInput( true );
          m_oHttpURLConnection.setDoOutput( true );
          m_oHttpURLConnection.setRequestProperty( "Content-Type", "text/xml" );
          m_oHttpURLConnection.setAllowUserInteraction( true );
          m_oHttpURLConnection.setRequestMethod("POST");          
          m_oHttpURLConnection.setInstanceFollowRedirects( true );
          System.out.println("URL " +  m_oHttpURLConnection.getURL());
          ( ( HttpsURLConnection )( m_oHttpURLConnection ) ).setHostnameVerifier( this );   
          
          
          } catch (Exception e){
                e.printStrackTrace();
               return null;
          }
     
          return m_oHttpURLConnection;


 public boolean verify(String hostname, SSLSession session) {
          return true;
     }


ez a csatlakozás létrejön
a gond akkor kezdődik, ha Call objektummal belehivok a WSDL fájlomba (ami https nélkül sikeresen lezajlik)
ekkor kapom a következő exception-t:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Előre is köszi a segitséget.
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20070206/f75ba768/attachment.html 


További információk a(z) Javalist levelezőlistáról