[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