Guía del kit de herramientas dockerizadas PQC

Esta guía está diseñada para el kit de herramientas dockerizadas de PQC. Para obtener instrucciones sobre cómo configurar el kit de herramientas PQC de DigiCert, consulte la Guía de configuración del kit de herramientas de PQC.

Introducción

El kit de herramientas dockerizadas criptográfico poscuántico (PQC) de DigiCert tiene todo lo necesario para configurar de manera rápida un entorno Docker en el que puede crear un certificado TLS híbrido. Este certificado híbrido usa un algoritmo criptográfico poscuántico junto con un algoritmo criptográfico clásico, lo que le permitirá probar la viabilidad de implementar certificados TLS híbridos poscuánticos, al mismo tiempo que también mantiene una compatibilidad con versiones anteriores.

Esta guía lo guiará en el uso del kit de herramientas dockerizadas PQC de DigiCert para lo siguiente.

  • Iniciar el contenedor Docker usando docker-compose.
  • Ingresar al contenedor PQC ejecutado.
  • Ejecutar los comandos de demostración incluidos para probar los certificados PQC de ejemplo.
  • Generar claves criptográficas poscuánticas.
  • Cree una cadena completa de certificados híbrida, incluidos los certificados raíz, intermedio y de servidor.
  • Pruebe los certificados usando las utilidades s_server y s_client de OpenSSL.

El kit de herramientas dockerizadas PQC de DigiCert está disponible para su descarga para todos los clientes Secure Site Pro. Conozca más sobre qué se incluye con cada certificado Secure Site Pro.

Contenido del kit de herramientas dockerizadas PQC

El kit de herramientas dockerizadas PQC de DigiCert tiene estos archivos:

  • Archivo Docker
  • docker-compose.yml
  • OpenSSL compilado corregido con el conector ISARA Catalyst OpenSSL
  • Certificados de demostración y archivos de configuración
  • Comandos bash para probar la creación y la funcionalidad de los certificados

Requisitos previos

Antes de usar esta guía, vele por satisfacer estos requisitos previos:

Controlar su versión de Docker

Antes de descargar el kit de herramientas dockerizadas PQC, confirme que el Motor Docker y Docker Compose estén instalados en su sistema.

Si no reconoce estos comandos, Docker no está instalado en su sistema. Consulte Requisitos previos para obtener información sobre la instalación de Docker en su sistema.

Linux/macOS

Abra una ventana terminal y ejecute docker --version y docker-compose --version. Esto debería devolver un resultado parecido al que se muestra debajo.

bash
$ docker --version
Docker version 18.03.0-ce, build 0520e24

$ docker-compose --version
docker-compose version 1.20.1, build 5d8c71b

Windows

Abra una ventana del Símbolo del sistema o de PowerShell y ejecute docker --version. Esto debería devolver un resultado parecido al que se muestra debajo.

powershell
> docker --version
Docker version 18.03.0-ce, build 0520e24

Descargar y extraer el kit de herramientas dockerizadas PQC

  1. Inicie sesión en su cuenta de CertCentral.
  2. En el menú lateral, haga clic en Certificados > Pedidos.
  3. En la página Pedidos, localice su pedido de certificado Secure Site pro y haga clic en su número de pedido.
  4. En la página de detalles del pedido de certificados, haga clic en Kit de herramientas de PQC.
  5. En la página criptografía poscuántica (PQC), haga clic en Descargar los archivos de compatibilidad de Docker y guarde el archivo .zip.
  6. Localice el archivo .zip guardado (DigiCert-PQC.zip) y descomprímalo.

Construir y ejecutar un contenedor de kit de herramientas de PQC

Una vez que haya descargado y descomprimido el kit de herramientas dockerizadas PQC, está listo para construir el contenedor usando docker-compose.

Abra una ventana terminal y navegue hasta el directorio descomprimido digicert-pqc-docker.

bash
cd [path/to/dir/]digicert-pqc-docker

Luego construya el contenedor del kit de herramientas de PQC. Esto descarga todas las dependencias de imágenes y configura el entorno del contenedor.

Si esta es la primera vez que ejecuta el comando, podría tener que esperar a que la imagen Ubuntu que se requiere se descargue de Docker Hub.

bash
docker-compose build

