Creando nuestro propio certificado autofirmado

Los servicios de una autoridad de certificación, son principalmente utilizados para garantizar la seguridad​ de las comunicaciones digitales vía el protocolo TLS (Transport Layer Security), utilizados en las comunicaciones web (HTTPS) o las comunicaciones de correos electrónicos (SMTP, POP3, IMAP), así como para resguardar documentos digitales (por ejemplo, utilizando firmas electrónicas avanzadas con el sistema PAdES para documentos PDF, o vía el protocolo S/MIME para los correos electrónicos). (tomado de wikipedia)

Una autoridad de certificación ( CA) es una entidad que firma certificados digitales. Muchos sitios web deben informar a sus clientes que la conexión es segura, por lo que pagan a una CA de confianza internacional (por ejemplo, VeriSign, DigiCert) para firmar un certificado para su dominio. En algunos casos, puede tener más sentido actuar como su propia CA, en lugar de pagar a una CA como DigiCert. Los casos comunes incluyen la protección de un sitio web de intranet o la emisión de certificados a los clientes para que puedan autenticarse en un servidor (por ejemplo, Apache, OpenVPN).

¿Qué hay en una CA?

Una autoridad de certificación es una combinación de las siguientes cosas:

  • Una clave privada
  • Un certificado autofirmado para esa clave privada
  • Una lista de todos los certificados que han sido emitidos
  • Una lista de todos los certificados que han sido revocados (CRL)
  • Una política de emisión de certificados
  • Servicios para publicar los certificados de validación de CRL (OCSP).

Solo la clave privada necesita estar altamente protegida. Todas las demás cosas en la lista anterior se pueden manejar como cualquier otro servicio de datos que proporcionamos.
Como se mencionó, la clave privada de la AC necesita un alto nivel de seguridad. Más seguridad usualmente significa menos comodidad. La clave privada debe almacenarse en un lugar seguro, pero se utiliza para firmar certificados por otro lado. Para hacer las cosas más seguras y fáciles, la clave privada, que debe estar altamente protegida, nunca se usa directamente para firmar los certificados de los usuarios finales y los servidores. En su lugar, se crea una CA intermedia, un nivel por debajo de la CA raíz. La clave privada de la CA raíz se usa solo una vez para firmar el certificado de la CA intermedia y luego se almacena en su lugar seguro. Después de eso, los certificados para personas y dispositivos pueden ser firmados por la CA intermedia con su propia clave privada. En caso de que la clave privada intermedia sea robada, perdida o comprometida, puede descartarla y crear una nueva CA intermedia, sin perder todo, como sería el caso si esto sucediera con la clave CA raíz. Aún es aconsejable proteger la clave privada de los intermediarios con una contraseña y no dejarla en un servidor desprotegido todo el tiempo.

Cuando brindamos servicios para el público en general, utilizamos certificados firmados por un tercero “confiable”. Las personas que no nos conocen (nosotros tampoco los conocemos) pueden confiar en la firma de la CA pública (que ambos sabemos), para iniciar un canal de comunicación seguro y “confiable”. Esto les asegura que, de hecho, hablan con nuestro servidor y que nadie puede escuchar o leer ninguna comunicación. La información y los servicios que brindamos en estos servidores aún están abiertos al público en general y no son secretos en absoluto.

En este tutorial les mostrare como crear nuestro propio certificado autofirmado y no depender de un tercero para lograrlo. Este tutorial es una traducción de este link, con agregados y mejoras para su uso. Gracias a @yoandymg por sus aportes.

Instalar OpenSSL

Una vez instalado, está listo para crear su propio certificado autofirmado. Actuar como una autoridad de certificación (CA) significa tratar con pares criptográficos de claves privadas y certificados públicos. El primer par criptográfico que crearemos es el par raíz. Consiste en la clave raíz (cakey.pem) y el certificado raíz (cacert.pem). Este par forma la identidad de su CA. Si usamos SHA1, obtendremos la página Su conexión no es privada en Chrome.Por lo que usaremos una codificacion más fuerte, como SHA256.

