19 abril, 2024

IsProto

Soluciones para Redes e Internet

OpenSSL – Creación de un certificado SSL autofirmado

openssl certificado ssl

La seguridad es parte primordial al momento de transferir información a través de la red y OpenSSL es la solución libre más popular que permite el cifrado de datos de red.

El cifrado de clave pública y firmado digital sirve para proteger las conexiones de los sitios web, utilizando básicamente dos protocolos: Secure Sockets Layer (SSL) y el protocolo Transport Layer Security (TLS).

La protección de un sitio web se da mediante el cifrado de sus datos a través de certificados de clave pública, en donde el protocolo del sitio web sería SSL, utilizando el prefijo https en lugar de el prefijo http estándar.

El certificado autofirmado es una solución gratuita para proporcionar el mismo nivel de seguridad para nuestro sitio en términos prácticos, aunque la Autoridad certificadora se muestre como no de confianza, sin embargo puede ahorrarnos dinero para múltiples aplicaciones: Servidores de base de datos, APIs, servicios de streaming, entre otros.

¿Qué es OpenSSL?

OpenSSL es una paquetería completa para el cifrado y creación de certificados SSL. Desarrollado por Netscape, SSL es un protocolo para manejar la seguridad de la transmisión de mensajes a través de redes y, más específicamente, Internet. SSL opera entre la capa de red TCP / IP y la capa de aplicación.

Cuando se conecta a un dispositivo o servicio que ejecuta SSL, se produce un apretón de manos en el que el dispositivo o servicio presenta su certificado público a la parte que se conecta para autenticar su identidad. A esto se le llama autenticación del servidor. Si el servidor y la parte que se conecta se autentican, todas las transmisiones entre las partes ahora se autentican y cifran utilizando cualquier método de cifrado que haya seleccionado, por ejemplo, cifrado RSA o DSA.

Con OpenSSL también puede configurar su certificado SSL para que la parte que se conecta también deba demostrar su buena fe al dispositivo o servicio, es decir la autenticación de cliente.

Protocolo TLS/SSL

openssl certificados ssl

Un funcionamiento similar al SSL es TLS. TLS también fue desarrollado por Netscape y se basó en SSL versión 3.0. Se detalla en RFC 2246.6 y ofrece ventajas significativas sobre SSL versión 2.0 y es un poco más seguro que SSL versión 3.0.

El uso de TLS se recomienda sobre cualquier versión de SSL siempre que su aplicación o servicio admita el uso de TLS. Para utilizar SSL / TLS (en lo sucesivo, TLS) en su sistema Linux, le mostraré cómo implementar el paquete OpenSSL.

OpenSSL es un intento de desarrollar una implementación segura y robusta de código abierto de SSL y TLS. Puede encontrar OpenSSL en su página oficial. El software se encuentra bajo mantenimiento y actualizaciones con frecuencia, por eso le recomiendo que opte por él antes de considerar una inversión en un paquete comercial que ofrezca capacidades similares.

Instalación de OpenSSL

Antes de iniciar, le recomendamos ver si ya existe el paquete en su instalación de Linux, para ello puede verificarlo consultando la versión del producto:

openssl version

Si el comando muestra la versión de OpenSSL (o de LibreSSL para MacOS), entonces podrá omitir esta sección. Para conocer cual es la última versión, consulte el sitio web oficial.

Si la versión que tiene ha quedado obsoleta, le recomiendo encarecidamente que descargue e instale la última versión desde el código fuente o mediante su herramienta de administración de paquetes si su proveedor tiene un paquete más actualizado, por ejemplo ejecutar en modo superusuario:

  • Debian: apt-get install openssl
  • Centos: yum install openssl
  • MacOS: brew install openssl

Instalación Manual

Si ha descargado OpenSSL en forma de paquete fuente, descomprímalo y cámbielo al directorio deseado. La instalación y configuración inicial se basa en el script de configuración para configurar los ajustes básicos de OpenSSL.

De forma predeterminada, cuando se instala desde el paquete fuente, OpenSSL se instala dentro de la ruta /usr/local y un directorio de trabajo /usr/local/ssl.