Ya está listo para iniciar el contenedor del kit de herramientas de PQC en modo separado.

bash
docker-compose up -d
Starting digicert-pqc-docker_pqc_1 ... done

¡Felicitaciones! El contenedor del kit de herramientas dockerizadas de PQC está instalado y funcionando.

Para acceder al entorno del contenedor y comenzar a experimentar con él, consulte Ingresar en el contenedor.

Ingresar en el contenedor

Para experimentar con los comandos de demostración que se incluyen y con la aplicación OpenSSL modificada, en primer lugar, debe ingresar en el entorno del contenedor.

Use docker-compose exec para iniciar una sesión bash dentro del contenedor que se está ejecutando.

bash
docker-compose exec pqc /bin/bash

Árbol del directorio

Cuando ingrese por primera vez en el contenedor, estará en el directorio /app. Este directorio alberga la totalidad del kit de herramientas de PQC y de los recursos complementarios. En el siguiente cuadro se describen los subdirectorios y los archivos importantes que están ubicados en el directorio /app.

Directorio/archivo Descripción
digicert-pqc/ Directorio de kit de herramientas primario.
 certs/ Directorio para almacenar los certificados que se generan.
 connector/ Recursos de conector OpenSSL catalizador ISARA.
 demo/ Dominios y recursos de demostración.
  certs/ Directorio para almacenar los certificados de demostración que se generen.
  configs/ Tiene archivos de configuración de certificados que se usan cuando se generan certificados de demostración.
   demo.html Archivo HTML que se puede usar por medio del comando run_server.sh cuando se ejecuta en el modo servidor web.
   cert_gen_demo.sh Genera y prueba una cadena de certificado segura cuántica completa usando los archivos de configuración que se ubiquen en /app/digicert-pqc/demo/configs.
Consulte Generar certificados de demostración.
   run_client.sh Se conecta a un s_server que se está ejecutando mediante la utilidad s_client de OpenSSL para probar la funcionalidad de los certificados.
Consulte Modo básico: Conectarse mediante el comando run_client.sh.
   run_server.sh Inicia un servidor web básico mediante la utilidad s_server de OpenSSL y carga los certificados que se ubiquen en /app/digicert-pqc/demo/certs.
Consulte Iniciar un servidor de demostración.
 pqpki-openssl-1.0.2r/ OpenSSL compilado versión 1.0.2r modificado mediante la revisión conector OpenSSL ISARA.
resources/ Archivos de recursos del kit de herramientas de PQC adicionales.

Generar certificados de demostración

Para personalizar cualesquiera de los valores del campo certificados, modifique los archivos de configuración del certificado (ubicados en /app/digicert-pqc/demo/configs).

Para generar una cadena de certificados segura cuántica completa, use el comando cert_gen_demo.sh (ubicado en /app/digicert-pqc/demo). Cuando lo ejecute, sucederá lo siguiente:

  • Se borrarán todos los archivos del directorio /app/digicert-pqc/demo/certs.
  • Se generará una cadena de certificados segura cuántica completa (incluidos los certificados raíz, intermedio y de servidor). Los archivos se guardarán en /app/digicert-pqc/demo/certs.
  • La cadena de certificados se verifica mediante la criptografía de legado.
  • La cadena de certificados se verifica mediante la criptografía segura cuántica.

Antes de generar certificados de demostración, vele por estar en el directorio /app/digicert-pqc/demo.

Luego ejecute el comando.

bash
cd /app/digicert-pqc/demo
./cert_gen_demo.sh

Verá este resultado:

bash
engine "IQREngine" set.
XMSS key pair has been generated:
engine "IQREngine" set.
DILITHIUM key pair has been generated:
engine "IQREngine" set.
RAINBOW key pair has been generated:
engine "IQREngine" set.
engine "IQREngine" set.
engine "IQREngine" set.
Generating a EC private key
writing new private key to '/app/digicert-pqc/demo/certs/ecdsa_without_xmss_catalyst_mixed_chain_root_private_key.pem'
-----
Signature ok
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
Getting Private key
engine "IQREngine" set.
Successfully created XMSS signature
Generating a EC private key
writing new private key to '/app/digicert-pqc/demo/certs/ecdsa_without_dilithium_catalyst_mixed_chain_intermediate_private_key.pem'
-----
engine "IQREngine" set.
Signature ok
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
Getting CA Private Key
engine "IQREngine" set.
Successfully created XMSS signature
Generating a EC private key
writing new private key to '/app/digicert-pqc/demo/certs/ecdsa_without_rainbow_catalyst_mixed_chain_private_key.pem'
-----
engine "IQREngine" set.
Signature ok
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=digicert.pqc
Getting CA Private Key
engine "IQREngine" set.
engine "IQREngine" set.
/app/digicert-pqc/demo/certs/rainbow_ecdsa_x509_catalyst_mixed_chain_server_certificate.pem: OK
engine "IQREngine" set.
2 : ok : /C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
1 : ok : /C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
0 : ok : /C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=digicert.pqc
Success!!

