Guida per il toolkit ottimizzato per docker PQC

Questa guida riguarda il toolkit ottimizzato per docker PQC. Per le istruzioni sull’impostazione del toolkit PQC DigiCert, consulta la guida di impostazione del toolkit PQC.

Introduzione

Il toolkit ottimizzato per docker crittografico post-quantum (PQC) di DigiCert contiene tutto ciò che serve per impostare rapidamente un ambiente docker dove puoi creare un certificato TLS ibrido. Questo certificato ibrido utilizza un algoritmo crittografico post-quantum, abbinato ad un algoritmo crittografico classico, che ti consente di testare la possibilità di utilizzare i certificati TLS ibridi post-quantum, mantenendo anche la compatibilità con le versioni precedenti.

Questa guida ti illustra come usare il toolkit ottimizzato per docker PQC DigiCert per:

  • Avviare il contenitore docker usando docker-compose.
  • Inserire il contenitore PQC in esecuzione.
  • Eseguire gli script demo inclusi per testare i certificati PQC di esempio.
  • Generare chiavi crittografiche post-quantum.
  • Creare una catena completa di certificati ibridi, fra cui certificati principali, intermedi e server.
  • Testare i certificati usando le utilità s_server e s_client di OpenSSL.

Il toolkit ottimizzato per docker PQC DigiCert è disponibile per il download per tutti i clienti Secure Site Pro. Scopri ulteriori informazioni su ciò che è incluso con ciascun certificato Secure Site Pro.

Contenuti del toolkit ottimizzato per docker PQC

Il toolkit ottimizzato per docker PQC DigiCert contiene questi file:

  • File docker
  • docker-compose.yml
  • OpenSSL compilato con la patch di ISARA Catalyst OpenSSL Connector
  • Certificati demo e file config
  • Script bash per testare la generazione e la funzionalità dei certificati

Prerequisiti

Prima di usare questa guida, verifica che questi prerequisiti vengano soddisfatti:

Controlla la versione Docker

Prima di scaricare il toolkit ottimizzato per docker PQC, verifica che Docker Engine e Docker Compose siano installati sul sistema.

Se questi comandi non sono riconosciuti, Docker non è installato sul sistema. Consulta Prerequisiti per ulteriori informazioni sull’installazione di Docker sul sistema.

Linux/macOS

Apri la finestra terminale ed esegui docker --version e docker-compose --version. Questa operazione dovrebbe fornire un output simile a quello visualizzato sotto.

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

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

Windows

Apri il prompt dei comandi o la finestra PowerShell ed esegui docker --version. Questa operazione dovrebbe fornire un output simile a quello visualizzato sotto.

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

Scarica ed estrai il toolkit ottimizzato per docker PQC

  1. Accedi al tuo account CertCentral.
  2. Nel menu della barra laterale, fai clic su Certificati > Ordini.
  3. Nella pagina Ordini, individua il tuo ordine di certificato Secure Site Pro e fai clic sul suo numero d’ordine.
  4. Nella pagina dei dettagli dell’ordine certificato, fai clic su Toolkit PQC.
  5. Nella pagina della crittografia post-quantum (PQC), fai clic su Scarica i file di supporto Docker e salva il file zip.
  6. Individua il file zip salvato (DigiCert-PQC.zip) ed estraine il contenuto.

Crea ed esegui il contenitore per il toolkit PQC

Con il toolkit ottimizzato per docker PQC scaricato ed estratto, sei pronto per creare il contenitore usando docker-compose.

Apri la finestra terminale e naviga fino alla directory digicert-pqc-docker estratta.

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

Dopodiché, crea il contenitore del toolkit PQC. Tale operazione scarica tutte le dipendenze delle immagini e configura l’ambiente del contenitore.

Se questa è la prima volta che esegui il comando, potresti dover attendere che l’immagine Ubuntu richiesta venga scaricata da Docker Hub.

bash
docker-compose build

Ora sei pronto per avviare il contenitore del toolkit PQC nella modalità scollegata.

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

Congratulazioni! Il contenitore per il toolkit ottimizzato per docker PQC è attivo e in funzione.

Per accedere all’ambiente del contenitore e iniziare a sperimentare, consulta Entra nel contenitore.

Entra nel contenitore

Per sperimentare gli script demo inclusi e l’app OpenSSL modificata, prima devi entrare nell’ambiente del contenitore.

Usa docker-compose exec per avviare una sessione bash dentro il contenitore in esecuzione.

bash
docker-compose exec pqc /bin/bash

Struttura della directory

Quando entri nel contenitore per la prima volta, ti troverai nella directory /app. Questa directory è la base dell’intero PQC e delle risorse aggiuntive. La seguente tabella descrive le sottodirectory importanti e i file che si trovano nella directory /app.

Directory/File Descrizione
digicert-pqc/ Directory toolkit principale.
 certs/ Directory per memorizzare i certificati generati.
 connector/ Risorse ISARA Catalyst OpenSSL Connector.
 demo/ Script demo e risorse.
  certs/ Directory per memorizzare i certificati demo generati.
  configs/ Contiene i file di configurazione certificato che vengono usati quando si generano i certificati demo.
   demo.html File HTML che può essere servito tramite lo script run_server.sh quando eseguito nella modalità server web.
   cert_gen_demo.sh Genera e testa una catena dei certificati sicura da un punto di vista quantistico completa usando i file config che si trovano in /app/digicert-pqc/demo/configs.
