OpenSSL
Let's Encrypt
¿Qué es OpenSSL?
El acrónimo de OpenSSL se deriva del término en inglés Open Source Secure Sockets Layer. Es un software de código abierto ampliamente utilizado para proporcionar seguridad a las comunicaciones sobre Internet. Ofrece una variedad de herramientas y protocolos criptográficos, incluyendo SSL/TLS, que se utilizan comúnmente para proteger conexiones HTTPS.
Personalmente compilo los binarios OpenSSL ya que sus librerías son necesarias en la pila de software open source, por ejemplo, para obtener los binarios Windows de PHP y PostgreSQL, hay que enlazar las librerías de OpenSSL con estas aplicaciones para que puedan crear conexiones seguras.
¿Qué es Let's Encrypt?
Let's Encrypt es una organización sin fines de lucro que proporciona certificados SSL/TLS gratuitos para facilitar la implementación de comunicaciones seguras en Internet. Su objetivo principal es promover el uso generalizado de HTTPS, lo cual es crucial para garantizar la privacidad y seguridad en línea. Los certificados emitidos por Let's Encrypt son compatibles con la mayoría de los navegadores web actuales, haciendo que sea más fácil implementar HTTPS en sitios web, servicios web y aplicaciones móviles.
¿Qué es Criptografía?
La criptografía es un conjunto de técnicas y procedimientos que se utilizan para proteger la información confidencial de ser leída o modificada por personas no autorizadas. Se utilizan métodos matemáticos y algoritmos avanzados para cifrar datos, archivos, mensajes, garantizando así su seguridad en un entorno digital.
¿Qué es un CSR?
El acrónimo de CSR se deriva del término en inglés «Certificate Signing Request», una posible traducción al español sería: Solicitud de Firma de Certificado.
Podemos decir que un CSR, no es más que un bloque de texto cifrado, este bloque de texto contiene información sobre el solicitante y la clave pública que se incluirá en el certificado.
¿Porqué necesito un CSR?
La necesidad de un CSR surge porque las autoridades de certificación, como Let's Encrypt u otras CA, requieren cierta información básica sobre el titular (propietario del dominio) para poder otorgar un certificado SSL/TLS válido. Esta información puede incluir datos como el nombre de la entidad, su dirección postal y la duración deseada del certificado.
Al enviar una solicitud de CSR con esta información, el solicitante está asegurando que es el legítimo propietario del dominio y permite a Let's Encrypt generar un certificado seguro para proteger las comunicaciones en línea. Sin embargo, no solo se trata de proporcionar la información requerida; también es importante cifrar adecuadamente el CSR para evitar que sea accesible por terceros no autorizados.
¿Porqué Necesito un Certificado para mi Dominio?
Tomemos en consideración la comunicación entre el navegador y el servidor de su red social. La mecánica es la siguiente: en un principio, el servidor transmitirá al cliente, en este caso el navegador, el certificado firmado por Let's Encrypt.
Posteriormente, el navegador verificará si la firma de Let's Encrypt es legítima. Si la firma es legítima, entonces el navegador generará una clave de sesión utilizando criptografía simétrica, esto es así, debido a que computacionalmente es mucho más eficiente la criptografía simétrica.
El servidor entonces descifrará la clave de sesión creada por el navegador utilizando su clave privada, a partir de ese momento ambas partes tendrán la misma clave para cifrar y descifrar información, podrán entonces, mantener transferencias de información cifrada entre ambos.
Ejecutando OpenSSL
Ahora que hemos respondido algunas preguntas relacionadas con la temática, realizaremos algunas acciones para generar como objetivo final un archivo CSR utilizando los binarios para Windows de OpenSSL.
El archivo CSR que generáremos, será perfectamente válido para obtener un certificado de dominio otorgado por Let's Encrypt, aunque claramente, usaremos un nombre de dominio ficticio como ejemplo.
Deberá descargar los binarios para Windows de OpenSSL versión 3.3.1 desde el siguiente enlace.
Recordar leer la información mostrada en la sección de descargas para comprobar el correcto funcionamiento del binario «openssl.exe» antes de continuar.
Si luego de haber ejecutado en la consola de Windows el comando .\openssl --version o .\openssl.exe --version se muestra las versión de OpenSSL, todo está funcionando de mil maravillas.
Si no funcionó, revisar que la consola muestre el camino completo donde se descomprimieron los binarios de OpenSSL, ese camino deberá terminar en «../bin>».
Generar Clave Privada
Generáremos entonces una clave privada, las claves privadas en criptografía pueden tener una cantidad de bits variable, cuanto más bits contenga una clave privada más segura será, pero la consecuencia negativa es que computacionalmente es más costosa su utilización.
Ahora hay que ejecutar el comando que se muestra debajo. Utilizaremos un dominio ficticio llamado abcd.com. El parámetro genrsa indica a openssl que queremos utilizar al algoritmo RSA para crear nuestra clave. Como se puede apreciar, indicamos que la clave deberá tener 4096 bits.
Aquí el archivo de clave privada estará dentro del directorio donde se localiza el ejecutable «openssl.exe» y tendrá el nombre «abcd.com.key». Opcionalmente puede indicar una ruta para almacenar este archivo en otro lugar, por ejemplo, c:\keys\abcd.com.key, deberá utilizar esta ruta en comandos posteriores para utilizar la clave privada.
Generar Clave Pública
Una vez que ya tenemos la clave privada generada utilizaremos esta clave para generar la clave pública. Esta clave será enviada en el CSR junto con otros datos a una CA como Let's Encrypt, para que otorgue el certificado de dominio.
Generar el Archivo CSR
Esta es la última parte del proceso. El parámetro req -new indica a OpenSSL que queremos generar el archivo CSR, como se puede apreciar, se utiliza la clave privada para generar la solicitud de firma de certificado.
Como se ha mencionado anteriormente, la clave pública será incluida dentro del archivo CSR, pero además necesario completar un pequeño formulario con datos necesarios para que una CA (Certificate Authority) pueda generar el certificado de dominio.
El pequeño formulario interactivo que se deberá completar para terminar de generar el archivo CSR se muestra debajo, junto con los posibles datos ficticios. Siempre deberá utilizar información real y verificable cuando se pretenda obtener un certificado para un dominio.
State or Province Name: My State
Locality Name []: My Locality
Organization Name: ABCD Company
Organizational Unit Name []: Web Services
Common Name FQDN []:abcd.com
Email Address []: info@abcd.com
Cuando se muestre [] significa que los datos que se exigen son opcionales, puede omitir el ingreso presionando Intro.
En aras de la claridad y simplicidad se ha eliminado texto de formulario que es mostrado por OpenSSL. De todos modos es muy similar al que muestra en la consola cuando genere el CSR.
Últimas Palabras
Aquí nos detenemos. Hacia delante las cosas son más laboriosas, en el sentido que es necesario tener un dominio comprado y tener infraestructura de servidor para hacer funcionar toda la pila web.
Primero es necesario comprar un dominio, luego disponer de un servidor que pueda responder a peticiones externas, paso siguiente apuntar con el registro DNS al servidor. Después si es momento de utilizar el CSR con Let's Encrypt para que otorgue un certificado para el dominio.
De todos modos, seguramente, habrá podido comprender y apreciar las sinergias que existen entre OpenSSL y el acceso a servicios en línea, siempre será un certificado digital el que hace posible la comunicación segura. Ahora usted sabe cómo generar un CSR, que es el primer paso, aunque no por eso es menos importante.
Bytes Friends - © 2010-2024