Iniciar un servidor de demostración

Para probar los certificados de demostración que se generaron, ejecute el comando run_server.sh. Puede ejecutar este comando en uno de dos modos: básico o HTTP.

  • Para el modo básico, omita el argumento http opcional.
  • Para el modo HTTP, incluya el argumento http opcional.
Modo Comando Descripción
Básico ./run_server.sh Inicia un s_server OpenSSL que acepta conexiones mediante la utilidad s_client OpenSSL.
HTTP ./run_server.sh http Inicia un s_server OpenSSL que acepta conexiones HTTPS en el puerto 443.

Para detener un s_server que se está ejecutando,, en la ventana terminal que está ejecutando el servidor, presione CTRL+C.

Iniciar un servidor en modo básico

Antes de iniciar un servidor de demostración en modo básico, compruebe que está en el directorio /app/digicert-pqc/demo y que ha creado los certificados de demostración.

Luego ejecute el comando.

bash
./run_server.sh

Verá este resultado:

bash
engine "IQREngine" set.
Using default temp DH parameters
ACCEPT

Ahora la utilidad s_server se está ejecutando en modo básico y puede aceptar conexiones a través de s_client. Para conectarse a un servidor de demostración que se está ejecutando, consulte Modo básico: Conectarse mediante el comando run_client.sh.

Iniciar un servidor en modo HTTP

Antes de iniciar un servidor de demostración en modo HTTP, compruebe que está en el directorio /app/digicert-pqc/demo y que ha creado los certificados de demostración.

Luego ejecute el comando e incluya el argumento http.

bash
./run_server.sh http

Verá este resultado:

bash
engine "IQREngine" set.
Using default temp DH parameters
ACCEPT

Ahora la utilidad s_server se está ejecutando en modo HTTP y puede aceptar conexiones a través de HTTPS en el puerto 443. Para conectarse a un servidor de demostración que se está ejecutando, consulte Conectarse mediante cURL.

Conectarse a un servidor de demostración que se está ejecutando

Luego de ejecutar el comando run_server.sh para iniciar un servidor de demostración, estará listo para conectarse a él y probar la cadena de certificados de demostración.

La forma en la cual se conecta al servidor de demostración que se está ejecutando depende del modo que usó para iniciar el servidor.

Modo básico: Conectarse mediante el comando run_client.sh

El comando run_client.sh usa la utilidad s_client OpenSSL para conectarse a un s_server que se está ejecutando. Antes de ejecutar este comando, compruebe que inició un s_server ejecutando el comando run_server.sh en modo básico. Consulte Iniciar un servidor en modo básico.

Con un s_server que se está ejecutando en modo básico en una de sus ventanas terminales, abra una nueva ventana terminal. En la nueva ventana, inicie otra sesión bash con docker-compose exec.

bash
cd [path/to/dir/]digicert-pqc-docker
docker-compose exec pqc /bin/bash

Navegue hasta el directorio de demostración y ejecute el comando run_client.sh.

bash
cd /app/digicert-pqc/demo
./run_client.sh

Verá este resultado:

bash
engine "IQREngine" set.
CONNECTED(00000003)
depth=1 C = US, ST = Utah, L = Lehi, O = "DigiCert, Inc.", OU = DigiCert PQC, CN = DigiCert PQC Root
verify return:1
depth=0 C = US, ST = Utah, L = Lehi, O = "DigiCert, Inc.", OU = DigiCert PQC, CN = DigiCert PQC Test Intermediate CA
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
   i:/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