Creando tu ambiente de trabajo

Usaremos el directorio raíz de su perfil de usuario (root en mi caso) para hacer este trabajo. Si usa algo más, puede que necesite personalizar el contenido de caconfig.cnf y certs_escfg.cnf a continuación.

Esto creará los siguientes directorios en la carpeta raíz de su perfil de usuario:
Contenidos del directorio
~/myCA contiene certificado de CA, base de datos de certificados, certificados generados, claves y solicitudes
~/myCA/signedcerts contiene copias de cada certificado firmado
~/myCA/private contiene la clave privada

Crear la base de datos de certificados

Crear archivo de configuración de autoridad de certificados

Cree caconfig.cnf utilizando vim o nano o el editor de texto de Linux que elija.

El contenido debe ser así:

Advertencias para caconfig.cnf:

En la sección [local_ca], asegúrese de reemplazar con la ruta completa de nuestro perfil. NOTA: NO USE ~/myCA. No funciona.
Del mismo modo, cambie la configuración del archivo de clave predeterminado en la sección [req] para que sea la misma.
Deje la sección [local_ca_policy] sin modificar. commonName = supplied, etc. Son correctos y no deben sobrescribirse.
En la sección [root_ca_distinguished_name], reemplaza todos los valores a tu propia configuración.

Generar el certificado de Autoridad de Certificación (CA):

Ejecute el siguiente comando para que openssl elija las configuraciones automáticamente:

Seguido generamos los certificados raíces.

Ingrese y vuelva a escribir la contraseña que desea usar para importar/exportar el certificado.
El certificado esta generado para una duracion de 5 años (1825 dias). Usted puede cambiar esos valores a su gusto.
NOTA: Recuerde esta contraseña, la necesitará a lo largo de este recorrido.

Una vez que haya terminado, debe tener los siguientes archivos:
Contenido del archivo
~/myCA/cacert.pem CA certificado público
~/myCA/private/cakey.pem clave privada de CA

En Windows, usaremos el archivo .crt en su lugar, así que cree uno usando el siguiente comando:

Creación de su certificado autofirmado con nombre alternativo del titular Subject Alternative Name (SAN)

Ahora que tiene su CA, puede crear el certificado SSL autofirmado real. Pero primero, necesitamos crear el archivo de configuración para ello. Así que de nuevo, usa vim o nano, etc. para crear el archivo. En este ejemplo, llamaré a mío certs_escfg.cnf ya que ese es mi dominio. Puedes llamarlo como quieras. Solo asegúrate de usar el nombre de archivo correcto en el comando de exportación (export) más adelante.

A continuación se muestra el contenido de ~/myCA/certs_escfg.cnf:

Advertencias para certs_escfg.cnf.

Cambie los valores en la sección [server_distinguished_name] para que coincida con su propia configuración.
En la sección [alt_names], cambie el valor de DNS.0 y DNS.1 a lo que necesite. Puede agregar tantos nombres DNS alternos como necesite siguiendo la secuencia, DNS.3 .4 etc. En mi caso configure todos los servicios webs que poseo usando wildcards.Tambien puede agregar Ip especificas de esos servidores, no es obligatorio.
NOTA: Es posible incrustar el rango de direcciones IP en el campo SubjectAltNames. Pero ninguno de los navegadores modernos confiaría en este tipo de certificado.

Una vez que haya creado el archivo de configuración, debe exportarlo:

Ahora genera el certificado y la clave:

De nuevo, proporcione la contraseña que ingresó anteriormente y espere a que finalice el comando.

A continuación, ejecute lo siguiente para crear el archivo de clave sin cifrar:

De nuevo, proporcione la contraseña que ingresó anteriormente y espere a que se complete el comando.

Ahora cambie la exportación a caconfig.cnf para que podamos firmar la nueva solicitud de certificado con la CA:

Y firmela:

De nuevo, proporcione la contraseña que ingresó anteriormente y espere a que se complete el comando y simplemente escriba Y cuando le pida [y/n].

Ahora debes tener tu certificado autofirmado y la clave.

~/myCA/server_crt.pem Certificado SSL autofirmado
~/myCA/server_key.pem Clave privada del certificado SSL autofirmado

Despliegue de los certificados en los diferentes equipos y servicios.

Conversión de los archivos .pem a .pfx para uso de Windows modo local

En Windows, usamos principalmente archivos .pfx y .crt. Por lo tanto, necesitamos convertir el archivo .pem a .pfx. Usaremos cat para combinar server_key.pem y server_crt.pem en un archivo llamado hold.pem. Luego haremos la conversión usando el comando openssl pkcs12 como se muestra a continuación. Puede usar el texto que desee para describir su nuevo archivo .pfx en el parámetro -name.

De nuevo, proporcione la contraseña que ingresó anteriormente y espere a que se complete el comando.

Ahora debería tener los siguientes archivos que usaremos en la siguiente sección.

~/myCA/certs_escfg.pfx Certificado SSL autofirmado en formato PKCS # 12
~/myCA/cacert.crt Certificado de CA utilizado para firmar el certificado autofirmado

Instalar la nueva CA y certificados autofirmados en Windows.

Copiar certs_escfg.pfx y cacert.crt para su PC con windows. Para instalar la CA y los certificados autofirmados, todo lo que necesita hacer es hacer doble clic en el archivo desde donde los copió.

Una vez que hayas hecho clic, solo sigue los pasos de Instalar certificado. Para el Certificado de CA (cacert.crt), asegúrese de instalarlo en el Equipo Local, Entidades de Certificación raíz de confianza. Para el certificado autofirmado (certs_escfg.pfx), instálelo en Equipo local, ingrese la contraseña como anteriormente y guárdelo en Personal.

