OpenSSL이란?
OpenSSL은 암호화와 보안 기술을 제공하는 오픈 소스 프로젝트입니다.
다양한 암호화 알고리즘과 프로토콜을 지원하며, 인증서 관리, 디지털 서명, 대칭키 및 비대칭키 암호화 등 다양한 보안 작업을 수행할 수 있습니다.
OpenSSL은 명령어 라인 도구와 라이브러리 형태로 제공되어 다양한 운영 체제에서 사용할 수 있습니다.
기본 사용법
OpenSSL 명령어를 사용하기 전에 OpenSSL 패키지를 설치해야 합니다.
설치가 완료되면 명령어 라인에서 openssl을 입력하여 OpenSSL 명령어 인터페이스에 접속할 수 있습니다.
OpenSSL 명령어는 대부분의 작업에 대한 옵션과 인자를 사용하여 실행됩니다.
$ openssl [options] <command> [arguments]
위의 기본적인 명령어 구문을 사용하여 OpenSSL 명령어를 실행할 수 있습니다.
대칭키 암호화와 복호화 예제
OpenSSL을 사용하여 대칭키 암호화와 복호화를 수행하는 예제입니다.
대칭키 암호화는 동일한 키를 사용하여 암호화와 복호화를 수행하는 암호화 방식입니다.
enc 명령어와 -aes-256-cbc 옵션을 사용하여 대칭키로 암호화된 파일을 생성하고, enc 명령어와 -d 옵션을 사용하여 파일을 복호화합니다.
$ mkdir /tmp/test_openssl_1
$ cd /tmp/test_openssl_1
$ echo "plaintext !" > plaintext.txt
$ openssl enc -aes-256-cbc -in plaintext.txt -out encrypted_aes.txt -k password
$ openssl enc -d -aes-256-cbc -in encrypted_aes.txt -out decrypted.txt -k password
위의 예제에서 plaintext.txt는 암호화할 원본 텍스트 파일, encrypted.txt는 암호화된 파일, decrypted.txt는 복호화된 파일입니다.
-k 옵션은 사용할 대칭키를 지정합니다.
인증서 생성과 관리 예제
OpenSSL을 사용하여 인증서를 생성하고 관리하는 예제입니다.
인증서는 웹사이트나 서버의 신원을 확인하고 데이터 통신의 보안을 제공하는 데 사용됩니다.
req 명령어와 -newkey, -keyout, -out 옵션을 사용하여 개인키와 인증서를 생성합니다.
$ cd /tmp/test_openssl_1
$ openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out certificate.crt
위의 예제에서 private.key는 생성된 개인키 파일, certificate.crt는 생성된 인증서 파일입니다.
-newkey 옵션은 RSA 2048비트 개인키를 생성하며, -x509 옵션은 자체 서명된 인증서를 생성합니다.
crt를 pem으로 변환
아래의 예제는 x509 명령어를 사용하여 DER 포맷의 .crt 파일을 PEM 포맷의 .pem 파일로 변환합니다.
-inform der 옵션은 입력 파일이 DER 형식임을 지정하고, -in 옵션으로 입력 파일의 경로를 지정합니다.
-out 옵션은 출력 파일의 경로를 지정합니다.
$ cd /tmp/test_openssl_1
$ openssl x509 -in certificate.crt -out public.pem -outform PEM
RSA 개인키, 공개키 쌍 생성 및 PEM 변환 예제
아래는 RSA 개인키, 공개키 쌍을 생성하는 예제입니다.
키 생성 후 PEM 형식으로 변환합니다.
$ cd /tmp/test_openssl_1
$ openssl genpkey -algorithm RSA -out pri.key
$ openssl rsa -pubout -in pri.key -out pub.key
$ openssl rsa -in pri.key -out pri.pem
$ openssl rsa -pubin -in pub.key -out pub.pem
위 예제 실행시 총 4개의 파일이 생성됩니다.
RSA 비대칭키 암호화와 복호화 예제
OpenSSL을 사용하여 비대칭키 암호화와 복호화를 수행하는 예제입니다.
비대칭키 암호화는 공개키와 개인키를 사용하여 암호화와 복호화를 수행하는 암호화 방식입니다.
rsa 명령어와 -in 옵션을 사용하여 암호화할 파일을 지정하고, -out 옵션을 사용하여 암호화된 파일을 생성합니다.
$ cd /tmp/test_openssl_1
$ openssl rsautl -encrypt -in plaintext.txt -out encrypted_rsa.txt -inkey pub.pem -pubin
$ openssl rsautl -decrypt -in encrypted_rsa.txt -out decrypted.txt -inkey pri.pem
위의 예제에서 plaintext.txt는 암호화할 원본 텍스트 파일, encrypted.txt는 암호화된 파일, decrypted.txt는 복호화된 파일입니다.
-inkey 옵션은 사용할 공개키(public.pem) 또는 개인키(private.pem)를 지정합니다.
위의 예제를 통해 OpenSSL 명령어를 활용하여 대칭키 암호화와 복호화, 비대칭키 암호화와 복호화, 인증서 생성과 관리 등 다양한 작업을 수행할 수 있습니다.