issuer=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 9868 bytes and written 2331 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-NHDH-DILM-AES256-GCM-SHA384
Server public key is 521 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-NHDH-DILM-AES256-GCM-SHA384
    Session-ID: {{Session-ID}}
    Session-ID-ctx: 
    Master-Key: {{Master-Key}}
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    [...]


    Start Time: 1563994600
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

Y en su otra ventana terminal con el s_server activo que se está ejecutando, verá este resultado:

bash
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 01 00 96                                    .....
read from 0x5581e0750b80 [0x5581e07656f8] (150 bytes => 150 (0x96))
0000 - 01 00 00 92 03 03 d9 c0-5a 73 35 d0 4e f2 31 f6   ........Zs5.N.1.
[...]
write to 0x5581e0750b80 [0x5581e076e100] (71 bytes => 71 (0x47))
0000 - 16 03 03 00 42 02 00 00-3e 03 03 c2 3b df 2f 01   ....B...>...;./.
[...]
write to 0x5581e0750b80 [0x5581e0769c43] (4953 bytes => 4953 (0x1359))
0000 - 16 03 03 13 54 0b 00 13-50 00 13 4d 00 13 4a 30   ....T...P..M..J0
[...]
write to 0x5581e0750b80 [0x5581e0769c43] (4609 bytes => 4609 (0x1201))
0000 - 16 03 03 11 fc 0c 00 11-f8 03 00 17 41 04 0d 97   ............A...
[...]
write to 0x5581e0750b80 [0x5581e076e100] (9 bytes => 9 (0x9))
0000 - 16 03 03 00 04 0e 00 00-00                        .........
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 03 08 48                                    ....H
read from 0x5581e0750b80 [0x5581e07656f8] (2120 bytes => 2120 (0x848))
0000 - 10 00 08 44 41 04 29 0a-07 84 0c f3 a4 e4 3e d1   ...DA.).......>.
[...]
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 14 03 03 00 01                                    .....
read from 0x5581e0750b80 [0x5581e07656f8] (1 bytes => 1 (0x1))
0000 - 01                                                .
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 03 00 28                                    ....(
read from 0x5581e0750b80 [0x5581e07656f8] (40 bytes => 40 (0x28))
0000 - e1 d7 30 8b 12 ef d1 dc-31 90 97 d0 0e 54 9c aa   ..0.....1....T..
[...]
write to 0x5581e0750b80 [0x5581e076e100] (175 bytes => 175 (0xAF))
0000 - 16 03 03 00 aa 04 00 00-a6 00 00 1c 20 00 a0 02   ............ ...
[...]
write to 0x5581e0750b80 [0x5581e076e100] (6 bytes => 6 (0x6))
0000 - 14 03 03 00 01 01                                 ......
write to 0x5581e0750b80 [0x5581e076e100] (45 bytes => 45 (0x2D))
0000 - 16 03 03 00 28 d0 99 97-94 6d a1 5c f8 b0 c0 65   ....(....m.\...e
[...]
-----BEGIN SSL SESSION PARAMETERS-----
[...]
-----END SSL SESSION PARAMETERS-----
Shared ciphers:ECDHE-NHDH-DILM-AES256-GCM-SHA384:ECDHE-NHDH-SIDH-DILM-AES256-GCM-SHA384
Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1:HSS+SHA512:XMSS+SHA512:XMSSmt+SHA512:DILITHIUM+SHA512:DILITHIUM+SHA512:0xE0+SHA512
Shared Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1:HSS+SHA512:DILITHIUM+SHA512:DILITHIUM+SHA512
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Supported Elliptic Curves: P-256:P-521:brainpoolP512r1:brainpoolP384r1:P-384:brainpoolP256r1:secp256k1:B-571:K-571:K-409:B-409:K-283:B-283:0xFE01
Shared Elliptic curves: P-256:P-521:brainpoolP512r1:brainpoolP384r1:P-384:brainpoolP256r1:secp256k1:B-571:K-571:K-409:B-409:K-283:B-283:UNDEF
CIPHER is ECDHE-NHDH-DILM-AES256-GCM-SHA384
Secure Renegotiation IS supported

Modo HTTP: Conectarse usando cURL

Para usar cURL par aconectarse a un s_server que se está ejecutando,, compruebe que inició un s_server en modo HTTP. Consulte Iniciar un servidor en modo HTTP.

Con un servidor de demostración activo que se está ejecutando en modo HTTP en una de sus ventanas terminales, lo primero que debe hacer es abrir una nueva ventana terminal. En la nueva ventana, inicie otra sesión bash con docker-compose exec.

bash
cd [path/to/dir/]digicert-pqc-docker
docker-compose exec pqc /bin/bash

Ahora conéctese al servidor que se está ejecutando mediante cURL. Los certificados de demostración que generó tienen firma automática y generarán una advertencia de certificado no fiable. Para hacer caso omiso de estas advertencias, deberá incluir el interruptor -k.

bash
curl -k https://digicert.pqc/demo.html

Verá este resultado:

bash
<html>
<head></head>
<body>
  <h1>Hello world! PQC FUTURE IS HERE!</h1>
</body>
</html>

Y en su otra ventana terminal con el s_server activo que se está ejecutando, verá este resultado:

bash
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 16 03 01 02 00                                    .....
read from 0x556d44ced1e0 [0x556d44cf61a8] (512 bytes => 512 (0x200))
0000 - 01 00 01 fc 03 03 a3 d2-a7 5e 12 44 88 93 78 fd   .........^.D..x.
[...]
write to 0x556d44ced1e0 [0x556d44d05120] (94 bytes => 94 (0x5E))
0000 - 16 03 03 00 59 02 00 00-55 03 03 36 a7 a4 2d 57   ....Y...U..6..-W
[...]
write to 0x556d44ced1e0 [0x556d44cffc53] (4954 bytes => 4954 (0x135A))
0000 - 16 03 03 13 55 0b 00 13-51 00 13 4e 00 13 4b 30   ....U...Q..N..K0
[...]
write to 0x556d44ced1e0 [0x556d44d05120] (220 bytes => 220 (0xDC))
0000 - 16 03 03 00 d7 0c 00 00-d3 03 00 17 41 04 5a 06   ............A.Z.
[...]
write to 0x556d44ced1e0 [0x556d44d05120] (9 bytes => 9 (0x9))
0000 - 16 03 03 00 04 0e 00 00-00                        .........
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 16 03 03 00 46                                    ....F
read from 0x556d44ced1e0 [0x556d44cf61a8] (70 bytes => 70 (0x46))
0000 - 10 00 00 42 41 04 c3 ce-7a a8 53 76 28 fc 55 c5   ...BA...z.Sv(.U.
[...]
0040 - 6b c7 1a 5e f5 0e                                 k..^..
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 14 03 03 00 01                                    .....
read from 0x556d44ced1e0 [0x556d44cf61a8] (1 bytes => 1 (0x1))
0000 - 01                                                .
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 16 03 03 00 28                                    ....(
read from 0x556d44ced1e0 [0x556d44cf61a8] (40 bytes => 40 (0x28))
0000 - 77 07 27 75 71 54 a9 bc-89 2f 69 df 45 6a 6c d8   w.'uqT.../i.Ejl.
[...]
write to 0x556d44ced1e0 [0x556d44d05120] (6 bytes => 6 (0x6))
0000 - 14 03 03 00 01 01                                 ......
write to 0x556d44ced1e0 [0x556d44d05120] (45 bytes => 45 (0x2D))
0000 - 16 03 03 00 28 78 f8 92-c1 cd d0 73 6b 72 6e 4c   ....(x.....skrnL
[...]
read from 0x556d44ced1e0 [0x556d44cf61a3] (5 bytes => 5 (0x5))
0000 - 17 03 03 00 6d                                    ....m
read from 0x556d44ced1e0 [0x556d44cf61a8] (109 bytes => 109 (0x6D))
0000 - 77 07 27 75 71 54 a9 bd-0c 8f e3 9c f3 90 35 a1   w.'uqT........5.
[...]
FILE:demo.html
write to 0x556d44ced1e0 [0x556d44cffc53] (117 bytes => 117 (0x75))
0000 - 17 03 03 00 70 78 f8 92-c1 cd d0 73 6c 14 de 14   ....px.....sl...
[...]
ACCEPT

¡Felicitaciones! Ha logrado configurar y probar su entorno de kit de herramientas dockerizadas de PQC. Siéntase libre de experimentar con la creación de certificados y el establecimiento de conexiones seguras cuánticas.