Instalar certificado SSL en linux tomcat firmado por una CA
En general se puede usar openssl (linux) o keytool (java) , yo he tenido algunas dificultades para generar la clave privada con keytool de java, entre otra que a veces no la muestra o cuando le pido a AWS de Amazon EC2 que la verifique me dice que no coincide la clave privada con el cuerpo del CSR, además para general el keystore (almacén de claves) en formato pk12 , para servidores Tomcar es necesario usar un protocolo especial denominado P12, por lo tanto los archivos enviados desde la certificadora CA, no funcionan porque son crt y pem o p7b, ademas Tomcart no tiene manera de registrar los archivos intermedios por esa razón su sugiere crear uno nuevo que contenga todos los archivos necesarios y para hacerlo se debe usar openssl por eso decidí usar openssl para todo el proceso.
Los pasos básicos son:
- Crear una carpeta donde guardar todos los archivos que se van a generar en el proceso de creación de claves públicas y privadas en el servidor.
- Ingresar a la nueva carpeta.
- Crear los las firmas publica y privada en el servidor.
- Presentar el archivo .csr generado en el servidor a la pagina de la entidad certificadora (CA) para que lo firme.
- Portar el archivo terminado en .zip devuelto por la autoridad certificadora CA, ya firmado proceso que se efectuá fuera de linea en la pagina de la CA.
- Generar un almacén de claves (keystore) que tomcat pueda entender (formato P12) en el servidor
- Copiar ese archivo en un lugar donde tomcat lo pueda usar.
- Configura el archivo server.xml de tomcat para que pueda usar el certificado.
Vamos a usar openssl de la distribución de linux centos 7. tomcat 9.0 (en general el proceso es similar en cualquier linux que use tomcat, salvo las excepciones propias del ambiente que se este trabajando, sobre todo a la hora de instalar openssl)
1. Instalar openssl si se requiere
# sudo yum install openssl
2.Crear una carpeta para almacenar los archivos necesarios tantos los generados desde el servidor con el comando openssl como lo que la entidad certificadora CA le entregue.
Por ejemplo.
# sudo mkdir /home/miscertificados
En esencia son solo 2 comando y uun proceso que se lleva a cabo en la pagina de la CA, y modificar el archivo de configuración de tomcat llamado server.xml que se encuentra en la carpeta /conf de tomcat.
3.Creamos la clave primaria y el archivo de CSR.
# sudo openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key
Genera la clave primaria (EN EL SERVIDOR) y la almacena en el archivo privateKey.key o en el nombre que usted decida utilizar.
Genera además el archivo CSR con terminación .csr para enviar a la CA para firmarlo, responda las preguntas que el comando solicita para para crear un contenido en el archivo CSR único. En este caso CSR.csr , puede usar el nombre que mas le convenga.
Pide que le indique una clave, recuerde tenerla a mano porque se le va solicitar en el paso siguiente para generar el archivo de keystore para ser usado por tomcat.
Por ejemplo : miclave1234
Solicita alguna informacion para generar correctamente el CSR.
Country Name (2 letter code) [XX]: CO
State or Province Name (full name) []: antioquia
Locality Name (eg, city) [Default City]: medellin
Organization Name (eg, company) [Default Company Ltd]: miempresa
Organizational Unit Name (eg, section) []: tic
Common Name (eg, your name or your server's hostname) []:miempresa
Email Address []: micorreo@gmail.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: mipassword
An optional company name []: miempresa
Nota: mipassword puede ser diferente a la clave de acceso miclave1234, forma parte de la generación del certifiacdo pero no la vuelve a pedir.
Dependendiendo de su entidad certificadora CA el proceso puede cambiar ligeramente pero en general existe alguna pagina o sitio web de la CA donde se debe incluir el contenido del archivo CSR que se acaba (CSR.csr) de generar para que la entidad lo firme y genere los archivos necesarios del certificado SSL.
En general la CA tiene algún tipo de mecanismo para descargar estos archivos, en Godaddy por ejemplo, es la descarga de un archivo tipo ZIP o los envian a su correo, y contiene los archivos .crt y .pem o p7b necesarios Para instalarlos en el keystore (almacén de firmas del servidor) para autenticar el certificado SSL en tomcat.
En “algunos” casos como los archivos de Godaddy para Amazon y tomcat requieren un archivo especial que no se encuentra en este archivo ZIP y que hay que descargar de forma independiente, en ese archivo está la información de la entidad certificadora, en el caso de Goddaddy este archivo se llama gdroot-g2.crt. (pregunte por este archivo en su CA si existe, algunas CA o lo incluyen por defecto en los archivos devueltos.)
En el caso especifico de GODADDY. permite hacer la generación del certificado firmado mediante su pagina web en el enlace : https://account.godaddy.com/products?go_redirect=disabled
Esta información genera en la CA el respectivo certificado firmado lo cual puede demorar cierto dependiendo de CA.
Para servidores Tomcar es necesario usar un protocolo especial denominado P12, por lo tanto los archivos enviados desde la certificadora CA no funcionan porque son crt y pem o p7b , ademas Tomcart no tiene manera de registrar los archivos intermedios (por ejemplo gdig2.crt.pem,gdroot-g2.crt, etc. ) por esa razón su sugiere crear uno nuevo que contenga todos los archivos necesarios (*crt,*pem devultos por la CA , esto lo puedo hacer con cualquier editor de texto que maneje texto plano (notepad, emacs, nano etc) insertando uno tras otro en ese nuevo archivo, no se recomiena el uso de word porque puede insertar caracteres especiales o de control al archivo final).
Como se indico puede ser necesario la inclusión del archivo con la información de la entidad certificadora (gdroot-g2.csr en el caso Godaddy)
Nota:
Si los archivos devueltos por la certificadora CA, están en formato .p7b convertir antes a .crt
# sudo openssl pkcs7 -print_certs -in certificate.p7b -out certificate.crt
4. Converrtimos lo archivos .crt y .pem devueltos por la certificadora al formato aceptado por tomcat P12 en el servidor.
# sudo openssl pkcs12 -export -out midominio.p12 -inkey privateKey.key -in archivoCA.crt -certfile nuevo.crt
Este proceso solicita la clave almacenada en el paso anterior que llamamos miclave1234
En el anterior comando privatekey.key es el archivo que se generó en el paso anterior con el comando openssl y midominion.p12 es el archivo de keystore (almacén de claves) que se va generar para ser usado por Tomcat.
El nombre asociado a la salida ( -out) puede ser cualquiera cadena de caracteres , por simple facilidad es usual colocare el nombre del dominio que se esta protegiendo, por ejemplo midominio.p12
actualizar el archivo en /use/local/tomcat/conf/server.xml
# sudo emacs /usr/local/tomcat/conf/server.xml
localizar las siguientes entradas y actualizarlas para que usen el certificado creado con SSL firmado
a)
<Connector executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
compression="on"
compressionMinSize="1024"
noCompressionUserAgent="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/plain,text/css,application/javascript,application/json,text/javascript"
redirectPort="443" />
b)
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="conf/midominio.p12" keystorePass="miclave1234"
clientAuth="false" sslProtocol="TLS"/>
Lo resaltado en las 2 entradas anteriores indica lo siguiente:
Rediregir el trafico del puerto 80 al puerto 443
Cambiar el esquema de seguridad a https y secure=”true” con certificado habilitado.
actualizar keystoreFile=conf/midominio.p12
keystorePass=miclave1234
De acuerdo a los 2 últimos pasos le estamos indicando Tomcat que el archivo keystore generado en el paso 4. con nombre midominio.p12 lo vamos a guardar en el archivo tomcat/conf
para que pueda encontrarlo y le damos la clave con la cual generamos ese archivo, miclave1234.
Por ultimo reiniciamos tomcat :
# sudo tomcat/bin/shutdown.sh
# sudo tomcat/bin/startup.sh
Esperamos unos momentos a que el cambio se propague y verificamos el sitio web con
www.midominio.com. En su navegador. Si todo quedo correcto debe mostrar el candado cerrado en el extemo izquierdo de la barra de navegaión.
Link de referencia para instalar SSL en tomcat:
Comentarios
Publicar un comentario