Configuración SSL (HTTPS) en Tomcat Esta es la documentación para habilitar el https en tomcat6, en el puerto default, en el caso que el usuario no tenga un certificado formal y acepte uno auto-firmado. Este caso requiere que el tomcat esté publicado en un ip-address fijo y que se le abran conexiones por el puerto default (8443). Generar Certificado auto-firmado (Para pruebas) En este caso, generaremos un certificado firmado por nosotros mismos. Generación del certificado. Desde una caja negra, desde el usuario que administra FactrónicaWeb, dar la secuencia de comandos del recuadro abajo, donde: Puede variar la ubicación del jre de java y puede ser tanto JRE6 como JRE5 Hay que teclear los textos que aparecen en verde Conviene no meterse en problemas de acentos. Por ejemplo usar, Mexico en vez de México. Hay que dar el mismo password en los dos casos que lo pide. Los caracteres extraños que aparecen en el texto abajo realmente aparecen en la caja negra. c:> cd c:\program Files\Java\jre6\bin c:\program Files\Java\jre6\bin> keytool -genkey -alias tomcat -keyalg RSA -keystore c:\itc\factronica\.keystore Escriba la contrase±a del almacún de claves: factron10 Volver a escribir la contrase±a nueva: factron10 Cußles son su nombre y su apellido? [Unknown]: Ariel Tejera Cußl es el nombre de su unidad de organizaci¾n? [Unknown]: com.itcomplements Cußl es el nombre de su organizaci¾n? [Unknown]: ITComplements SA de CV Cußl es el nombre de su ciudad o localidad? [Unknown]: Ciudad de Mexico Cußl es el nombre de su estado o provincia? [Unknown]: DF Cußl es el c¾digo de paýs de dos letras de la unidad? [Unknown]: MX Es correcto CN=Ariel Tejera, OU=com.itcomplements, O=ITComplements SA de CV, L= Ciudad de Mexico, ST=DF, C=MX? [no]: si Escriba la contrase±a clave para <tomcat> (INTRO si es la misma contrase±a que la del almacún de claves): <ENTER> Volver a escribir la contrase±a nueva: <ENTER> c:\program Files\Java\jre6\bin>
Creación del Keystore **En caso de tener un archivo con extensión.pfx para la autenticación con protocolo https realiza el procedimiento de extracción de certificado pfx. Extraer certificado.pfx a.cer Paso 1. openssl pkcs12 -in [xxxx.pfx] -out [mycertificates.crt] -nokeys clcerts Paso 2. openssl x509 -inform pem -in [mycertificates.crt] -outform der -out [mycertificates.cer] Importar certificado.cer a keystore "C:\Program Files\Java\jre6\bin\keytool" -import -alias [tomcat] -file [aero.cer] -KeyStore [.keystore] En el archivo conf/server.xml, de la instalación del tomcat hacer la siguiente edición.
Importar Certificado comprado (.PFX o.p12) Se debe crear un keystore JKS (Java Key Store) con el PFX y la ruta de los certificados raíz e intermedios de la entidad certificadora. Importar el PFX Existe en java una herramienta llamada keytool para crear keystore de tipo JKS. No importa la versión de java "C:\Program Files (x86)\java\jre6\bin\keytool" -importkeystore -deststorepass XXXXXX -destkeystore.keystore -srckeystore archivo.pfx -srcstoretype PKCS12 -srcstorepass YYYYYY XXXXXX es la contraseña de la llave privada en el.pfx YYYYYY es la contraseña del nuevo keystore. Puede usarse la misma contraseña del PFX..keystore es el nombre del nuevo keystore Archivo.pfx es el nombre del.pfx a importar Encontrar los certificados raíz e intermedios Obtener el certificado del.pfx y visualizarlo para ver sus certificados raíces o intermedios Para hacer esto se puede usar el comando: openssl.exe pkcs12 -in yourp12file.pfx -clcerts -nokeys -out publiccert.pem.crt (Para la llave privada tambien se puede usar: openssl.exe pkcs12 -in yourp12file.pfx -nocerts -out privatekey.pem) El archivo publiccert.pem.crt se puede visualizar dándole doble click. Certificado dentro del.pfx
En este ejemplo hay 1 certificado raíz GeoTrust Global CA y 1 certificado intermedio GeoTrust SSL CA. Algunas entidades envían junto al certificado creado, su cadena de certificados hasta la raíz para que el browser pueda verificar la validez. Cuando la entidad certificadora no envía la cadena de certificados, se tienen que descargar desde su página. El problema es que tienen muchos tipos de certificados raíz y lo que lleva tiempo es encontrar el certificado cuyo nombre iguala a los que usa el.pfx. Formar el archivo de cadena de certificados o paquete (BUNDLE) Una vez conseguidos todos los certificados intermedios y raíces en formato PEM, se debe crear un solo archivo.pem con el paquete de la cadena. Hay varias entidades que también manejan descarga de todo el paquete de la cadena (Bundle CA). Para crear el archivo de paquete hay que entrar a cada certificado: -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq fngk5srgprdvgosjka+ejdbtg/otpphhmmlcgduuna2yrpiut8rxh0pbfpvxlvdv is2aelet8u5fa9iajbku+bqvndnarqn7csirv8lvk83qlz6cjmtm386dgxhktubu 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8hha8sho9goel6nlmtodrejivbpaguvtlrgamougrx5aszpee4uwc2hgkceeow MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA ephojyn7qwvkdbf9qn1lumrmtjafbgnvhsmegdawgbtaephojyn7qwvkdbf9qn1l umrmtjanbgkqhkig9w0baqufaaocaqeanempauuvxvsokvcun5kafospecpilkin Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS tqwvyrmm3ok9nns4d0ixrkygjy6myqzcsplfamfoeveiiucl6ryvsalk6l5pdpcf PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4ebnx/3abd7ydstysvaq45pmp06dre57xnnb6pxe0zx5ijl4hmxxexxx12e6nv 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- Y copiar desde BEGIN hasta END y pegarlo en el archivo resultante. Uno detrás de otro. Se puede usar la línea de comandos Copy archivo1.pem + archivo2.pem + + archivon.pem Archivo_Bundle.pem Si solo hay 1 certificado en la cadena, no se necesita crear este archivo de paquete. Se usa el mismo archivo como bundle. Importar el bundle al keystore "C:\Program Files (x86)\java\jre6\bin\keytool" -import -alias root -keystore.keystore -trustcacerts -file Archivo_Bundle.pem Se pide la contraseña del keystore. Esta contraseña fue la YYYYYY dada en la importación del.pfx. Nota: Cada vez que se requiere trabajar en el keystore, se requerirá esta contraseña. Comprobar el contenido del keystore Se deben verificar las 2 entradas:
Cadena de certificados de la entidad: PFX Comando: "C:\Program Files (x86)\java\jre6\bin\keytool" -list -v -keystore.keystore Escriba la contrase±a del almacún de claves: YYYYYY Su almacún de claves contiene 2 en Nombre de alias: root Fecha de creaci¾n: 31-may-2013 Tipo de entrada: trustedcertentry XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx Nombre de alias: le-6335bb58-fc1a-40e9-9a38-e877fb49e55b Fecha de creaci¾n: 31-may-2013 Tipo de entrada: PrivateKeyEntry El nombre de la segunda entrada no importa.
Configurar puerto 8443 (o el que sea) como HTTPS de Tomcat En el archivo %TOMCAT_HOME%\conf\server.xml, donde decía: <!-- <Connector port="8443" protocol="http/1.1" SSLEnabled="true" maxthreads="150" scheme="https" secure="true" clientauth="false" sslprotocol="tls" /> --> Poner ahora: <Connector port="8443" protocol="http/1.1" SSLEnabled="true" maxthreads="150" scheme="https" secure="true" clientauth="false" sslprotocol="tls" keystorefile="c:/itc/factronica/.keystore" keystorepass="factron10"/> Tomar nota que: El keystorepass debe ser exactamente el mismo que se dio en los dos casos del paso #1. Es la contraseña del keystore JKS creado. Si se requiere usar un puerto distinto de 8443, entonces hay que cambiar todos los casos de port="8443" en el archivo conf/server.xml. Reiniciar el Tomcat, y revisar el archivo de bitácora logs/stdout...log para ver si no hay errores. Ahí deben aparecer líneas como estas, cerca del inicio: Dec 8, 2010 5:43:10 PM org.apache.coyote.http11.http11protocol init INFO: Initializing Coyote HTTP/1.1 on http-8080 Dec 8, 2010 5:43:10 PM org.apache.coyote.http11.http11protocol init INFO: Initializing Coyote HTTP/1.1 on http-8443 Comprobar Ingreso por internet explorer: Ahora se puede entrar a la aplicación tanto por HTTPS (puerto 8443) como por HTTP (puerto 8080): https://hosturl:8443/factronica y también por el puerto normal: http://hosturl:8080/factronica El explorador va a a generar alarmas de seguridad. Se indica al explorador que se aceptan los riesgos y ya se puede usar la aplicación con HTTPS.