Tremi-M.Smolny (2.5.2006 10:36):
>Znovu jsem vzal certifikát ze serveru a znovuvytvoYil úlo~iat
>certifikáto a zdá se, ~e se pYes danou chybu kom.modul pYenesl. V pátek
>jsem to dlal, tak~e nechápu, ~e to funguje a~ dnes.
>Uvidíme jeat, jak to pojde v praxi u klienta.
Problem moze byt aj v casovej synchronizacii, teda ze novy certifikat mal
zaciatok platnosti az "v buducnosti", teda ze ak bol cerstvo vygenerovany, tak
cas na stroji, kde to bolo spustane mohol byt posunuty a tym padom to povazoval
za neplatny certifikat. Ale to je len jedna z moznosti.
Viem ze to nieje "koser", ale pokial nechces byt zavisly na tom, aby si musel
kazdy importovat certifikaty do ulozista, ak chce pouzit Tvoju aplikaciu, tak
si napis vlastny TrustManager, napr. nieco v tomto style (je to trosku moj
starsi kod, takze sorry za chaos). Dolezite je to, co sa nachadza v if
(isHttps) { ... }
...
...
import java.io.*;
import java.net.*;
import java.util.*;
import javax.net.ssl.*;
...
...
...
boolean isHttps =
urlString.toLowerCase().startsWith("https://");
if (isHttps) {
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public
java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; }
public void
checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
{}
public void
checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
{}
}
};
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new
java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception _sslEx) {
_sslEx.printStackTrace();
}
}
URL urlCon = null;
try {
urlCon = new URL(urlString);
} catch (MalformedURLException _exUrl) {
_exUrl.printStackTrace();
throw(new IOException("Invalid URL: " + urlString));
}
HttpURLConnection con;
if (isHttps) {
con = (HttpsURLConnection) urlCon.openConnection();
} else {
con = (HttpURLConnection) urlCon.openConnection();
}
...
...
...