이 가이드는 PQC Docker화 도구 키트에 대해 설명합니다. DigiCert PQC 도구 키트 설정에 대한 설명은 PQC 도구 키트 설정 가이드를 참조하십시오.
DigiCert의 PQC(포스트퀀텀 암호화) Docker화 도구 키트는 하이브리드 TLS 인증서를 만들 수 있는 Docker 환경을 빠르게 설정하기 위해 필요한 모든 것을 포함합니다. 이 하이브리드 인증서는 전통적 암호화 알고리즘을 연결하여 포스트퀀텀 암호화 알고리즘을 사용할 것입니다. 이전 버전과의 호환성을 유지하면서도 포스트퀀텀 하이브리드 TLS 인증서의 배포의 가능성을 테스트할 수 있게 합니다.
이 가이드는 DigiCert PQC Docker화 도구 키드를 사용하는 방법을 안내합니다.
docker-compose
를 사용하여 Docker 컨테이너를 시작합니다.s_server
및 s_client
유티리티를 사용하여 인증서를 테스트합니다.DigiCert PQC Docker화 도구 키트는 모든 Secure Site Pro 고객에게 다운로드 가능합니다. 각 Secure Site Pro 인증서에 포함된 사항에 대해 자세히 알아봅니다.
DigiCert PQC Docker화 도구 키트는 다음 파일을 포함합니다:
이 가이드를 사용하기 전에 다음 사전 요구 사항을 충족하는지 확인합니다.
PQC Docker화 도구 키트를 다운로드하기 전에 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
PQC Docker화 도구 키트를 다운로드하여 압축을 풀었으면 docker-compose
를 사용하여 컨테이너를 빌드할 준비가 되었습니다.
터미널 창을 열고 추출한 digicert-pqc-docker 디렉터리를 탐색합니다.
cd [path/to/dir/]digicert-pqc-docker
다음으로 PQC 토구 키트 컨테이너를 빌드합니다. 이것은 모든 이미지 종속성을 다운로드하고 컨테이너 환경을 구성합니다.
명령을 처음 사용하는 것인 경우, 필요한 Ubuntu 이미지가 Docker Hub에서 다운로드되기를 기다려야 할 수 있습니다.
docker-compose build
이제 분리 모드에서 PQC 도구 키트 컨테이너를 시작할 준비가 되었습니다.
docker-compose up -d
Starting digicert-pqc-docker_pqc_1 ... done
축하합니다! PQC Docker화 도구 키트 컨테이너가 실행 중입니다.
컨테이너 환경에 액세스하여 실험을 시작하려면 컨테이너에 진입을 참조하십시오.
포함된 데모 스크립트 및 수정된 OpenSSL 앱을 실험하려면 먼저 컨테이너 환경에 진입해야 합니다.
실행하고 있는 컨테이너 내에서 bash 세션을 시작하려면 docker-compose exec
을 사용합니다.
docker-compose exec pqc /bin/bash
컨테이너에 처음 진입하면 /app 디렉터리에 있을 것입니다. 이 디렉터리는 전체 PQC 도구 키트 및 보조적 리소스의 홈 디렉터리입니다. 다음 표는 /app 디렉터리에 있는 중요한 하위 디렉터리 및 파일을 설명합니다.
디렉터리/파일 | 설명 |
---|---|
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 패치를 사용하여 수정된 컴파일한 OpenSSL 버전 1.0.2r입니다. |
resources/ | 보조 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_client 유틸리티를 사용하여 연결을 수락하는 OpenSSL s_server을(를) 시작합니다. |
HTTP |
./run_server.sh http
|
포트 443번에서 HTTPS 연결을 수락하는 OpenSSL s_server을(를) 시작합니다. |
실행하고 있는 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 스크립트를 사용하여 연결을 참조하십시오.
HTTP 모드에서 데모 서버를 시작하기 전에 현재 디렉터리가 /app/digicert-pqc/demo이고 데모 인증서를 생성했는지 확인합니다.
다음으로 http
인수를 포함하여 스크립트를 실행합니다.
./run_server.sh http
다음과 같은 결과가 있어야 합니다.
engine "IQREngine" set.
Using default temp DH parameters
ACCEPT
이제 s_server 유틸리티는 HTTP 모드에서 실행 중이며 포트 443번에서 HTTPS를 통해 연결을 수락할 수 있습니다. 실행 중인 데모 서버에 연결하려면 cURL을 사용하여 연결을 참조하십시오.
run_server.sh
스크립트를 실행하여 데모 서버를 시작한 후에는 데모 서버에 연결하여 데모 인증서 체인을 테스트할 준비가 되었습니다.
실행 중인 데모 서버에 연결하는 방법은 서버를 시작하는 데 사용하는 모드에 따라 다릅니다.
run_client.sh
스크립트는 OpenSSL s_client 유틸리티를 사용하여 실행 중인 s_server에 연결합니다. 이 스크립트를 실행하기 전에 run_server.sh
스크립트를 기본 모드에서 실행하여 s_server을(를) 시작했는지 확인합니다. 기본 모드에서 서버를 시작을 참조하십시오.
한 터미널 창에서 활성 s_server이(가) 기본 모드로 작동하는 상태에서 새 터미널 창을 시작합니다. 새 창에서 docker-compose exec
(으)로 다른 bash 세션을 시작합니다.
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 모드로 실행 중인 상태에서 먼저 새 터미널 창을 시작합니다. 새 창에서 docker-compose exec
(으)로 다른 bash 세션을 시작합니다.
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
축하합니다! 성공적으로 PQC Docker화 도구 키트 환경을 설정하여 테스트했습니다. 인증서 만들기 및 퀀텀 컴퓨터에 대해 안전한 연결 수립하기를 실험해 보세요.