miércoles, 1 de diciembre de 2010

paquetesGUIxSeguridad

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