AGESIC Gerencia de Proyectos Tutorial para la Solicitud de Certificados para la PGE Plataforma Java Historial de Revisiones Fecha Versión Descripción Autor Aprobado Por 27/06/2011 1.0 Versión inicial Horacio López Guzmán Llambías 16/09/2011 1.1 Se agrega un paso de verificación, se corrigió la Horacio López Guzmán Llambías importación del CSR y se realizaron correciones menores 27/09/2011 1.2 Agregado de aviso importante en el paso de Horacio López Guzmán Llambías generación de la clave privada. 20/10/2011 1.3 Arreglos en base a feedback de organismos. Horacio López Guzmán Llambías Marcelo Caponi 22/12/2011 1.4 Especificación de ubicación del certificado de la CA Horacio López Guzmán Llambias Nombre actual del archivo: Tutorial_Certificados_Java_v1.4.odt Andes 1365 piso 7º Montevideo Uruguay Tel./Fax: (+598) 2901.2929* Email: contacto@agesic.gub.uy www.agesic.gub.uy
Índice de contenido Prerequisitos...4 Introducción...4 Herramientas...5 Creación de almacén de claves (keystore)...6 Paso 1: Generación de clave privada (PK)...6 Paso 2: Solicitud de Firma de Certificado...9 Paso 3: Importar CSR firmado por la CA en el almacén de claves...10 Creación del almacén de confianza (truststore)...12 Verificación...14 Pág. 3 de 16
Prerequisitos En esta sección se describen brevemente los conceptos que deben manejarse para poder tener una mejor comprensión del contenido del documento. Se deben tener los conceptos de: Criptografía, certificados digitales, SSL. Ejecución de herramientas Java sobre Windows/Linux RedUy y la PGE Introducción Una comunicación segura (SSL o TLS) proporciona autenticación, confidencialidad e integridad de la información entre extremos en una red mediante el uso de criptografía. Entre los pasos que realiza el protocolo SSL para establecer una conexión segura está el intercambio de claves públicas y autenticación basada en certificados digitales. Habitualmente, sobre la PGE el cliente y el servidor son autenticados (es decir se garantiza su identidad) mediante el uso de certificados. En este documento se presenta una serie de pasos de cómo un organimo debe obtener un certificado SSL para su servidor. Esto implica: 1. crear una clave privada (propiedad del organismo), 2. crear la solicitud de firma de certificado (CSR) a la autoridad cerficadora (CA), 3. obtener el certificado de la CA en el cuál se confiará e incluirlo dentro de los certificados de confianza del organismo, 4. y por último a partir del CSR, seguir el procedimiento para obtener el certificado firmado por la CA. Página 4 de 16
Estos pasos anteriormente mencionados se detallarán en cada sección del documento. Existen diferentes tecnologías para realizar la generación de claves e importación de certificados digitales, pero en este documento se utilizará la plataforma Java para dicho propósito. En particular, se usará la herramienta keytool incluida en el paquete de desarrollo Java JDK 1. Utilizando esta herramienta dos elementos son necesarios para la configuración de la comunicación segura: tener un almacén claves (keystore) y un almacén de claves de confianza (truststore). En el keystore se almacenarán las claves privadas a las cuales solo el organismo conoce 2 y en el truststore las claves públicas de las entidades en las cuales se confía. Los detalles de la generación de los mismos se verán a lo largo del documento. Herramientas En este documento se trabajó con: Windows Server 2003 y Windows Vista Bussiness 3 Java(TM) SE Development Kit 6 Update 17 1 La JDK puede ser descargada de aquí http://www.oracle.com/technetwork/java/javase/downloads/jdk- 6u26-download-400750.html. La herramienta keytool se encuentra en $java_home/jdk1.6.0_17/bin 2 En la práctica no solo se tendrán las claves privadas, sino que se necesitará el certificado de la CA como una entrada más de este almacén para la correcta ejecución de los pasos. Se detallará más adelante. 3 A pesar de que el tutorial fue desarrollado sobre la plataforma Windows, tener en cuenta que Java es una herramienta multiplataforma que funciona en otros sistemas operativos como Linux o Mac OS. Pág. 5 de 16
Creación de almacén de claves (keystore) Paso 1: Generación de clave privada (PK) El primer paso para solicitar un certificado es crear la clave privada la cual se almacenará en un almacen de claves (keystore) específico. El almacén de claves simplemente es un archivo de texto, el cual tendrá una entrada (identificada por el alias) por cada clave en el almacén. La herramienta para la generación será keytool la cual recibe una serie de parámetros: genkey: indica que se desea generar un nuevo almacén de claves alias: será el alias que tendrá la clave dentro del almacén (ej: testcliente-prod) keyalg: con este parámetro se le indica el algoritmo criptográfico a utilizar. El algoritmo a utilizar debe ser RSA. keysize: es el largo de la clave. El largo a utilizar debe ser 1024. keystore: el nombre del archivo del almancén de claves (el estándar es denominar a este archivo como.keystore o.jks. ej: agesic_prod.jks) Al ejecutar el comando con los parámetros anteriormente descriptos, se comienza a desplegar opciones para el ingreso de los datos del certificado. Antes de comenzar el ingreso de la información del certificado, el programa solicita una contraseña para el almacén de claves. Pág. 6 de 16
Es sumamente importante recordar esta contraseña para pasos posteriores o futuros, además de que no debe ser revelada. Los datos del certificado a ingresar serán solicitados en el siguiente órden: 1. Common Name (CN): Nombre del servidor en REDuy. Es el nombre del servidor registrado en el DNS de la PGE. El formato a seguir debe ser nombreservidor.nombreorganismo.red.uy, en el ejemplo servidor1.dnpt.red.uy. 2. Organization Unit (OU): Nombre de la unidad dentro de la Unidad Ejecutora (no usar tildes), ej: Secretaria General. 3. Organization (O): Nombre de la Unidad Ejecutora (Organismo) completo seguido por las siglas entre paréntesis (no usar tildes), ej: Dirección Nacional de Policia Técnica (DNPT). 4. Locality Name (L): ciudad, ej: Montevideo 5. State Name (ST): departamento, ej: Montevideo 6. Country (C): país con su abreviación de 2 letras, ej: UY Finalmente, se solicita una contraseña para la clave asociada al alias ingresado (en el ejemplo, la clave asociada al alias test-cliente-ssl-prod). Esta clave debe ser la misma que la del almacén de claves, así que simplemente presionar enter. Pág. 7 de 16
Nota importante: Si el archivo del almacén de claves no existe, se creará en el directorio en donde se ejecutó el comando keytool. Dicho archivo (en el ejemplo, agesic_prod.jks) no debe ser eliminado, ya que si es así se perderá toda la información de las claves generadas. En la tabla 1 se presenta un ejemplo completo de la ejecución de keytool con los parámetros que se brindaron como ejemplo. $keytool -genkey -alias test-cliente-ssl-prod -keyalg RSA -keysize 1024 - keystore agesic_prod.jks Escriba la contraseña del almacén de claves: ****** +Cuáles son su nombre y su apellido? [Unknown]: servidor1.dnpt.red.uy +Cuál es el nombre de su unidad de organización? [Unknown]: Secretaria General +Cuál es el nombre de su organización? [Unknown]: Dirección Nacional de Policia Tecnica +Cuál es el nombre de su ciudad o localidad? [Unknown]: Montevideo +Cuál es el nombre de su estado o provincia? [Unknown]: Montevideo +Cuál es el código de país de dos letras de la unidad? [Unknown]: UY +Es correcto CN=servidor1.dnpt.red.uy, OU=Secretaria General, O=Direccion Nacional de Policia Tecnica, L=Montevideo, ST=Montevideo, C=UY? [no]: si Escriba la contraseña clave para <test-cliente-ssl-prod> (INTRO si es la misma contraseña que la del almacén de claves): ****** Tabla 1: Generación de almacén de claves Pág. 8 de 16
Paso 2: Solicitud de Firma de Certificado El segundo paso es obtener la firma de la autoridad certificadora (CA) que garantice que la información contenida en el certificado es válida. Para ello, lo primero es la generación de un archivo llamado CSR (Certificate Signed Request), que sigue el estándar PKCS10 para la solicitud de firma de certificado. La generación del CSR también puede realizarse utilizando la herramienta keytool. Los parámetros para la generación de dicho archivo son los siguientes: certreq: indica que se desea crear un archivo CSR alias: será el mismo utilizado en el paso de la generación de la clave privada (ej: test-cliente-ssl-prod) keystore: archivo correspondiente al almacén de claves generado (ej: agesic-prod.jks) file: nombre del archivo CSR (ej: pkcs10-agesic.csr) Al ejecutar el comando se solicitará la contraseña el almancén de claves que se ingresó en el paso 1. En caso de ingresarla correctamernte, se desplegará un mensaje informando que se creó el archivo exitosamente. $keytool -certreq -v -alias test-cliente-ssl-prod -keystore agesic_prod.jks -file pkcs10-agesic.csr Escriba la contraseña del almacén de claves: agesic Solicitud de certificación almacenada en el archivo <pkcs10-agesic.csr> Tabla 2: Generación de CSR Luego de creado el archivo CSR (PKCS10), se debe enviar un correo a soporte@agesic.gub.uy, con asunto Solicitud de PKCS12 Ambiente xxxxxx, solicitando el certificado firmado por la CA (PKCS12). No olvidar que es importante aclarar si el certificado solicitado es para el ambiente de producción o el ambiente de testing (substituir xxxxxx en el asunto del mail, ya sea por testing o producción ). Pág. 9 de 16
Paso 3: Importar CSR firmado por la CA en el almacén de claves El paso final es importar el CSR firmado por la CA en el almacén de claves. Para realizar esta tarea, es necesario hacer un paso previo. La herramienta necesita tener importado en el almacen de claves (archivo keystore generado en el paso 1) el certificado de la CA. Esto es necesario para poder importar el archivo CSR firmado por la CA correctamente. Para importar el certificado de la CA en el almacen de claves, ejecutar keytool con los siguientes parámetros: import / trustcacerts: similar al caso para el certificado de la CA, pero en este caso es para importar el certificado a nuestro almacén de claves. alias: alias que tendrá el certificado de la CA dentro del almacén de claves (ej: ca.pge.red.uy) keystore: nombre del almacén de claves creado en paso 1 (ej: agesicprod.jks) file: nombre del certificado de la CA keytool -import -trustcacerts -alias ca.pge.red.uy -keystore agesic_prod.jks -file CA.pge.red.uy.cer Escriba la contraseña del almacén de claves: ****** Propietario: CN=CA.pge.red.uy, O=agesic, OU=CA PGE Emisor: CN=CA.pge.red.uy, O=agesic, OU=CA PGE N mero de serie: 2a82e678fd228d41c72df431aa90fc Vßlido desde: Mon Jul 26 15:03:05 GYT 2010 hasta: Sun Jul 26 15:12:18 GYT 2015 Huellas digitales del certificado: MD5: 5E:78:AC:E6:7F:86:92:D4:A1:1F:69:40:6B:9E:F2:67 SHA1: 64:26:AE:67:EA:10:0F:8E:54:E3:95:73:94:47:30:E8:B5:93:85:D5 +Confiar en este certificado? [no]: si Se ha añadido el certificado al almacén de claves Tabla 3: Importar certificado de la CA en almacén de claves Al ejecutar el comando, se solicita la contraseña del almacén de claves que se ingresó en el paso 1. Pág. 10 de 16
Luego, para importar el CSR firmado por la CA se ejecuta keytool de manera similar. Se utilizan los siguientes parámetros: import / trustcacerts: importa el certificado a nuestro almacén de claves. alias: debe ser el mismo utilizado cuando se creó la clave privada en el primer paso (ej: test-cliente-ssl-prod) keystore: nombre del almacén de claves creado en el primer paso (ej: agesic_prod.jks) file: nombre del certificado firmado por la CA (recibido de soporte agesic, ej: dnpt.red.uy.cer) $ keytool -import -trustcacerts -alias test-cliente-ssl-prod -keystore agesic_prod.jks -file dnpt.red.uy.cer Escriba la contraseña del almacén de claves: ***** Se ha instalado la respuesta del certificado en el almacén de claves Tabla 4: Importar certificado firmado por la CA en el almacén de claves Al ejecutar el comando, se solicita la contraseña del almacén de claves que se ingresó en el paso 1. Al ingresar la clave correctamente, queda importado el certificado. Nota importante: El alias a utilizar en este último paso debe ser el mismo que el alias utilizado en el paso 1. Pág. 11 de 16
Creación del almacén de confianza (truststore) Dentro de los pasos necesarios para la comunicación utilizando certificados es la generación del almacén de claves de confianza. En este paso se genera el almacén de claves de confianza (truststore) importando la clave pública de la CA en la cual se confía. En el caso del ambiente de testing el certificado de la CA a importar es el llamado HGTivoliCA, y para el caso del ambiente de producción el certificado de la CA es CA.pge.red.uy 4. Nuevamente utilizando la keytool y los siguientes parámetros: import / trustcacerts: indica que se realizará una importación del certificado de la CA al almacén de confianza alias: será el alias que tendrá la clave dentro del almacén (ej: ca.pge.red.uy) keystore: nombre del almacén de certificados de confianza (ej: agesic_prod.truststore) file: nombre del certificado a importar (ej: CA.pge.red.uy.cer) Al ejecutar el comando con los parámetros anteriormente descriptos, el programa solicitará una contraseña para el almacén de claves de confianza. Luego del ingreso de la clave, mostrará los detalles del cerficado a importar y un un mensaje de confirmación Confiar en este certificado?. Al ingresar s ó y, terminára la importación y se presentará un mensaje informando que se ha añadido un nuevo certificado al almacén. 4 Los certificados ya sea para los ambientes de testing o producción, pueden ser descargados de aquí. Pág. 12 de 16
keytool -import -trustcacerts -alias ca.pge.red.uy -keystore agesic_prod.truststore -file CA.pge.red.uy.cer Escriba la contraseña del almacén de claves: ***** Volver a escribir la contraseña nueva: ***** Propietario: CN=CA.pge.red.uy, O=agesic, OU=CA PGE Emisor: CN=CA.pge.red.uy, O=agesic, OU=CA PGE N mero de serie: 2a82e678fd228d41c72df431aa90fc Válido desde: Mon Jul 26 15:03:05 GYT 2010 hasta: Sun Jul 26 15:12:18 GYT 2015 Huellas digitales del certificado: MD5: 5E:78:AC:E6:7F:86:92:D4:A1:1F:69:40:6B:9E:F2:67 SHA1: 64:26:AE:67:EA:10:0F:8E:54:E3:95:73:94:47:30:E8:B5:93:85:D5 +Confiar en este certificado? [no]: si Se ha añadido el certificado al almacén de claves Tabla 5: Importar certificado de la CA Nota importante: Si el archivo del almacén de confianza no existe, se creará en el directorio en donde se ejecutó el comando keytool. Dicho archivo (en el ejemplo, agesic_prod.truststore) no debe ser eliminado, ya que si es así se perderá toda la información de las claves generadas. Pág. 13 de 16
Verificación El último paso, para dar por finalizada la creación de claves para la comunicación SSL es la verificación de que los pasos ejectuados anteriormente hayan sido correctamente ejecutados. Para verificar el almacén de claves de confianza (*.trustore) se puede ejecutar el comando list de keytool como se presenta en la Tabla 6. Se debe verificar que la CA está instalada correctamente y tiene como tipo de entrada trustedcertentry. keytool -list -v -keystore agesic_prod.truststore Escriba la contraseña del almacén de claves: ****** Tipo de almacén de claves: jks Proveedor de almacén de claves: SUN Su almacén de claves contiene 2 entradas Nombre de alias: ca.pge.red.uy Fecha de creación: 16/09/2011 Tipo de entrada: trustedcertentry Propietario: CN=CA.pge.red.uy, O=agesic, OU=CA PGE Emisor: CN=CA.pge.red.uy, O=agesic, OU=CA PGE N mero de serie: 2a82e678fd228d41c72df431aa90fc Vßlido desde: Mon Jul 26 15:03:05 GYT 2010 hasta: Sun Jul 26 15:12:18 GYT 2015 Huellas digitales del certificado: MD5: 5E:78:AC:E6:7F:86:924:A1:1F:69:40:6B:9E:F2:67 SHA1: 64:26:AE:67:EA:10:0F:8E:54:E3:95:73:94:47:30:E8:B5:93:855 Tabla 6: Listado del almacén de claves de confianza Para verificar el almacén de claves también se puede ejecutar el comando list de keytool como se presenta en la Tabla 7. Verificar que el certificado de la CA ha sido importado, y el tipo de entrada es trustedcertentry. Además, verificar que existe la entrada en el almacén de tipo keyentry con la información ingresada en el paso 1. Pág. 14 de 16
keytool -list -v -keystore agesic_prod.jks Escriba la contraseña del almacén de claves: ***** Tipo de almacén de claves: jks Proveedor de almacén de claves: SUN Su almacén de claves contiene 2 entradas Nombre de alias: ca.pge.red.uy Fecha de creación: 04/06/2011 Tipo de entrada: trustedcertentry Propietario: CN=CA.pge.red.uy, O=agesic, OU=CA PGE Emisor: CN=CA.pge.red.uy, O=agesic, OU=CA PGE Número de serie: 2a82e678fd228d41c72df431aa90fc Válido desde: Mon Sep 12 15:03:05 GYT 2010 hasta: Sun Sep 25 15:12:18 GYT 2015 Huellas digitales del certificado: MD5: 5E:78:AC:E6:7F:86:924:A1:1F:69:40:6B:9E:F2:67 SHA1: 64:26:AE:67:EA:10:0F:8E:54:E3:95:73:94:47:30:E8:B5:93:855 Nombre de alias: test-cliente-ssl-prod Fecha de creación: 04/06/2011 Tipo de entrada: keyentry Longitud de la cadena de certificado: 2 Certificado[1]: Propietario: CN=servidor1.dnpt.red.uy, OU=Secretaria General, O=Direccion Nacional de Policia Tecnica, L=Montevideo, ST=Montevideo, C=UY Emisor: CN=CA.pge.red.uy, O=agesic, OU=CA PGE Número de serie: 24b34f5f000000000013 Válido desde: Mon Sep 12 15:03:05 GYT 2010 hasta: Sun Sep 25 15:12:18 GYT 2015 Huellas digitales del certificado: MD5: B0:70:F3B:7F:02:F8:BD:8A:BC:26:0B:41:A9:32:01 SHA1: 41:07:20:86:A1:A1:FA:0C:5E:95:54:F9:12:86:84:33:AAA:95:7E Certificado[2]: Propietario: CN=CA.pge.red.uy, O=agesic, OU=CA PGE Emisor: CN=CA.pge.red.uy, O=agesic, OU=CA PGE N mero de serie: 2a82e678fd228d41c72df431aa90fc Válido desde: Mon Sep 12 15:03:05 GYT 2010 hasta: Sun Sep 25 15:12:18 GYT 2015 Huellas digitales del certificado: MD5: 5E:78:AC:E6:7F:86:924:A1:1F:69:40:6B:9E:F2:67 SHA1: 64:26:AE:67:EA:10:0F:8E:54:E3:95:73:94:47:30:E8:B5:93:855 Tabla 7: Listado del almacén de claves Pág. 15 de 16
Notas importantes: Es de suma importancia que la entrada que corresponde a la CA debe ser de tipo trustedentry, y la que corresponde a la clave privada de ssl debe ser de tipo keyentry o privatekeyentry (según la versión java) y no deben ser de ningún otro tipo. Es posible que el listado para verificar los almacenes muestren una excepción como la siguiente al mostrar las CRL: "java.io.ioexception: invalid URI name:file://\\ca.pge.red.uy\certenroll\ca.pge.red.uy.crl". Tener cuenta que esto no es un error, simplemente que existen dos modos de acceso a la crl (local y http). No dar importancia a dicha excepción. Pág. 16 de 16