Desplegando el certificado raíz de nuestra CA en formato p7b (PKCS #7)

Ahora vamos a convertir nuestra CA para desplegarlo en Windows, hay que convertirlo al formato PKCS #7(.p7b):

Ahora lo siguiente es meterlo para nuestro PCD y de ahí hacer el despliegue por GPO, para ello hacemos lo siguiente:

1- Abrir la consola de Administración de directivas de grupo.
2- Crear o editar una GPO.
3- Ir a Directivas -> Configuración de Windows -> Configuración de Seguridad -> Directivas de clave pública -> Entidades de certificación raíz de confianza
4- Clic derecho -> Importar
5- Siguiente
6- Examinar y buscamos cacert_escfg.p7b [en tipos de certificado poner Certificados PKCS #7]
7- Terminamos y cerramos la consola de administración

Desplegar nuestra CA en nuestros entornos GNU/Linux

Desplegando opciones para Firefox

Algunos navegadores pueden usar los certificados del repositorio del sistema operativo como Internet Explorer, Chrome y el Chromium, Firefox también tiene esa opción pero por defecto no está activada, como esto es para despliegue mostraré método para el Firefox versión FrontMotion y desplegando un .js y un .cfg para las versiones normales.

– Para la versión modificada por FrontMotion
Si usamos esta variante ya tendremos nuestro fichero de configuración mozilla.cfg por lo que solo tendremos que agregar al final de dicho fichero la línea.

– Para la versión normal de Firefox
Tendremos que crear una carpeta en nuestro servidor compartida y en la cual pondremos el fichero mozilla.cfg que debe tener:

Y otro llamado autoconfig.js y debe tener:

Después hay que crear una GPO y editarla, y para ello hacemos lo siguiente:
1- Abrir la consola de Administración de directivas de grupo.
2- Crear o editar una GPO.
3- Ir a Preferencias -> Configuración de Windows -> Archivos
4- Clic derecho -> Nuevo -> Archivo
5- En acción seleccionamos Reemplazar
6- En Archivos de origen ponemos nuestro archivo autoconfig.js
7- En Archivo de destino pondremos %programfiles%\Mozilla Firefox\Defaults\Pref\autoconfig.js
8- Marcamos Suprimir errores en acciones de archivos individuales

Ahora empezamos de nuevo desde el paso 4
1- Clic derecho -> Nuevo -> Archivo
2- En acción seleccionamos Reemplazar
3- En Archivos de origen ponemos nuestro archivo enableroot.js
4- En Archivo de destino pondremos %programfiles%\Mozilla Firefox\mozilla.cfg
5- Marcamos Suprimir errores en acciones de archivos individuales
6- Aceptamos y cerramos la consola de administración

Haciendo que Android reconozca nuestra CA

Para esto tendremos que hacer una copia de nuestro cacert.pem y cambiarle la extensión a .crt

Ahora lo copiamos para nuestro Android o podemos ponerla en una web y acceder desde un navegador, de cualquier manera, ejecutamos CA_ESCFG.crt
nos pedirá ingresar nuestro PIN después le pondremos el nombre de la CA y en Uso de credenciales seleccionamos VPN y aplicaciones.

Ahora les mostrare mi aporte en este tutorial. Expondré los pasos para usar los certificados autofirmados en los servicios webs más comunes que usamos en nuestro quehacer diario. Empezamos con:

PFSENSE

En la web de pfsense ir a:

System/Certificate Manager/Certificates

Luego agregar un certificado (add/sing). En la opción método, escoger importar un certificado existente. Lo nombramos como queramos. Editamos nuestro server_crt.pem y copiamos todo desde:

—–BEGIN CERTIFICATE—–
hasta
—–END CERTIFICATE—–
incluyendo esas etiquetas. Y lo pegamos en el cuadro de datos del certificado.

Hacemos el proceso similar, pero usando server_key.pem y copiamos todo desde:

—–BEGIN CERTIFICATE—–
hasta
—–END CERTIFICATE—–
incluyendo esas etiquetas.Y lo pegamos en el cuadro de los datos de la llave. Y salvamos.

Ahora tenemos que configurar PFSense para que use el nuevo certificado. Para ello vamos a:

System/Advanced/Admin Access

Marcamos el protocolo https y debajo escogemos el certificado creado. Salvamos la configuración y la web se refrescará sola.

PROXMOX

Aqui es muy sencillo solo seria copiarlos al lugar correspondiente y reinciar el servicio web.

FREENAS

Es muy parecido a como se procedió en el PFSense.En la web de FreeNas ir a:
Sistema/Certificados
Escoger importar certificado. Editamos nuestro server_crt.pem y copiamos todo desde:

—–BEGIN CERTIFICATE—–
hasta
—–END CERTIFICATE—–
incluyendo esas etiquetas. Y lo pegamos en el cuadro de datos del certificado.

Hacemos el proceso similar, pero usando server_key.pem y copiamos todo desde:

—–BEGIN CERTIFICATE—–
hasta
—–END CERTIFICATE—–
incluyendo esas etiquetas. Y lo pegamos en el cuadro de los datos de la llave. Y salvamos.

Luego vamos a:

Sistema /General
y donde dice certificado, escogemos el que acabamos de crear. Refrescamos la web.

PMG

Proxmox Mail Gateway usa claves y certificados para hacer conexiones seguras. La aplicación utiliza las claves y certificados almacenados en:
/etc/pmg/pmg-api.pem – Clave y certificado (combinados) utilizados por el servidor HTTPs (API)
/etc/pmg/pmg-tls.pem – Clave y certificado (combinados) para cifrar el tráfico de correo (TLS)

Como es la combinación de clave(key) y certificado(crt) editamos nuestra certificado (server_crt.pem):

NGINX

Para cualquier sitio web publicado con NGINX solo debemos agregar nuestra configuración SSL. Editamos el fichero de configuración de nuestro sitio que esta en /etc/nginx/sites-available/ y agregamos nuestra configuracion SSL.

Podemos guardar los certificados donde queramos, solo hay que especificar el camino a ellos. Luego de editado reinicamos nuestro NGINX.

APACHE 2 (ZABBIX)

Primero, crearemos un fragmento de configuración de Apache para definir algunas configuraciones SSL. Esto configurará a Apache con un conjunto de cifrado SSL sólido y permitirá algunas características avanzadas que ayudarán a mantener nuestro servidor seguro.

A continuación, modifiquemos /etc/apache2/sites-available/default-ssl.conf, el archivo predeterminado de Host Virtual de Apache SSL.

Copiamos nuestros certificados autofirmados donde corresponden

Modificando el archivo host HTTP para redirigir a HTTPS

Ahora que hemos realizado nuestros cambios, podemos habilitar los módulos de encabezados y SSL en Apache, habilitar nuestro Host virtual listo para SSL y luego reiniciar Apache para que estos cambios entren en vigor.

Ya podemos acceder a nuestro sitio publicado con apache usando HTTPS o sin él ya que nos redirigía a el mismo.

Aun me quedan más web y servicios por explicar cómo agregarle el certificado autofirmado. A medida que vaya implementándolos iré poniéndolos aquí.
Espero que esta guía les sirva a todos. Sobre todo a aquellos que no quieren depender de entidades certificadoras de terceros.
alex out

 

 

(Visited 3 times, 1 visits today)
Sobre Alexander Rivas Alpizar 27 Artículos
Administrador de Redes de EMPRESTUR Cienfuegos

9 Comentarios

  1. hola, realice cabalmente todo lo que muestras en el tutorial y me parece estupendo!
    Y tengo un dominio que se llama (dominio.cu) y que posee varias VM con web ej:
    1. http://www.dominio.cu
    2. cloud.dominio.cu
    3. proxmox.dominio.cu
    4. mail.dominio.cu
    5. jabber.dominio.cu
    dentro de un servidor PROXMOX, entonces, para implementar este tutorial debo:
    A: EN UNA (VM) APARTE?
    B: EN LA RAIZ DEL PROXMOX?
    C: EN UN CONTENEDOR DOCKER?
    D: DONDE?
    Cual que me aconseja usted?????
    gracias

  2. hola nuevamente, cumplí cabalmente con lo expuesto aquí yyyyyyy
    funciona peroooooooo NO me sale el CANDADO VERDE…ire a consultar para poner mi experiencia. Saludos

  3. (…PCD y de ahí hacer el despliegue por GPO…)
    Con este paso no es suficiente?
    ademas le confieso que también lo probé en un ADDC en (WINDOWS-SERVER 2016) mediante GPO para el Dominio!

    • Los despliegues por GPO a veces demoran. Si quieres asegurarte de q todo lo hicistes bien importa manualmente la CA a tu navegador. Si usas Firefox importalo ve a sus opciones e importa cacert.crt. Si usas otro navegador importalo a win2 siguiendo el tuto:
      Instalar la nueva CA y certificados autofirmados en Windows.

      Copiar certs_escfg.pfx y cacert.crt para su PC con windows. Para instalar la CA y los certificados autofirmados, todo lo que necesita hacer es hacer doble clic en el archivo desde donde los copió.
      alex out

  4. ufff, muy bueno!!! pero sin quitar el mérito de haber estudiado openssl a profundidad, caballito si tiene en la red ya un pfSense, por qué no usar las funcionalidades que nos brinda? si con el mismo pfSense se puede crear una entidad certificadora para toda la red.

    • Y tienes toda la razon, pero no es obligado tener un pfsense en tu red. Mucha gente usa kerio o incluso fw de windows. Ademas no a todos nos gusta las cosas prefabricadas y preferimos la consola con lo cual tenemos mayor control. Pero tambien podria hacer un tuto usando a pfsense para lo mismo. Al leerse este tuto entonces entenderan mejor la forma de hacerlo en pfsense que no es muy intuitiva que digamos. Debes conocer la teoria bien para configurar una entidad en pfsense. Si tengo tiempo creo otro usando pfsense con capturas. alex out

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*