Guia do kit de ferramentas dockerizadas PQC

Este guia é para o kit de ferramentas PQC dockerizadas. Para obter instruções sobre como configurar o kit de ferramentas DigiCert PQC, consulte o guia do guia de configuração de kit de ferramentas PQC.

Introdução

O kit de ferramentas dockerizadas de criptografia pós-quantum (PQC) da DigiCert contém tudo necessário para configurar rapidamente um ambiente de docker onde você pode criar um certificado TLS híbrido. Este certificado híbrido usa um algoritmo criptográfico pós-quântico emparelhado com um algoritmo criptográfico clássico, permitindo testar a viabilidade de implantação de certificados TLS híbridos e pós-quânticos enquanto também mantém compatibilidade regressiva.

Este guia lhe orienta para uso do kit de ferramentas PQC dockerizadas da DigiCert para:

  • Inicie o contêiner do Docker usando docker-compose.
  • Digite o contêiner PQC em execução.
  • Execute os scripts de demonstração incluídos para testar exemplos de certificados PQC.
  • Gerar chaves criptográficas pós-quânticas.
  • Criar uma cadeia completa de certificados híbridos, incluindo certificados raiz, intermediários e de servidor.
  • Testar os certificados usando utilitários s_server e s_client do OpenSSL.

O kit de ferramentas dockerizadas DigiCert PQC está disponível para download para todos os clientes do Secure Site Pro. Saiba mais sobre o que foi incluído com cada certificado Secure Site Pro.

Conteúdo do kit de ferramentas dockerizadas PQC

O kit de ferramentas dockerizadas PQC da DigiCert contém estes arquivos:

  • Dockerfile
  • docker-compose.yml
  • OpenSSL compilado atualizado com o ISARA Catalyst OpenSSL Connector
  • Certificados de demonstração e arquivos de configuração
  • Scripts bash para testar a geração e funcionalidade de certificados

Pré-requisitos

Antes de usar este guia, certifique-se de que os pré-requisitos foram cumpridos:

Cheque sua versão Docker

Antes de baixar o kit de ferramentas dockerizadas PQC, verifique se o Docker Engine e o Docker Compose estão instalados no seu sistema.

Se esses comandos não forem reconhecidos, o Docker não estará instalado no seu sistema. Consulte Pré-requisitos para obter informações sobre a instalação do Docker no seu sistema.

Linux/macOS

Abra uma janela do terminal e execute docker --version e docker-compose --version. Isso deve retornar uma saída semelhante como a vista abaixo.

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

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

Windows

Abra uma janela do prompt de comando ou do PowerShell e execute docker --version. Isso deve retornar uma saída semelhante como a vista abaixo.

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

Baixe e extraia o kit de ferramentas dockerizadas PQC

  1. Entre na sua conta da CertCentral.
  2. No menu da barra lateral, clique em Certificados > Pedidos.
  3. Na página Pedidos, localize o seu pedido de certificado Secure Site Pro e clique no seu número de pedido.
  4. Na página de detalhes do pedido do certificado, clique em kit de ferramentas PQC.
  5. Na página Criptografia pós-quantum (PQC), clique em Baixar arquivos de suporte do Docker e salve o arquivo zip.
  6. Localize o arquivo zip salvo (DigiCert-PQC.zip) e extraia seu conteúdo.

Construir e executar o contêiner do kit de ferramentas PQC

Com o kit de ferramentas dockerizadas PQC baixado e extraído, você está pronto para construir o contêiner usando docker-compose.

Abra uma janela do terminal e navegue para o diretório digicert-pqc-docker extraído.

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

Em seguida, construa o contêiner do kit de ferramentas PQC. Isso baixa todas as dependências da imagem e configura o ambiente do contêiner.

Se esta é a primeira vez que você executa o comando, pode ser necessário aguardar o download da imagem necessária Ubuntu no Docker Hub.

bash
docker-compose build

Agora você está pronto para iniciar o contêiner do kit de ferramentas PQC no modo desanexado.

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

Parabéns! O contêiner do kit de ferramentas dockerizadas PQC está funcionando.

Para acessar o ambiente do contêiner e começar a experimentar, consulte Inserir o contêiner.

Insira o contêiner

Para experimentar os scripts de demonstração incluídos e o aplicativo OpenSSL modificado, primeiro é necessário entrar no ambiente do contêiner.

Use docker-compose exec para iniciar uma sessão bash dentro do contêiner em execução.

bash
docker-compose exec pqc /bin/bash

Árvore do diretório

Quando você entra no contêiner pela primeira vez, você estará no diretório / app . Este diretório é o lar de todo o kit de ferramentas PQC e recursos suplementares. A tabela a seguir descreve os subdiretórios e arquivos importantes que estão localizados no diretório /app .

Diretório/Arquivo Descrição
digicert-pqc/ Diretório primário do kit de ferramentas.
 certs/ Diretório para armazenar certificados gerados.
 connector/ Recursos do ISARA Catalyst OpenSSL Connector.
 demo/ Scripts e recursos de demonstração.
  certs/ Diretório para armazenar certificados demo gerados.
  configs/ Contém arquivos de configuração de certificado usados ao gerar certificados de demonstração.
   demo.html Arquivo HTML que pode ser servido através do script run_server.sh quando executado no modo de servidor da web.
   cert_gen_demo.sh Gera e testa uma cadeia completa de certificados de segurança quântica usando arquivos de configuração localizados em /app/digicert-pqc/demo/configs.
Veja Gerar certificados de demonstração.
   run_client.sh Conecta-se ao utilitário s_server usando OpenSSL s_clientpara testar a funcionalidade do certificado.
Veja modo Básico: Conecte usando run_client.sh script.
   run_server.sh Inicia um servidor Web básico usando o utilitário OpenSSL s_server e carrega os certificados localizados em /app/digicert-pqc/demo/certs.
Veja Iniciar um servidor de demonstração.
 pqpki-openssl-1.0.2r/ Versão 1.0.2r compilada do OpenSSL modificada usando o patch ISARA OpenSSL Connector.
recursos/ Arquivos de recursos suplementares do kit de ferramentas PQC.

Gerar certificados de demonstração

Para personalizar qualquer um dos valores de campo do certificado, modifique os arquivos de configuração do certificado (localizados em /app/digicert-pqc/demo/configs).

Para gerar uma cadeia completa de certificados de segurança quântica, use o cert_gen_demo.shscript (localizado em /app/digicert-pqc/demo). Ao executar, isto que acontece:

  • Todos os arquivos no diretório /app/digicert-pqc/demo/certs são excluídos.
  • É gerada uma cadeia completa de certificados de segurança quântica (incluindo certificados raiz, intermediário e servidor). Os arquivos são salvos em /app/digicert-pqc/demo/certs.
  • Cadeia de certificados é verificada usando criptografia antiga.
  • Cadeia de certificados é verificada usando criptografia contra ameaça quântica.

Antes de gerar certificados de demonstração, verifique se você está no diretório /app/digicert-pqc/demo .

Depois, execute o script.

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

Você verá esta saída:

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 um servidor de demonstração

Para testar os certificados de demonstração gerados, execute o run_server.sh script. Este script pode ser executado em um de dois modos: básico ou HTTP.

  • Para o modo básico, omita o argumento http opcional.
  • Para o modo HTTP, inclua o argumento http opcional.
Modo Comando Descrição
básico ./run_server.sh Inicia um OpenSSL s_server que aceita conexões usando o s_client utilitário OpenSSL.
HTTP ./run_server.sh http Inicia um s_server OpenSSL que aceita conexões HTTPS na porta 443.

Para parar uma execução s_server, na janela do terminal rodando o servidor, aperte CTRL+C.

Iniciar um servidor no modo básico

Antes de iniciar um servidor de demonstração no modo básico, verifique se você está no diretório /app/digicert-pqc/demo e se gerou os certificados de demonstração.

Depois, execute o script.

bash
./run_server.sh

Você verá esta saída:

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

Agora, o s_serverutilitário está sendo executado no modo básico e pode aceitar conexões via s_client. Para conectar-se a um servidor de demonstração em execução, consulte Modo básico: Conecte usando run_client.sh script.

Iniciar um servidor no modo HTTP

Antes de iniciar um servidor de demonstração no modo HTTP, verifique se você está no diretório /app/digicert-pqc/demo e se gerou os certificados de demonstração.

Em seguida, execute o script e inclua o http argumento

bash
./run_server.sh http

Você verá esta saída:

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

Agora, o s_serverutilitário está sendo executado no modo HTTP e pode aceitar conexões via HTTPS na porta 443. Para conectar-se a um servidor de demonstração em execução, consulte Conectar usando cURL.

Conectar a um servidor de demonstração em execução

Depois de executar o run_server.sh script para iniciar um servidor de demonstração, você estará pronto para se conectar a ele e testar a cadeia de certificados de demonstração.

Como você se conecta ao servidor de demonstração em execução depende do modo usado para iniciar o servidor.

Modo Básico: Conecte-se usando o run_clientscript .sh.

O run_client.sh script usa o utilitário OpenSSLs_client para conectar-se a uma execuçãos_server. Antes de executar este script, verifique se você iniciou um s_serverexecutando o run_server.sh script no modo básico. Veja Iniciar um servidor no modo básico.

Com um modo básico em execução ativos_server em uma das janelas do terminal, abra uma nova janela do terminal. Na nova janela, comece outra sessão bash com docker-compose exec.

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

Navegue para o diretório de demonstração e execute o run_client.sh script.

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

Você verá esta saída:

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 na sua outra janela do terminal com o s_server em execução, você verá esta saída:

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: Conectar usando cURL

Para usar cURL para conectar-se a uma execução s_server, Certifique-se que iniciou um s_server em modo HTTP. Veja Iniciar um servidor no modo HTTP .

Com um servidor de demonstração ativo em execução no modo HTTP em uma das janelas do terminal, a primeira coisa que você precisa fazer é abrir uma nova janela do terminal. Na nova janela, comece outra sessão bash com docker-compose exec.

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

Agora, conecte-se ao servidor em execução usando cURL. Os certificados de demonstração gerados são autoassinados e emitem um aviso de certificado não confiável. Para ignorar esses avisos, você deve incluir a -k opção.

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

Você verá esta saída:

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

E na sua outra janela do terminal com o s_server em execução, você verá esta saída:

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

Parabéns! Você configurou e testou com êxito o ambiente do kit de ferramentas dockerizadas PQC. Sinta-se à vontade para experimentar a criação de certificados e o estabelecimento de conexões quânticas seguras.