Joven hacker sonriendo

Importar Certificado Digital

Necesidad

Importar un certificado digital o confiar en uno autofirmado en Java.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se desarrolla una aplicación en el lenguaje Java

  2. Se posee acceso al keystore de la máquina virtual de Java.

Solución

Un certificado digital o certificado electrónico es un fichero informático con una estructura de datos que contiene información sobre una entidad. Este certificado es firmado por otra entidad, considerada por una colección de otras entidades como una autoridad para este tipo de contenido. La firma de la estructura de datos agrupa la información que contiene de forma que no puede ser modificada sin que esta modificación sea detectada.

Los certificados digitales se clasifican en dos tipos: certificados de atributos y certificados de clave pública. Los primeros, normalmente no contienen claves públicas, sino que asocian otro tipo de información a alguna representación de la identidad de una entidad.

Por su parte, los certificados de clave pública asocian, valga la redundancia, una clave pública a alguna representación de la identidad de una entidad. La clave privada asociada a dicha clave pública está en posesión de dicha entidad. Además, se puede incluir otra información relevante como el periodo de valides, identificación de los algoritmos para los cuales se puede usar la clave pública o políticas y/o restricciones de uso de dicho certificado.[1]

A continuación, se describe el procedimiento para importar un certificado digital en el keystore de la máquina virtual de JAVA con el objetivo que se pueda realizar una conexión SSL/TLS desde una aplicación que corre bajo esta.

  1. Para realizar el procedimiento se utiliza la herramienta keytool que se incluye dentro del JDK de JAVA.

  2. El Keystore de JAVA se encuentra ubicado en $JAVA_HOME/jre/lib/security/cacerts. La contraseña predeterminada es changeit.

  3. Después, se deben verificar los certificados instalados que se encuentran instalados en el keystore de la máquina virtual. Para esto se utiliza el comando keytool -list -keystore <keystorefile>, éste solicitará el password del keystore para poder accederlo.

    certificado.bash
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    keytool -list -keystore cacerts
    
    Enter keystore password:
    
    Keystore type: JKS
    Keystore provider: SUN
    
    Your keystore contains 5 entries
    
    aolrootca2, Mar 26, 2008, trustedCertEntry,
    Certificate fingerprint (MD5): D6:ED:3C:CA:E2:66:0F:AF:10:43:0D:77:9B:04:09:BF
    deutschetelekomrootca2, Nov 6, 2008, trustedCertEntry,
    Certificate fingerprint (MD5): 74:01:4A:91:B1:08:C4:58:CE:47:CD:F0:DD:11:53:08
    aolrootca1, Jan 17, 2008, trustedCertEntry,
    Certificate fingerprint (MD5): 14:F1:08:AD:9D:FA:64:E2:89:E7:1C:CF:A8:AD:7D:5E
    secomscrootca1, May 1, 2008, trustedCertEntry,
    Certificate fingerprint (MD5): F1:BC:63:6A:54:E0:B5:27:F5:CD:E7:1A:E3:4D:6E:4A
    verisignclass3g2ca, Mar 25, 2004, trustedCertEntry,
    Certificate fingerprint (MD5): A2:33:9B:4C:74:78:73:D4:6C:E7:C1:F3:8D:CB:5C:E9
    
  4. Para importar un certificado al keystore se utiliza el comando keytool -import -alias <nombre alias del certificado> -keystore <keystorefile> -file <certfile>. éste pedirá el password del keystore para poder acceder a este.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    keytool -import -alias cabco -keystore cacerts -file /tmp/ca.cer
    
    Enter keystore password:
    
    Owner: CN=VERISIGN, OU=Engineering Team,
    O=FLUID S.A., L=MEDELLIN, ST=ANTIOQUIA, C=CO
    Issuer: CN=VERISIGN, OU=Engineering Team,
    O=FLUID S.A., L=MEDELLIN, ST=ANTIOQUIA, C=CO
    Serial number: 3f817305
    Valid from: Sun Oct 05 08:49:57 COT 2003 until: Wed Jun 14 08:49:57 COT 2017
    Certificate fingerprints:
     MD5: 3D:C3:23:80:20:79:72:58:F9:4B:C7:B5:5D:A9:86:FE
     SHA1: BF:5D:E4:5C:F5:37:BD:22:35:65:48:EA:64:AD:08:BB:15:A9:1E:AC
     Signature algorithm name: MD5withRSA
     Version: 3
    Trust this certificate? [no]: yes
    Certificate was added to keystore
    

Referencias

  1. Certificado digital

  2. Adding a Certificate to the Java CA

  3. Key and Certificate Management Tool

  4. REQ.0142: Las funciones de criptografía del sistema deben ser implementadas con mecanismos criptográficos pre-existentes.




Haz un comentario