PQC Docker 化工具組指南

此指南適用於 PQC Docker 化工具組。如需有關設定 DigiCert PQC 工具組的指示,參閱 PQC 工具組設定指南

介紹

DigiCert 的後量子加密 (PQC) Docker 化工具組包含快速設定您可以建立混合式 TLS 憑證的 Docker 環境所需的一切。此混合式憑證使用與傳統加密演算法結合的後量子加密演算法。可讓您在測試部署後量子混合式 TLS 的可行性時,同時保有向後相容性。

此指南引導您使用 DigiCert PQC Docker 化工具組:

  • 使用 docker-compose 啟動 Docker 容器。
  • 進入執行中的 PQC 容器。
  • 執行納入的示範指令集以測試範例 PQC 憑證。
  • 產生後量子加密金鑰。。
  • 建立完整的混合式憑證鏈,包括根、中繼和伺服器憑證。
  • 使用 OpenSSL 的 s_servers_client 公用桯式測試憑證。

DigiCert PQC Docker 化工具組可下載用於所有的 Secure Site Pro 客戶。進一步瞭解使用每種 Secure Site Pro 憑證加入的內容

PQC Docker 化工具組內容

DigiCert PQC Docker 化工具組包含這些檔案:

  • Dockerfile
  • docker-compose.yml
  • 經過編譯的 OpenSSL,採用 ISARA Catalyst OpenSSL Connector 修補
  • 示範憑證和組態檔案
  • 挑出指令集錯誤以測試憑證的產生和功能

先決條件

使用此指南前,請確定符合這些先決條件:

檢查您的 Docker 版本

下載 PQC Docker 化工具組之前,請確認您的系統已安裝 Docker Engine 和 Docker Compose。

如果無法識別這些命令,表示您的系統未安裝 Docker。如需有關在您的系統上安裝 Docker 的資訊,請參閱先決條件

Linux/macOS

開啟終端視窗,然後執行 docker --versiondocker-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

下載和解壓縮 PQC Docker 化工具組

  1. 登入您的 CertCentral 帳戶。
  2. 在資訊看板功能表中,按一下憑證 > 訂單
  3. 在「訂單」頁面上,尋找您的 Sucure Site Pro 憑證訂單,然後按其訂單編號。
  4. 在憑證的訂單詳細資料頁面上,按一下 PQC 工具組
  5. 在「後量子加密 (PQC)」頁面上,按一下下載 Docker 支援檔案,然後儲存壓縮檔。
  6. 尋找儲存的壓縮檔案 (DigiCert-PQC.zip),然後解壓縮其內容。

建立和執行 PQC 工具組容器

下載和解壓縮 PQC Docker 化工具組後,您已準備好使用 docker-compose 建立容器。

開啟終端視窗,然後導覽到解壓縮的 digicert-pqc-docker 目錄。

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

接著,建立 PQC 工具組容器。這樣會下載所有映像相依性並設定容器環境。

如果這是您第一次執行命令,您可能必須等待從 Docker Hub 下載必要的 Ubuntu 映像。

bash
docker-compose build

現在您已準備好在中斷連結模式中啟動 PQC 工具組容器。

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

恭喜!PQC Docker 化工具組是最新的並執行中。

若要存取容器環境並開始體驗,請參閱進入容器

進入容器

若要使用納入的示範指令集和經過條改的 OpenSSL 應用程式體驗,您必須先進入容器環境。

使用 docker-compose exec 開始挑出執行中的容器內的工作階段錯誤。

bash
docker-compose exec pqc /bin/bash

目錄樹狀結構

第一次進入容器時,您將在 /app 目錄中。此目錄是整個 PQC 工具組和增補資源的首頁。下表說明位於 /app 目錄中的重要子目錄和檔案。

Directory/file 說明
digicert-pqc/ 主要工具組目錄。
 certs/ 儲存產生的憑證的目錄。
 connector/ ISARA Catalyst OpenSSL Connector 資源。
 demo/ 示範指令集和資源。
  certs/ 儲存產生的示範憑證的目錄。
  configs/ 包含在產生示範憑證時使用的憑證組態檔。
   demo.html 在網頁伺服器模式中執行時,可透過 run_server.sh 指令集服務 HTML 檔案。
   cert_gen_demo.sh 使用位於 /app/digicert-pqc/demo/configs 中的組態檔案產生和測試完整的量子安全憑證鏈。
請參閱產生示範憑證
   run_client.sh 使用 OpenSSL 的 s_client 公用程式連線到執行中 s_server 以測試憑證功能。
請參閱基本模式:使用 run_client.sh 指令集連線。
   run_server.sh 使用 OpenSSL 的 s_server 公用程式啟動基本的網頁伺服器,然後載入位於 /app/digicert-pqc/demo/certs 中的憑證。
請參閱啟動示範伺服器
 pqpki-openssl-1.0.2r/ 使用 ISARA OpenSSL Connector 修補增式修改經過編譯的 1.0.2r 版 OpenSSL。
resources/ 增補的 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_client 公用程式啟動接受連線的 OpenSSL s_server 。
HTTP ./run_server.sh http 啟用在連接埠 443 上接受 HTTPS 連線的 OpenSSL s_server。

要停止執行 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 指令集連線。

在 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 模式中執行,而且可以接受透過在連接埠 443 上的 HTTPS 的連線。若要連線到運行中的示範伺服器,請參閱使用 cURL 連線

連線到執行中的示範伺服器

在執行 run_server.sh 指令集以啟用示範伺服器後,您已準備好連線至該伺服器並測試示範憑證鏈。

如何連線到執行中的示範伺服器視用於啟用伺服器的模式而定。

基本模式:使用 run_client.sh 指令集連線

run_client.sh 指令集使用 OpenSSL s_client 公用程式連線至執行中的 s_server。執行此指令集前,請確定您已在基本模式中透過執行 run_server.sh 指令集來啟用 s_server。請參閱在基本模式中啟用伺服器

使用中的 s_server 在您的其中一個終端視窗中執行基本模式時,請開啟新的終端視窗。在新視窗中,以 docker-compose exec 啟用其他 Bash 工作階段。

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,,請確定在 HTTP 模式中啟用 s_server。請參閱在 HTTP 模式中啟用伺服器

使用中的示範伺服器在您的其中一個終端視窗中執行 HTTP 模式時,您需要做的第一件事就是開啟新的終端視窗。在新視窗中,以 docker-compose exec 啟用其他 Bash 工作階段。

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

恭喜!您已成功設定和測試您的 PQC Docker 化工具組環境。歡迎體驗如何阵立憑證和量子級的安全連線。