Руководство по упакованному в контейнер Docker инструментарию PQC

Настоящее руководство относится к упакованному в контейнер Docker инструментарию PQC. Инструкции по настройке инструментария PQC от DigiCert содержатся в Руководстве по настройке инструментария PQC.

Введение

Упакованный в контейнер Docker постквантовый криптографический инструментарий (PQC) для DigiCert содержит все необходимо для настройки среды контейнера, в которой вы можете создать гибридный сертификат TLS. Этот гибридный сертификат использует алгоритм постквантовой криптографии в комбинации с классическим криптографическим алгоритмом, позволяя вам тестировать различные развертываемые постквантовые гибридные сертификаты TLS с сохранением обратной совместимости.

Настоящее руководство поможет вам выполнить все действия с использованием упакованного в контейнер Docker инструментария PQC от DigiCert, которые необходимы для:

  • Запуска контейнера Docker с помощью docker-compose.
  • Ввода работающего контейнера PQC.
  • Выполнения содержащихся в контейнере демо-скриптов для проверки образцов сертификатов PQC.
  • Создания постквантовых криптографических ключей.
  • Создания полную цепочки гибридных сертификатов, включая корневые, промежуточные и серверные сертификаты.
  • Протестируйте сертификаты, используя утилиты OpenSSL s_server и s_client.

Упакованный в контейнер Docker инструментарий PQC от DigiCert доступен для загрузки всеми клиентами Secure Site Pro. Ознакомьтесь с более подробной информацией о том, что входит в каждый сертификат Secure Site Pro.

Содержание упакованного в контейнер Docker инструментария PQC

Упакованный в контейнер Docker инструментарий PQC от DigiCert содержит следующие файлы:

  • Докер-файл
  • docker-compose.yml
  • Компилированный OpenSSL, в который в качестве исправления добавлен ISARA Catalyst OpenSSL Connector
  • Демо-сертификаты и файлы конфигурации
  • Bash-скрипты для тестирования генерации сертификатов и функциональных возможностей

Предварительные условия

Прежде чем начать использовать настоящее руководство, убедитесь в том, что выполнены следующие предварительные требования:

Проверьте версию имеющегося у вас Docker version

Прежде чем загружать упакованный в контейнер Docker инструментарий PQC, проверьте, установлены ли в вашей системе Docker Engine и Docker Compose.

Если данные команды не распознаются, Docker в вашей системе не установлен. См. раздел Предварительные условия, где содержится информация по установке Docker в вашей системе.

Linux/macOS

Откройте окно терминала и запустите docker --version и docker-compose --version. При этом должен быть получен результат, аналогичный показанному ниже.

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

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

Windows

Откройте командную строку или окно PowerShell и запустите docker --version. При этом должен быть получен результат, аналогичный показанному ниже.

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

Загрузите и распакуйте упакованный в контейнер Docker инструментарий PQC

  1. Войдите в свою учетную запись CertCentral
  2. В меню на боковой панели нажмите Сертификаты > Заказы.
  3. На странице «Заказы» найдите свой заказ на сертификат Secure Site Pro и нажмите на номер заказа.
  4. На странице данных заказа на сертификат нажмите Инструментарий PQC.
  5. На странице «Постквантовая криптография (PQC)» нажмите Загрузить файлы поддержки Docker и сохраните архивный файл zip.
  6. Найдите сохраненный файл zip (DigiCert-PQC.zip) и извлеките его содержимое.

Создайте и загрузите контейнер инструментария PQC

После того, как упакованный в контейнер Docker инструментарий PQC будет загружен и распакован, вы можете приступать к созданию контейнера, используя docker-compose.

Откройте окно терминала и перейдите в распакованный каталог digicert-pqc-docker.

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

Далее создайте контейнер инструментария PQC. При этом загружаются все зависимости изображений и конфигурируется среда контейнера.

Если вы в первый раз запускаете команду, вы должны подождать, пока требуемое изображение Ubuntu загрузится из концентратора Docker.

bash
docker-compose build

Теперь вы готовы к запуску контейнера инструментария PQC в раздельном режиме.

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

Операция выполнена! Упакованный в контейнер Docker инструментарий PQC загружен и работает.

Процедура доступа к среде контейнера и начала выполнения экспериментов описана в разделе Вход в контейнер.

Вход в контейнер

Для проведения эксперимента со включенными в контейнер демо-скриптами и модифицированным приложением OpenSSL сначала нужно войти в среду контейнера.

С помощью docker-compose exec запустите bash-сессию внутри работающего контейнера.

bash
docker-compose exec pqc /bin/bash

Дерево каталога

При первом входе в контейнер вы попадаете в каталог /app. Этот каталог является начальным для всего инструментария PQC и вспомогательных ресурсов. В следующей таблице описываются важные подкаталоги и файлы, которые расположены в каталоге /app.

Каталог/файл Описание
digicert-pqc/ Основной каталог инструментария
 certs/ Каталог для хранения сгенерированных сертификатов.
 connector/ Ресурсы ISARA Catalyst OpenSSL Connector.
 demo/ Демо-скрипты и ресурсы.
  certs/ Каталог для хранения сгенерированных демо-сертификатов.
  configs/ Содержит файлы конфигурации сертификатов, которые используются при генерации демо-сертификатов.
   demo.html HTML-файл, который может обслуживаться посредством скрипта run_server.sh при выполнении в режиме веб-сервера.
   cert_gen_demo.sh Генерирует и тестирует полностью цепочку квантово-безопасных сертификатов, используя файлы конфигурации, находящиеся в /app/digicert-pqc/demo/configs.
См. Генерация демо-сертификатов.
   run_client.sh Выполняется подключение к работающему s_server с помощью утилиты OpenSSL's s_client для тестирования функциональных возможностей сертификата.
См. Базовый режим: Подключение с использованием скрипта run_client.sh script.
   run_server.sh Запускает базовый веб-сервер, используя утилиту OpenSSL's s_server, и загружает сертификаты, находящиеся в /app/digicert-pqc/demo/certs.
См. Запуск демо-сервера.
 pqpki-openssl-1.0.2r/ Компилированная версия OpenSSL 1.0.2r модифицирована с помощью исправления ISARA OpenSSL Connector.
ресурсы/ Дополнительные файлы ресурсов инструментария PQC.

Создать демо-сертификаты

Для настройки любых значений полей сертификата внесите изменения в файлы конфигурации сертификата (находятся в /app/digicert-pqc/demo/configs).

Для генерации полной цепочки квантово-безопасных сертификатов используйте скрипт cert_gen_demo.sh (находится в /app/digicert-pqc/demo). При выполнении происходит следующее:

  • Все файлы в каталоге /app/digicert-pqc/demo/certs удаляются.
  • Генерируется полная цепочка квантово-безопасных сертификатов (в том числе, корневой и промежуточный сертификаты, а также сертификат сервера). Файлы сохраняются в /app/digicert-pqc/demo/certs.
  • Цепочка сертификатов проверяется с использованием унаследованной криптографии.
  • Цепочка сертификатов проверяется с использованием квантово-безопасной криптографии.

Прежде чем приступать к генерации демо-сертификатов, убедитесь в том, что вы находитесь в каталоге /app/digicert-pqc/demo.

Затем выполните скрипт.

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

Вы должны получить следующий результат:

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

Запустите демо-сервер

Для тестирования сгенерированных демо-сертификатов выполните скрипт run_server.sh. Данный скрипт можно выполнить в одном из двух режимов: базовом или HTTP.

  • В случае базового режима опустите дополнительный аргумент http.
  • В режиме HTTP включите дополнительный аргумент http.
Режим Команда Описание
базовый ./run_server.sh Запускает OpenSSL s_server, который принимает подключения, используя утилиту OpenSSL s_client.
HTTP ./run_server.sh http Запускает OpenSSL s_server, который принимает HTTPS-подключения через порт 443.

Для остановки работающего s_server, в окне терминала, где работает сервер, нажмите CTRL+C.

Запустите сервер в базовом режиме

Прежде чем запускать демо-сервер в базовом режиме, убедитесь в том, что вы находитесь в каталоге /app/digicert-pqc/demo и что вы сгенерировали демо-сертификаты.

Затем выполните скрипт.

bash
./run_server.sh

Вы должны получить следующий результат:

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

Теперь утилита s_server работает в базовом режиме и может принимать подключения через s_client. Процедура подключения к работающему демо-серверу описана в разделе Базовый режим: Подключение с использованием скрипта run_client.sh script.

Запустите сервер в режиме HTTP

Прежде чем запускать демо-сервер в режиме HTTP, убедитесь в том, что вы находитесь в каталоге /app/digicert-pqc/demo и что вы сгенерировали демо-сертификаты.

Затем выполните скрипт и включите аргумент http.

bash
./run_server.sh http

Вы должны получить следующий результат:

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

Теперь утилита s_server работает в режиме HTTP может принимать подключения HTTPS через порт 443. Процедура подключения к работающему демо-серверу описана в разделе Подключение с использованием cURL.

Подключение к работающему демо-серверу

После выполнения скрипта run_server.sh для запуска демо-сервера вы готовы к подключению к демо-серверу и тестированию цепочки демо-сертификатов.

Способ подключения к работающему демо-серверу зависит от режима, используемого для пуска сервера.

Базовый режим: Подключение с использованием скрипта run_client.sh

Скрипт run_client.sh использует утилиту OpenSSL s_client для подключения к работающему s_server. Прежде чем выполнять данный скрипт, убедитесь в том, что вы запустили s_server, выполнив скрипт run_server.sh в базовом режиме. См. раздел Запуск сервера в базовом режиме.

При активном s_server, работающем в базовом режиме в одном из окон вашего терминала, откройте новое окно терминала. В новом окне запустите еще одну bash-сессию с docker-compose exec.

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

Перейдите в демо-каталог и выполните скрипт run_client.sh.

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

Вы должны получить следующий результат:

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

А в другом окне терминала с активным работающим s_server вы увидите следующий результат:

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

Режим HTTP: Подключение с использованием cURL

Чтобы воспользоваться cURL для подключения к работающему s_server, убедитесь, что вы запустили s_server в режиме HTTP. См. Пуск сервера в режиме HTTP.

При активном демо-сервере, работающем в режиме HTTP в одном из окон вашего терминала, первое, что вы должны сделать, - это открыть новое окно терминала. В новом окне запустите еще одну bash-сессию с docker-compose exec.

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

Теперь подключитесь к работающему серверу, используя cURL. Сгенерированные вами демо-сертификаты, являются самоподписанными и будут приводить к появлению предупреждения о недостоверном сертификате. Чтобы игнорировать данные предупреждения, необходимо включить переключатель -k.

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

Вы должны получить следующий результат:

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

А в другом окне терминала с активным работающим s_server вы увидите следующий результат:

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

Операция выполнена! Вы успешно выполнили настройку и тестирование среды вашего упакованного в контейнер Docker инструментария PQC. Теперь вы можете экспериментировать, создавая сертификаты и устанавливая квантово-безопасные подключения.