Consulta Genera certificati demo.
   run_client.sh Si collega ad un s_server in esecuzione usando l’utilità s_client di OpenSSL per testare la funzionalità del certificato.
Consulta Modalità base: Collegarsi con lo script run_client.sh.
   run_server.sh Avvia un server web base usando l’utilità s_server di OpenSSL e carica i certificati che si trovano in /app/digicert-pqc/demo/certs.
Consulta Avvia un server demo.
 pqpki-openssl-1.0.2r/ OpenSSL compilato versione 1.0.2r modificata usando la patch ISARA OpenSSL Connector.
risorse/ File aggiuntivi di risorse per toolkit PQC.

Genera certificati demo

Per personalizzare uno qualsiasi dei valori di campo del certificato, modifica i file di configurazione certificato (che si trovano in /app/digicert-pqc/demo/configs).

Per generare una catena dei certificati sicura da un punto di vista quantistico completa, usa lo script cert_gen_demo.sh (che si trova in /app/digicert-pqc/demo). Quando eseguito, ecco cosa succede:

  • Tutti i file nella directory /app/digicert-pqc/demo/certs vengono eliminati.
  • Viene generata una catena completa di certificati sicura da un punto di vista quantistico (fra cui certificati principali, intermedi e server). I file vengono salvati in /app/digicert-pqc/demo/certs.
  • La catena dei certificati viene verificata usando la crittografia precedente.
  • La catena dei certificati viene verificata usando la crittografia sicura da un punto di vista quantistico.

Prima di generare i certificati demo, verifica di essere nella directory /app/digicert-pqc/demo.

Dopodiché, esegui lo script.

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

Vedrai questo output:

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!!

Avvia un server demo

Per testare i certificati demo generati, esegui lo script run_server.sh. Questo script può essere eseguito in due modalità: base o HTTP.

  • Per la modalità base, ometti l’argomento http opzionale.
  • Per la modalità HTTP, includi l’argomento http opzionale.
Modalità Comando Descrizione
base ./run_server.sh Avvia un s_server OpenSSL che accetti le connessioni usando l’utilità s_client OpenSSL.
HTTP ./run_server.sh http Avvia un s_server OpenSSL che accetti le connessioni HTTPS sulla porta 443.

Per arrestare un s_server in esecuzione, nella finestra terminale che esegue il server, premere CTRL+C.

Avvia un server in modalità base

Prima di avviare un server demo in modalità base, verifica di essere nella directory /app/digicert-pqc/demo e di aver generato i certificati demo.

Dopodiché, esegui lo script.

bash
./run_server.sh

Vedrai questo output:

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

Ora, l’utilità s_server viene eseguita in modalità base e può accettare le connessioni tramite s_client. Per collegarsi ad un server demo in esecuzione, consulta Modalità base: Collegarsi con lo script run_client.sh.

Avvia un server in modalità HTTP

Prima di avviare un server demo in modalità HTTP, verifica di essere nella directory /app/digicert-pqc/demo e di aver generato i certificati demo.

Dopodiché, esegui lo script ed includi l’argomento http.

bash
./run_server.sh http

Vedrai questo output:

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

Ora, l’utilità s_server viene eseguita in modalità HTTP e può accettare le connessioni tramite HTTPS nella porta 443. Per collegarsi ad un server demo in esecuzione, consulta Collegati con cURL.

Collegati ad un server demo in esecuzione

Dopo aver eseguito lo script run_server.sh per avviare un server demo, sei pronto per collegarti ad esso e testare la catena dei certificati demo.

Il modo in cui ti colleghi al server demo in esecuzione dipende dalla modalità usata per avviare il server.

Modalità base: Collegati con lo script run_client.sh

Lo script run_client.sh utilizza l’utilità s_client OpenSSL per collegarsi ad un s_server in esecuzione. Prima di eseguire questo script, verifica di avviare un s_server eseguendo lo script run_server.sh in modalità base. Consulta Avvia un server in modalità base.

Con un s_server attivo in esecuzione in modalità base in una delle finestre terminali, apri una nuova finestra terminale. Nella nuova finestra, avvia un’altra sessione bash con docker-compose exec.

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

Naviga fino alla directory demo ed esegui lo script run_client.sh.

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

Vedrai questo output:

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)
---

E nell’altra finestra terminale con s_server attivo in esecuzione, vedrai questo output:

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

Modalità HTTP: Collegati tramite cURL

Per usare cURL per collegarsi ad un s_server in esecuzione, verifica di aver avviato un s_server in modalità HTTP. Consulta Avvia un server in modalità HTTP.

Con un server demo attivo in esecuzione in modalità HTTP in una delle finestre terminali, la prima cosa che devi fare è aprire una nuova finestra terminale. Nella nuova finestra, avvia un’altra sessione bash con docker-compose exec.

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

Ora, collegati al server in esecuzione usando cURL. I certificati demo generati sono autofirmati e attiveranno un’avvertenza di certificato non attendibile. Per ignorare queste avvertenze, devi includere lo switch -k.

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

Vedrai questo output:

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

E nell’altra finestra terminale con s_server attivo in esecuzione, vedrai questo output:

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

Congratulazioni! Hai impostato e testato correttamente il tuo ambiente del toolkit ottimizzato per docker PQC. Prova a sperimentare la creazione di certificati e stabilire le connessioni sicure da un punto di vista quantistico.