Настоящее руководство относится к упакованному в контейнер Docker инструментарию PQC. Инструкции по настройке инструментария PQC от DigiCert содержатся в Руководстве по настройке инструментария PQC.
Упакованный в контейнер Docker постквантовый криптографический инструментарий (PQC) для DigiCert содержит все необходимо для настройки среды контейнера, в которой вы можете создать гибридный сертификат TLS. Этот гибридный сертификат использует алгоритм постквантовой криптографии в комбинации с классическим криптографическим алгоритмом, позволяя вам тестировать различные развертываемые постквантовые гибридные сертификаты TLS с сохранением обратной совместимости.
Настоящее руководство поможет вам выполнить все действия с использованием упакованного в контейнер Docker инструментария PQC от DigiCert, которые необходимы для:
docker-compose
.s_server
и s_client
.Упакованный в контейнер Docker инструментарий PQC от DigiCert доступен для загрузки всеми клиентами Secure Site Pro. Ознакомьтесь с более подробной информацией о том, что входит в каждый сертификат Secure Site Pro.
Упакованный в контейнер Docker инструментарий PQC от DigiCert содержит следующие файлы:
Прежде чем начать использовать настоящее руководство, убедитесь в том, что выполнены следующие предварительные требования:
Прежде чем загружать упакованный в контейнер Docker инструментарий PQC, проверьте, установлены ли в вашей системе Docker Engine и Docker Compose.
Если данные команды не распознаются, Docker в вашей системе не установлен. См. раздел Предварительные условия, где содержится информация по установке Docker в вашей системе.
Откройте окно терминала и запустите docker --version
и docker-compose --version
. При этом должен быть получен результат, аналогичный показанному ниже.
$ docker --version
Docker version 18.03.0-ce, build 0520e24
$ docker-compose --version
docker-compose version 1.20.1, build 5d8c71b
Откройте командную строку или окно PowerShell и запустите docker --version
. При этом должен быть получен результат, аналогичный показанному ниже.
> docker --version
Docker version 18.03.0-ce, build 0520e24
После того, как упакованный в контейнер Docker инструментарий PQC будет загружен и распакован, вы можете приступать к созданию контейнера, используя docker-compose
.
Откройте окно терминала и перейдите в распакованный каталог digicert-pqc-docker.
cd [path/to/dir/]digicert-pqc-docker
Далее создайте контейнер инструментария PQC. При этом загружаются все зависимости изображений и конфигурируется среда контейнера.
Если вы в первый раз запускаете команду, вы должны подождать, пока требуемое изображение Ubuntu загрузится из концентратора Docker.
docker-compose build
Теперь вы готовы к запуску контейнера инструментария PQC в раздельном режиме.
docker-compose up -d
Starting digicert-pqc-docker_pqc_1 ... done
Операция выполнена! Упакованный в контейнер Docker инструментарий PQC загружен и работает.
Процедура доступа к среде контейнера и начала выполнения экспериментов описана в разделе Вход в контейнер.
Для проведения эксперимента со включенными в контейнер демо-скриптами и модифицированным приложением OpenSSL сначала нужно войти в среду контейнера.
С помощью docker-compose exec
запустите 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.
Затем выполните скрипт.
cd /app/digicert-pqc/demo
./cert_gen_demo.sh
Вы должны получить следующий результат:
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
.Режим | Команда | Описание |
---|---|---|
базовый |
./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 и что вы сгенерировали демо-сертификаты.
Затем выполните скрипт.
./run_server.sh
Вы должны получить следующий результат:
engine "IQREngine" set.
Using default temp DH parameters
ACCEPT
Теперь утилита s_server работает в базовом режиме и может принимать подключения через s_client. Процедура подключения к работающему демо-серверу описана в разделе Базовый режим: Подключение с использованием скрипта run_client.sh script.
Прежде чем запускать демо-сервер в режиме HTTP, убедитесь в том, что вы находитесь в каталоге /app/digicert-pqc/demo и что вы сгенерировали демо-сертификаты.
Затем выполните скрипт и включите аргумент http
.
./run_server.sh http
Вы должны получить следующий результат:
engine "IQREngine" set.
Using default temp DH parameters
ACCEPT
Теперь утилита s_server работает в режиме HTTP может принимать подключения HTTPS через порт 443. Процедура подключения к работающему демо-серверу описана в разделе Подключение с использованием cURL.
После выполнения скрипта run_server.sh
для запуска демо-сервера вы готовы к подключению к демо-серверу и тестированию цепочки демо-сертификатов.
Способ подключения к работающему демо-серверу зависит от режима, используемого для пуска сервера.
Скрипт run_client.sh
использует утилиту OpenSSL s_client для подключения к работающему s_server. Прежде чем выполнять данный скрипт, убедитесь в том, что вы запустили s_server, выполнив скрипт run_server.sh
в базовом режиме. См. раздел Запуск сервера в базовом режиме.
При активном s_server, работающем в базовом режиме в одном из окон вашего терминала, откройте новое окно терминала. В новом окне запустите еще одну bash-сессию с docker-compose exec
.
cd [path/to/dir/]digicert-pqc-docker
docker-compose exec pqc /bin/bash
Перейдите в демо-каталог и выполните скрипт run_client.sh
.
cd /app/digicert-pqc/demo
./run_client.sh
Вы должны получить следующий результат:
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 вы увидите следующий результат:
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
Чтобы воспользоваться cURL для подключения к работающему s_server, убедитесь, что вы запустили s_server в режиме HTTP. См. Пуск сервера в режиме HTTP.
При активном демо-сервере, работающем в режиме HTTP в одном из окон вашего терминала, первое, что вы должны сделать, - это открыть новое окно терминала. В новом окне запустите еще одну bash-сессию с docker-compose exec
.
cd [path/to/dir/]digicert-pqc-docker
docker-compose exec pqc /bin/bash
Теперь подключитесь к работающему серверу, используя cURL. Сгенерированные вами демо-сертификаты, являются самоподписанными и будут приводить к появлению предупреждения о недостоверном сертификате. Чтобы игнорировать данные предупреждения, необходимо включить переключатель -k
.
curl -k https://digicert.pqc/demo.html
Вы должны получить следующий результат:
<html>
<head></head>
<body>
<h1>Hello world! PQC FUTURE IS HERE!</h1>
</body>
</html>
А в другом окне терминала с активным работающим s_server вы увидите следующий результат:
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. Теперь вы можете экспериментировать, создавая сертификаты и устанавливая квантово-безопасные подключения.