He avanzado un poco en la materia de los certificados.. Y apuedo confirmar que si se pueden utilizar certificados autofirmados con X09TrustManager, tambien se como cargar el contenido de cacerts y buscar si se encuentra un cierto certificado. La cuestion es que me interesa que si un certificado autofirmado no se encuentra en cacerts que se le pregunte al usuario si desea aceptarlo o no..
Lo he implementado dentro de la interfaz X509TrustManager en el metodo checkServerTrusted(X509Certificate[] chain, String authType).
El metodo quedaria asi:
//try {
System.
out.
println("chain.length="+chain.
length); System.
out.
println("authType:" + authType
);
for (int i = 0; i < chain.length; i++) {
System.
out.
println("Entra en checkServerTrusted" + i
); aux = chain[i];
System.
out.
println("IssuerDN:" + prueba.
getName());
if (certs.contains(chain[i])) {
System.
out.
println("certs.contains(chain[i])"); trusted=true;
return;
}
}
if(!trusted){
int x
= JOptionPane.
showConfirmDialog(null,
"El servidor " + chain
[0].
getIssuerDN() + " no se puede verificar. " + "¿Desde realizar la conexión de todas formas?",
"TITULO",
JOptionPane.
YES_NO_OPTION); //throw new CertificateException("La clave no está en el trustore");
certs.add(aux);
trusted=true;
System.
out.
println("Despues certs.add(chain[0]); "); }
else{
System.
out.
println("No se quiere confiar en el certificado y por lo tanto no se debe proceder con la descarga del fichero");
}
/**System.out.println("El servidor " + chain[0].getIssuerDN() + " no se puede verificar. " + "¿Desde realizar la conexión de todas formas?");
//Scanner s = new Scanner(System.in).useDelimiter("\r\n");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String linea = br.readLine();
System.out.println("Despues Scanner");
//String opcion = s.next();
System.out.println("opcion:" + linea);
if (!linea.equalsIgnoreCase("si")) {
throw new CertificateException("La clave no está en el trustore");
}
* */
/**
} catch (IOException ex) {
Logger.getLogger(SimpleTrustManager1.class.getName()).log(Level.SEVERE, null, ex);
}**/
}
}
}
Mi duda es la siguiente: tengo la clase Https (la del post anterior) en la cual dependiendo de la accion del usuario de aceptar o no el certificado se debe proceder con la descarga...
La verdad que no se como hacer para desde el main saber si el usuario acepta o deniega el certificado. Deberia usar una variable global??
Comentarme cosas please...
Salu2.
alzehimer_cerebral