Utilidades para leer certificados de Internet Explorer, eDNI, firmar y verificar firma de forma sencilla.
1. Acceso HTTPS con eDNI
2. Firma digital y verificación
3. Seleccionar un certificado de forma visual
1. Acceso HTTPS con eDNI
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.security.KeyStore;
import java.security.Provider;
import java.security.Security;
import java.util.Enumeration;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import utilesGUIxSeguridad.JCertificadosSUN;
import utilesGUIxSeguridad.JFrameSeleccionarCertificado;
/**
*
* @author eduardo
*/
public class JTest5 {
public static void main(String[] args) throws Exception {
//conectamos con url
HttpsURLConnection connection = null;
URL url = null;
//config. para leer la dll PKCS11 directamente (en este caso la de la Universidad de Murcia)
String ls =
"name = DNIe" + "\n"
+ "slot = 1" + "\n"
+ "library = c:/WINDOWS/system32/UMU_PKCS11_v1_02.dll" + "\n"
+ "showInfo=true" + "\n";
InputStream loConf = new ByteArrayInputStream(ls.getBytes());
//Creamos el Provider con la clase SunPKCS11
Provider nss = new sun.security.pkcs11.SunPKCS11(loConf);
Security.addProvider(nss);
//creamos el keystore
KeyStore ks = KeyStore.getInstance("PKCS11", nss);
ks.load(null, "1111".toCharArray());
//recorremos todos los certificados e imprimimos el titulo
Enumeration aliases = ks.aliases();
String alias = null;
while (aliases.hasMoreElements()) {
alias = (String) aliases.nextElement();
System.out.println(alias);
}
//creamos el controlador de seguridad
JCertificadosSUN loCert = new JCertificadosSUN();
//establecemos el keystore
loCert.setKeyStore(ks);
//seleccionamos un certificado
new JFrameSeleccionarCertificado(null, loCert).setVisible(true);
SSLContext sc = SSLContext.getInstance("SSLv3");
url = new URL("https://172.16.0.4:8443/");
connection = (HttpsURLConnection) url.openConnection();
//establecemos el verificador de nombres, la funcion de esta clase es comprobar que el certificado del servidor
//contiene la direccion del servidor, si se construye con true ignora esta comprobacion, util para pruebas
connection.setHostnameVerifier(new JTramitacionOnLineHostNameVerifier(true));
//establecemos el conexto ssl, con nuestro controlador de certificados que ya tiene el certificado a usar
sc.init(
//controlador de certificados que ya tiene el certificado a usar
new KeyManager[]{
new JTramitacionOnLineKeyManager(loCert)
},
//TrustManager:comprueba la cadena de confianza del certificado del servidor
//cuando se crea a true no comprueba la cadena de confianza del certificado del servidor, es util cuando somos nosotros los q creamos los certificados
new TrustManager[]{new JTramitacionOnLineTrustManager(true)},
null);
connection.setSSLSocketFactory(sc.getSocketFactory());
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("User-Agent", "Mozilla/4.05 [en] (WinNT; I)");
connection.setFollowRedirects(true);
connection.setInstanceFollowRedirects(true);
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write("");
out.close();
System.err.println(connection.getResponseCode());
InputStream in = connection.getInputStream();
int l;
while ((l = in.read()) >= 0) {
System.out.print((char) l);
}
}
}
2. Firma digital y verificación
ICertificados loAux = new JCertificadosSUN();
Vector loVector = loAux.getListaCertificados();
loAux.mostrarInformacionCertificados(loVector);
loAux.setX509Certificate((X509Certificate) loVector.get(0));
byte[] lab = loAux.sign("pepe".getBytes());
System.out.println(loAux.getTransFormarABASE64(lab));
System.out.println(" La verificación resultó: " + loAux.verificar("pepe".getBytes(), lab) + "!!!\n");
3. Seleccionar un certificado de forma visual
try {
ICertificados loCert = new JCertificadosSUN();
//mostramos el formulario para seleccionar un certificado digital
new JFrameSeleccionarCertificado(null, loCert).setVisible(true);
byte[] lab = loCert.sign("pepe".getBytes());
System.out.println(loCert.getTransFormarABASE64(lab));
System.out.println(" La verificación resultó: " + loCert.verificar("pepe".getBytes(), lab) + "!!!\n");
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(new JLabel(), ex);
}
Página principal: http://www.creativa3d.com/modeloDatos.html
No hay comentarios:
Publicar un comentario