#Ubuntu 22.04는 절대 안됩니다
##Ubuntu 20.04로 해야합니다
저는 도커 환경에서 진행하였습니다. 저번에도 말했듯 서버 클라이언트 컴퓨터 굳이 두개 놓을 필요 없이 한 컴퓨터에서 터미널 두개 띄우고 실험 진행이 가능하기 때문에 정말 좋습니다.
첫번째 단계 : openssl version 업데이트 시키기
1.docker image pull 해줍니다. 이때 ubuntu:latest로 하지 마세요. 무조건 ubuntu version 20.04이어야 합니다.(제가 버전 때문에 헛짓거리를 한달 째하고 있었던 것 이었습니다.)
docker pull ubuntu:20.04
2. docker run -it --name <원하는 컨테이너 이름> ubuntu:20.04 /bin/bash 로 컨테이너를 실행시켜줍니다.
docker run -it --name test-ubuntu ubuntu:20.04 /bin/bash
3. docker exec -it <원하는 컨테이너 이름> /bin/bash로 이제 터미널에서 실행시켜봅시다.
docker exec -it test-ubuntu /bin/bash
4. sudo가 설치가 안되어있을 것이므로 sudo를 미리 설치합시다.
apt-get update && apt-get install -y sudo
5. 먼저 openssl 설치를 해줍니다.
sudo apt install openssl
openssl version
#버전 확인 :: 예시
OpenSSL 1.1.1o 3 May 2022
6.
cd /usr/local/src/
sudo apt install wget
#openssl version은 원하는 버전으로 하되 PQTLS 실행시키려면 버전이 3.2.0 이상이어야 함
#현재 최신 버전은 3.4.1 이기 때문에 최신 버전으로 다운
sudo wget https://www.openssl.org/source/openssl-3.4.1.tar.gz
sudo tar xvf openssl-3.4.1.tar.gz
7.
sudo apt install perl gcc cmake ninja-build
cd openssl-3.4.1
sudo ./config
sudo make
sudo make install
8.
openssl version
#결과
openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
9. library의 종속성을 확인할 때가 없는 것. libssl.so.3, libcrypto.so.3 임
$ ldd /usr/local/bin/openssl
linux-vdso.so.1 (0x00007fff8bb46000)
libssl.so.3 => not found
libcrypto.so.3 => not found
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb693f38000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb693d46000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb694074000)
10. 해당 라이브러리가 어디에 있는지 찾기
$ sudo find /usr/local/ -name libssl.so.3
/usr/local/src/openssl-3.4.1/libssl.so.3
/usr/local/lib64/libssl.so.3
$ sudo find /usr/local/ -name libcrypto.so.3
/usr/local/src/openssl-3.4.1/libcrypto.so.3
/usr/local/lib64/libcrypto.so.3
11. 편집기를 열어 .bashrc를 열어 적절한 행에 export LD_LIBRARY_PATH=/usr/local/lib64 추가 하고 source를 통해 다시 로드시킵니다.
sudo apt install nano
nano ~/.bashrc
source ~/.bashrc
12.버전을 확인하고 업데이트 완료된 것을 볼 수 있음
openssl version
#결과
OpenSSL 3.4.1 11 Feb 2025 (Library: OpenSSL 3.4.1 11 Feb 2025)
현재 심볼릭 링크를 생성했음에도 불구하고 openssl 버전이 여전히 1.1.1f로 출력되는 이유는, 시스템에서 호출되는 openssl 바이너리가 여전히 구버전으로 되어 있기 때문입니다.
몇 가지 확인해볼 사항은 다음과 같습니다.
- 바이너리 경로 확인
먼저 어떤 openssl 바이너리가 실행되고 있는지 확인해보세요.만약 /usr/bin/openssl가 출력된다면, 시스템 기본 경로의 구버전 바이너리가 사용되고 있는 것입니다. - which openssl
- 새로운 바이너리 설치 여부 확인
OpenSSL 3.4.1을 컴파일 및 설치한 경우, 보통 /usr/local/bin/openssl 경로에 설치됩니다.로 실행하여 새로운 버전이 출력되는지 확인해보세요. - /usr/local/bin/openssl version
- 환경 변수 PATH 업데이트
새로운 바이너리가 /usr/local/bin에 있다면, PATH에서 /usr/local/bin이 /usr/bin보다 우선순위가 높도록 설정해야 합니다.
예를 들어, .bashrc 또는 .profile에 아래와 같이 추가합니다.변경 후에는 터미널을 재시작하거나 source ~/.bashrc 명령어로 적용합니다. - export PATH=/usr/local/bin:$PATH
- 동적 링커 캐시 갱신
심볼릭 링크를 생성한 후에도 동적 링커 캐시가 갱신되지 않았다면, 아래 명령어로 갱신해보세요. - sudo ldconfig
이러한 과정을 통해 올바른 openssl 바이너리와 라이브러리가 사용되도록 설정하면, OpenSSL 3.4.1 버전이 출력될 것입니다.
두번째 단계 : oqs-provider라이브러리 openssl에 확장시키기
1.
cd /usr/local/src
2.
sudo apt -y install git build-essential perl cmake autoconf libtool zlib1g-dev
git clone https://github.com/open-quantum-safe/liboqs.git
cd liboqs
#OPTIONAL# git checkout 78e65bf1
mkdir build && cd build
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/src \
-DBUILD_SHARED_LIBS=ON \
-DOQS_USE_OPENSSL=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DOQS_BUILD_ONLY_LIB=ON \
-DOQS_DIST_BUILD=ON \
..
make -j $(nproc)
make -j $(nproc) install
3.
cd /usr/local/src
4.
git clone https://github.com/open-quantum-safe/oqs-provider.git
cd oqs-provider
liboqs_DIR=$BUILD_DIR cmake \
-DCMAKE_INSTALL_PREFIX=$WORKSPACE/oqs-provider \
-DOPENSSL_ROOT_DIR=/usr/local/src \
-DCMAKE_BUILD_TYPE=Release \
-S . \
-B _build
cmake --build _build
5.
cd oqs-provider
scripts/fullbuild.sh
sudo cmake --install _build
scripts/runtests.sh
6. openssl version -d 를 통해 경로를 확인하고,
OPENSSL configuration file을 nano 명령어를 통해 수정합니다
openssl version -d
#결과
OPENSSLDIR: "/usr/local/ssl"
sudo nano /usr/local/ssl/openssl.cnf
7.이 내용을 추가하거나 수정합니다. 저장은 아시죠?
# PQC via OpenQuantumSafe
[provider_sect]
default = default_sect
oqsprovider = oqsprovider_sect
[default_sect]
activate = 1
[oqsprovider_sect]
activate = 1
8. oqs-provider 잘 끌어오는지 봅시다
openssl list -providers
#결과
Providers:
default
name: OpenSSL Default Provider
version: 3.4.1
status: active
oqsprovider
name: OpenSSL OQS Provider
version: 0.8.1-dev
status: active
세번째 단계 : 서버의 인증서 생성 및 클라이언트와의 연결
<서버>
#우선 ifconfig를 통해 서버 ip 확인을 위한 빌드업
sudo apt install net-tools
ifconfig
#서버 ip주소 확인
#mldsa44 꼭 안해도 됩니다.
#CA (인증 기관) 인증서 생성
openssl req -x509 -new -newkey mldsa44 -keyout mldsa44_CA.key -out mldsa44_CA.crt -nodes -subj "/CN=test CA" -days 365 -config /usr/local/ssl/openssl.cnf
#서버용 개인 키 생성
openssl genpkey -algorithm mldsa44 -out mldsa44_srv.key
#서버의 CSR(인증서 서명 요청, Certificate Signing Request) 생성
openssl req -new -newkey mldsa44 -keyout mldsa44_srv.key -out mldsa44_srv.csr -nodes -subj "/CN=test server" -config /usr/local/ssl/openssl.cnf
#서버의 인증서를 CA로 서명하여 발급
openssl x509 -req -in mldsa44_srv.csr -out mldsa44_srv.crt -CA mldsa44_CA.crt -CAkey mldsa44_CA.key -CAcreateserial -days 365
#서버 구축, kem은 mlkem768:frodo640shake 클라이언트가 저 두 종류중 하나로 kem 알고리즘으로 사용하면 됩니다.
#포트 번호 443으로 했습니다 원하시는 대로 하면 됩니다
openssl s_server -accept 443 -cert mldsa44_srv.crt -key mldsa44_srv.key -www -tls1_3 -groups mlkem768:frodo640shake
<클라이언트>
openssl s_client -connect <서버 ip주소>:<포트번호> -groups frodo640shake
결과
후 수고많았다 나
'tls' 카테고리의 다른 글
git 원격 저장소 주소 변경 (0) | 2025.03.11 |
---|---|
라이브러리 liboqs와 wolfSSL을 결합하여 TLS에서 포스트 양자 암호화를 실제로 (0) | 2025.02.21 |
Ubuntu 20.04에서 OpenSSL 3.2.0으로 업데이트 (0) | 2025.02.17 |
알파인 리눅스에서 PQ TLS 1.3 handshake 실습 (0) | 2025.02.15 |
PQ TLS 1.3 handshake 실습 2: 서버 인증서 구축 및 클라이언트와의 handshake (0) | 2025.02.14 |