Generar certificados SSL para Windows y Android

Qué es un certificado SSL y cómo generarlo y usarlo para el desarrollo local, incluidas las pruebas en dispositivos móviles, analiza el desarrollador web senior.

Un poco de teoría

Un certificado SSL es un certificado digital que le permite asegurarse de que el servidor que transmitió los datos al cliente no está falsificado y que fue el servidor el que transmitió los datos.

Un certificado consta de una clave privada que se mantiene en secreto y que cifra los datos por el servidor, y el propio certificado de clave pública, que el cliente utiliza para descifrar los datos. Sin una clave privada, no es posible cifrar los datos para que el cliente los descifre con la misma clave pública. La información principal en el certificado es a quién se emitió, es decir, el nombre de dominio.

Además, la información sobre el emisor (certificado) con el que se firmó el certificado de servidor se puede codificar en el certificado. Esta información tiene una firma de control que solo puede ser generada por el titular de la clave privada del certificado del emisor. Por lo tanto, solo el editor puede firmar y generar un certificado válido.

El cliente considera que la conexión es segura si, al verificar la cadena de certificados, llega a las autoridades de certificación de confianza raíz integradas en el sistema o navegador, que a su vez están auto firmadas.

Te puede interesar:

Binance, comprará uno de sus principales competidores: FTX.

¿Para qué sirve?

Solicitudes que requieren un certificado válido para el desarrollo local:

  • Aplicaciones PWA,
  • Aplicaciones que utilizan WebRTC.

Hay dos maneras de realizar esta tarea:

  1. Generar un certificado auto firmado y agregarlo a la lista de entidades de certificación raíz de confianza; Por lo tanto, el dispositivo lo considerará válido. Como su nombre indica, es un certificado que está firmado por la clave privada de sí mismo.
  2. Genere un certificado raíz y agréguelo a la lista de entidades de certificación raíz de confianza, luego genere un certificado de servidor y fírmelo con el certificado raíz creado anteriormente.

Preparación

Vamos a necesitar OpenSSL. Instaladores binarios para Windows.

El archivo de configuración openssl.cfg

[ req_distinguished_name ]
countryName         = CO
stateOrProvinceName = ST
localityName        = ST
organizationName    = O

####################################################################
# Extensions for when we sign normal certs (specified as default)
[ usr_cert ]
basicConstraints = CA:false
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = email:move

####################################################################
# Same as above, but cert req already has SubjectAltName
[ usr_cert_has_san ]
basicConstraints = CA:false
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer

####################################################################
# Extensions to use when signing a CA
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
basicConstraints = CA:true
subjectAltName=email:move