Si está actualizando una instalación de OpenSSL existente, debe confirmar dónde está instalada su versión actual y asegurarse de especificar esa ubicación en el script de configuración.

El proceso de compilación estándar y su instalación con bibliotecas compartidas está determinado con la siguiente secuencia de comandos:

./config –prefix = /usr –openssldir = /usr/share/ssl shared

make && make test

make install

Generación de un certificado SSL usando OpenSSL

Hemos llegado a la cereza del pastel: La creación de un certificado SSL. Para ello vamos a crear un certificado RSA, un tipo de certificado de clave pública, el cual se hace de forma muy simple con el siguiente comando:

openssl genrsa -out mi_key.pem -des3 1024

Con el comando anterior, comienza la generación de un certificado SSL utilizando RSA de 1024 bits, la opción des3 se utiliza para utilizar una passphrase dentro de las claves a generar.

Generating RSA private key, 1024 bit long modulus ..................................................++++++ ...................++++++
e is 65537 (0x10001)
Enter pass phrase for mi_key.pem:
Verifying - Enter pass phrase for mi_key.pem:

Algunas de las opciones más comunes que se pueden utilizar al crear un certificado SSL con OpenSSL son las siguientes:

  • ca: Funciones de la línea de comandos de openssl
  • gendsa: Realiza funciones de CA
  • req: Toda la creación de certificados basados en DSA. Las mismas opciones que la opción genrsa. Realiza funciones de solicitud de firma de certificado (CSR) X.509.
  • rsa: Procesa claves RSA y permite convertirlas a diferentes formatos.
  • rsautl: Una utilidad RSA para firmar, verificar, cifrar y descifrar.
  • s_client: Prueba las conexiones de cliente SSL / TLS a servidores remotos.
  • s_server: Prueba las conexiones del servidor SSL / TLS desde clientes y servidores remotos.
  • s_mime: Utilidad S / MIME que puede cifrar, descifrar, firmar y verificar mensajes S / MIME
  • verify: Realiza funciones de verificación de certificados X.509.
  • x509: Realiza funciones de gestión de datos de certificados X.509.

Creación de una autoridad certificadora CA

Con OpenSSL es muy sencillo hacer la creación de una nueva Autoridad Certificadora (CA) para su sistema. Este recorrido asume que va a crear la CA en el sistema local en el que utilizará los certificados.

La forma que mostramos a continuación es una de las más simples. Primero, elija un lugar para almacenar sus certificados. A menudo es /etc/ssl/certs la ruta por defecto.

A continuación, hay que inicializar la CA. La distribución OpenSSL viene con un script llamado CA, que tiene varias opciones, incluida la creación de una nueva CA.

/usr/share/ssl/misc/CA -newca

Y al crear la autoridad certificadora, procedemos a crear la clave pública siguiendo el procedimiento predefinido por el script:

CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
....++++++
.........................++++++
writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----

Después vamos a introducir la información de nuestra empresa, necesario para la configuración de la autoridad certificadora con OpenSSL:

You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank 
For some fields there will be a default value, If you enter '.', the field will be left blank. 
-----
Country Name (2 letter code) [MX]:MX 
State or Province Name (full name) [Mexico]:Mexico Locality Name (eg, city) [Mexico]:Mexico
Organization Name (eg, company) [My Company Ltd]:dominio.com Organizational Unit Name (eg, section) []: 
Common Name (eg, your name or your server's hostname) []:dominio 
E-mail Address []:[email protected] 

El script de CA crea un directorio llamado demoCA. Cambie este directorio por algo más explicativo, por ejemplo hostnameCA, reemplazando el nombre de host con el nombre del host en el que está creando la CA.

mv demoCA miCA

Ahora necesita crear un archivo .cnf SSL para su nueva CA. Copie el ejemplo, que es usualmente es /usr/share/ssl/openssl.cnf a un nuevo archivo.

cp /usr/share/ssl/openssl.cnf /etc/ssl/certs/miCA/openssl.cnf

Y reemplazamos las rutas, de

dir = ./demoCA

hacia la localización del directorio del certificado de la Autoridad Certificadora

dir = /etc/ssl/certs/puppyCA

También dentro de su nuevo directorio miCA estará el archivo de certificado de la CA, en este caso llamado cacert.pem. Este archivo es importante y hay que copiarlo en /etc/ssl/certs. Deberá definir el archivo de certificado de la CA para la mayoría de las aplicaciones para las que desea habilitar TLS, por lo que este es un buen lugar para colocarlo.

También deberá crear un hash del archivo de certificado de la CA en su directorio de certs. OpenSSL utiliza un hash para formar un índice de certificados en un directorio y le permite buscar certificados. A continuación te mostramos cómo crear el hash, reemplazando el nombre de archivo cacert.pem con el nombre de su archivo de certificado de la autoridad certificadora.

Obtener hash del archivo CA

Se obtiene desde el archivo obtenido en la sección anterior, con el siguiente comando:

ln -s cacert.pem `openssl x509 -noout -hash < cacert.pem`.0

Después de crear su nueva autoridad certificadora, puede comenzar a crear y firmar sus propios certificados. Para crear su primer certificado, debe crear una solicitud de certificado que luego será firmada por la nueva CA. No creará un certificado que no esté encriptado y será válido por un año o por el tiempo especificado.

Creación de la solicitud de certificado SSL

Para crear la solicitud del certificado SSL con OpenSSL, utilizamos el archivo de configuración, así como el hash a través del siguiente comando:

openssl req -config /etc/ssl/certs/miCA/openssl.cnf -new -keyout dominio.com.key.pem -out dominio.com.csr

Y llenará la información solicitada:

Generating a 1024 bit RSA private key
 ………..++++++
.........++++++
writing new private key to 'puppy.yourdomain.com.key.pem' Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank 
For some fields there will be a default value, If you enter '.', the field will be left blank. 
-----
Country Name (2 letter code) [MX]: 
State or Province Name (full name) [Mexico]: Locality Name (eg, city) [Mexico]:
Organization Name (eg, company) [dominio.com]: Organizational Unit Name (eg, section) []: 
Common Name (eg, your name or your server's hostname) []:dominio.com 
Email Address []:dominio.com 
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []: 

Con lo anterior se crearná dos archivos, dominio.com.key.pem y dominio.com.csr. Estos archivos constan de un archivo de clave para su sistema y una solicitud de certificado para su sistema. Con estos archivos, ahora la etapa final de la creación de su certificado es firmar la solicitud de certificado con su nueva CA.

En el caso de que haya utilizado una CA comercial, este es el punto en el que debe enviar la solicitud de certificado de dominio.com.csr a la CA comercial para su firma.

Como estamos utilizando nuestra propia autoridad certificadora, ahora procederemos a firmar el certificado creado en OpenSSL.

Firmado de la solicitud de certificado con OpenSSL

Finalmente hemos llegado al punto culminante: El firmado de nuestro certificado SSL de parte de nuestra autoridad certificadora. Para hacerlo, simplemente ejecutamos este comando:

openssl ca -config /etc/ssl/certs/miCA/openssl.cnf -policy policy_anything -out dominio.com.cert.pem -infiles dominio.com.csr

Allí se genera el certificado. Primero valida la passphrase y si es correcta OpenSSL solicita la autorización de generación del certificado SSL

Using configuration from /etc/ssl/certs/miCA/openssl.cnf
Enter pass phrase for /etc/ssl/certs/miCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
...
Certificate is to be certified until Sep 14 12:05:10 2010 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Con ello se genera nuestro certificado final: dominio.com.cert.pem, el cual se puede utilizar directamente para el servicio asociado con dominio.com, o bien para el sitio web.

Conclusiones – OpenSSL

Con la creación de un certificado SSL, podrás proteger tu sitio web. Tiene muchas ventajas el uso del protocolo https, que el texto plano http.

Al incorporar tu certificado SSL, sea a través de IIS, Apache, Nginx u otra tecnología para tu servidor web, ten en cuenta que el puerto asociado a https es 443, y no el puerto 80 para texto plano.

Finalmente, como OpenSSL es una solución Open Source, la podrás utilizar de forma abierta, también para múltiples aplicaciones.