####################################################################
# Same as above, but CA req already has SubjectAltName
[ v3_ca_has_san ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
basicConstraints = CA:true

[ req ]
prompt             = no
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.0 = example.com
DNS.1 = *.example.com

Generar un certificado auto firmado

  1. Generar una clave privada:
mkdir example.com
openssl genrsa -out example.com/example.com.key

Resultado:

Generating RSA private key, 2048 bit long modulus (2 primes)
........................+++++
..........................................................+++++
e is 65537 (0x010001)
  1. Cree una solicitud de certificado:
openssl req -new -key example.com/example.com.key -out
example.com/example.com.csr -config openssl.cfg -subj
"/CN=example.com certificate"
  1. En el archivo de configuración openssl.cfg debe especificar un nombre de dominio o varios nombres en el bloque [alt_names. Anteriormente, solo se admitía un nombre, que se especificaba en el campo CN, pero ahora puede especificar varios nombres, así como crear un certificado comodín para todos los subdominios.
[ alt_names ]
DNS.0 = example.com
DNS.1 = *.example.com
  1. Generar un certificado:
openssl x509 -req -in example.com/example.com.csr -extensions
req_ext -extfile openssl.cfg -signkey
example.com/example.com.key  -out example.com/example.com.crt
-days 1825
  1. Comprueba el resultado:
openssl x509 -in example.com/example.com.crt -text

Resultado:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            0f:63:6b:b8:76:27:71:d1:e9:f3:53:01:11:11:7c:52:d6:c7:ea:c6
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = example.com certificate
        Validity
            Not Before: Sep 27 05:08:48 2022 GMT
            Not After : Sep 26 05:08:48 2027 GMT
        Subject: CN = example.com certificate
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:c9:...:3b:24:
                    26:0f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:example.com, DNS:*.example.com
    Signature Algorithm: sha256WithRSAEncryption
         20:a9:...:fe:fd:
         5f:30:e8:4a
-----BEGIN CERTIFICATE-----
MIIC+zCCAeO…8w6Eo=
-----END CERTIFICATE-----

Ahora tiene el certificado example.com.crt y el archivo de clave example.com. key que puede usar en sus aplicaciones.

Te puede interesar:

Memory allocation in Python: how much and in what cases data types are occupied

Generar certificado raíz + certificado de servidor

  1. Genere una clave privada del certificado raíz:
mkdir ca
openssl genrsa -out ca/ca.key

Resultado:

Generating RSA private key, 2048 bit long modulus (2 primes)
...........................................+++++
...................................+++++
e is 65537 (0x010001)
  1. Crear un certificado:
openssl req -x509 -new -key ca/ca.key -days 1825 -out ca/ca.crt
-extensions v3_ca_has_san -config openssl.cfg -subj "/CN=Root CA
  1. Repita los pasos del 1 al 5 de las instrucciones sobre el certificado autofirmado.

  2. Generar un certificado firmado por nuestro certificado raíz:

openssl x509 -req -in example.com/example.com.csr -CA ca/ca.crt
-CAkey ca/ca.key -CAcreateserial -extensions req_ext -extfile
openssl.cfg -out example.com/example.com.ca.crt -days 1825
  1. Comprueba el resultado:
openssl x509 -in example.com/example.com.ca.crt -text

Resultado:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            27:f4:ec:08:a8:36:b8:38:81:53:d9:8f:b5:fe:91:13:79:f0:9e:dc
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = Root CA
        Validity
            Not Before: Sep 27 05:46:19 2022 GMT
            Not After : Sep 26 05:46:19 2027 GMT
        Subject: CN = example.com certificate
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:c9:...:26:0f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:example.com, DNS:*.example.com
    Signature Algorithm: sha256WithRSAEncryption
         9e:72:...:57:17
-----BEGIN CERTIFICATE-----
MIIC…JXFw==
-----END CERTIFICATE-----

Ahora tiene un certificado de servidor example.com.crt incluido con la clave example.com.key y un certificado raíz ca.crt incluido con la clave ca.key. Si agrega un certificado raíz al almacén de certificados raíz en su sistema o navegador, hará que todos los certificados firmados por él sean válidos.

Agregar un certificado raíz a Windows

El navegador Chrome utiliza el almacén de certificados del sistema:

dfgd

 

¿Cómo registrar un dominio en un dispositivo Android?

Para probar las aplicaciones, debe asegurarse de que su nombre de dominio se resuelva en la dirección local de la computadora. Aquí hay dos soluciones:

  1. Al tener acceso root en el teléfono inteligente, edite el archivo hosts.

  2. Si no hay derechos de root, entonces hay una solución más elegante: use la aplicación Postern. Este es un servidor VPN que se ejecuta en su dispositivo y puede modificar el tráfico, incluida la interceptación de consultas DNS y responder a ellas. A través de él, puede establecer la correspondencia del nombre de dominio example.com la dirección IP de su computadora en la red local donde se ejecuta el webpack-dev-server:

El hecho de que Postern se esté ejecutando se puede entender por el icono de candado en la barra de estado (VPN está habilitado, todas las solicitudes pasan por él).

Después de realizar todas las acciones, puede abrir su aplicación en el navegador:

¡Listo! Ahora no solo sabe en teoría qué es un certificado SSL, sino que también sabe cómo trabajar con él en la práctica.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *