OpenSSL은 오픈 소스 암호화 라이브러리로, 다음에서 사용되는 다양한 명령을 포함합니다: TLS Protocol 및 Public Key Infrastructure. OpenSSL은 1998년에 출시되었으며 Windows, Linux, macOS 및 BSD 시스템에서 사용할 수 있습니다. OpenSSL 명령은 인증서 서명 요청(CSR), 개인 키 생성 및 SSL 인증을 포함한 다양한 작업을 수행하는 데 도움이 됩니다.
OpenSSL은 올바른 SSL 구현을 보장하기 때문에 중요합니다. SSL을 올바른 방법으로 획득하는 것은 웹사이트 보안에 매우 중요합니다. 또한 최고의 검색 엔진인 Google은 SSL 인증서가 적용된 웹사이트에 우선순위를 부여합니다. Chrome 및 Firefox와 같은 일부 브라우저는 올바른 SSL 인증서가 없는 경우 웹사이트를 '안전하지 않음'으로 표시할 수 있습니다. 따라서 웹사이트 트래픽을 암호화된 HTTPS 프로토콜을 통해 전송하는 것이 매우 중요합니다.
가장 먼저 알아야 할 사항
이 튜토리얼은 치트 시트 스타일의 가이드로, 일상적인 시나리오에서 사용할 수 있는 일부 OpenSSL 명령을 포함하고 있지만 모든 명령을 담고 있지는 않습니다.
첫 번째 파트에서는 다음에 대해 알아야 할 모든 것을 설명합니다: Certificate Signing Requests (CSR). 하지만 이미 이에 대해 잘 알고 있다면 달성하고자 하는 작업과 관련된 다른 섹션으로 건너뛸 수 있습니다. 각 섹션에는 부제목에 표시된 작업을 수행하기 위한 명령줄 스니펫이 포함되어 있습니다.
시작해 보겠습니다!
섹션 1: 인증서 서명 요청(CSR) 이해하기
인증서 서명 요청(CSR)은 인증 기관(CA)으로부터 SSL 인증서를 발급받을 때 필수적인 선행 조건입니다. CSR에는 키 쌍의 공개 키와 몇 가지 추가 정보가 포함됩니다. 서명 프로세스 중에 이를 인증서에 삽입해야 합니다.
CSR 생성 중에 고유 이름(DN)으로 알려진 식별 정보를 제공하라는 메시지가 표시됩니다. DN에는 인증서를 사용할 호스트의 정확한 정규화된 도메인 이름(FQDN)인 일반 이름(CN)과 같이 인증서에 필요한 필드가 포함되어 있습니다. DN의 다른 필드는 국가, 주, 지역 이름, 비즈니스에 특화된 인증서를 생성하는 경우 조직 또는 회사 이름과 같은 추가 정보를 위한 것입니다. 파일에서 정보를 제공하거나 명령줄을 통해 정보를 제공하여 프롬프트를 건너뛰도록 선택할 수 있습니다.
아래 스크린샷에서 CSR 정보 프롬프트의 예를 확인해 보세요:
|
1 2 3 4 5 6 7 |
Country Name (2 letter code) [AU]:CH State 또는 Province Name (full name) [Some-State]:Zürich Locality Name (eg, city) []:Old Town Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Cloudsigma 회사 Organizational Unit Name (eg, section) []:Cloud Technology Common Name (e.g. server FQDN 또는 YOUR name) []:cloudsigma.com Email Address []:info@cloudsigma.com |
아래에 표시된 것처럼 -subj 플래그를 추가하고 필드에 대한 정보를 제공하여 프롬프트를 피하기 위해 한 줄 명령으로 정보를 제공할 수 있습니다:
|
1 |
-subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
위의 명령은 CSR 정보 프롬프트의 코드 블록 예시에 표시된 것과 동일한 정보를 가져옵니다.
섹션 2: 인증서 서명 요청 생성
이 섹션에서는 CSR 및 개인 키를 생성하는 데 사용할 수 있는 OpenSSL 명령을 다룹니다. CSR은 인증 기관(CA)에 SSL 인증서를 요청하는 데 필요합니다.
개인 키 및 인증서 서명 요청(CSR) 생성
인증 기관(CA)이 SSL 인증서를 발급하여 귀하의 Apache 또는 Nginx 서버를 보호하고 HTTPS(즉, TLS를 사용하는 HTTP)를 통해 트래픽을 서비스하려는 경우 이 방법을 사용할 수 있습니다. 이 명령으로 생성된 CSR은 CA에 전송하여 CA 서명 SSL 인증서를 요청할 수 있습니다. 다음에서 귀하의 Apache 또는 Nginx 서버를 Ubuntu에 설정하는 방법에 대한 자세한 가이드를 따를 수 있습니다.
터미널에 다음 명령을 입력하여 2048비트 개인 키(domain.key) 및 CSR(domain.csr)을 처음부터 생성합니다:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr |
프롬프트에 특정 CSR 정보를 입력합니다. 선택적으로 명령에 -subj 플래그를 추가하여 프롬프트를 피할 수 있습니다:
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
The -newkey rsa:2048 플래그는 2048비트 RSA 알고리즘을 사용하여 키를 생성하도록 지정합니다. -nodes 플래그는 개인 키에 대한 암호문 암호화가 없음을 나타냅니다. -new 옵션은 포함되어 있지 않지만 새로운 CSR이 생성됨을 나타내기 위해 암시되어 있습니다.
기존 개인 키에서 인증서 서명 요청(CSR) 생성
이미 개인 키가 있는 경우 이 방법을 사용하여 CSR을 생성할 수 있습니다. 그런 다음 이를 사용하여 CA에 SSL 인증서를 요청합니다. 다음 명령을 입력하여 새 CSR(domain.csr)을 기존 개인 키(domain.key):
|
1 |
openssl req -key domain.key -new -out domain.csr |
프롬프트에 특정 CSR 정보를 입력합니다. 선택적으로 명령에 -subj 플래그를 추가하여 프롬프트를 피할 수 있습니다:
|
1 |
openssl req -key domain.key -new -out domain.csr -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
The flag -key 플래그는 새 CSR을 생성하는 데 사용할 기존 개인 키(domain.key)를 지정합니다. -new 플래그는 새 CSR이 생성되고 있음을 나타냅니다.
기존 인증서 및 개인 키에서 인증서 서명 요청(CSR) 생성
CSR을 생성하는 데 사용하려는 기존 인증서가 이미 있는 경우 이 방법을 사용할 수 있습니다. 이 방법은 귀하 또는 귀하의 CA가 원본 CSR을 분실하여 이전에 입력한 CSR 정보를 다시 입력할 필요 없이 해당 정보를 사용하여 CSR을 생성해야 할 때 유용할 수 있습니다. 이 명령은 기존 인증서에서 정보를 추출합니다. 터미널에 다음 명령을 입력하여 새 CSR(domain.csr)을(를) 기존 인증서(domain.crt) 및 기존 개인 키(domain.key):
|
1 |
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr |
-x509toreq 옵션은 X509 인증서를 사용하여 CSR을 생성함을 나타냅니다.
섹션 3: SSL 인증서 생성
어떤 상황에서는 CA 서명 인증서를 받는 번거로움 없이 SSL 인증서를 사용하고자 할 수 있습니다. 이 섹션에서는 자체 인증서에 서명하는 방법을 설명합니다. 이는 유효하며 무료입니다. 이러한 인증서는 자체 서명 인증서라고 하며, 매우 흔하게 사용됩니다.
자체 서명된 인증서는 자체 개인 키로 서명됩니다. 자체 서명된 인증서와 CA 서명 인증서 모두 데이터 및 웹사이트 트래픽을 암호화하는 데 동일하게 잘 작동합니다. 그러나 자체 서명된 인증서를 사용하면 사용자는 일반적으로 브라우저에서 인증서를 신뢰할 수 없다는 경고를 받게 됩니다. 따라서 사용자와 민감한 정보를 교환하지 않는 웹사이트나 비프로덕션 서버에서 자체 서명된 인증서를 사용할 수 있습니다. 아래에서 자체 서명된 인증서를 생성하는 데 사용할 수 있는 OpenSSL 명령을 찾을 수 있습니다.
- 자체 서명된 인증서 생성하기
이 방법을 사용하여 Apache 또는 Nginx 서버를 보호하기 위한 SSL 인증서를 생성할 수 있습니다. 이를 통해 인증서 서명을 위해 CA로 이동하지 않고도 트래픽이 HTTPS 또는 HTTP over TLS로 전송되도록 할 수 있습니다.
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt |
특정 CSR 정보로 프롬프트에 응답합니다. 선택적으로 다음을 추가할 수 있습니다. -subj 플래그를 명령에 추가하여 프롬프트를 피할 수 있습니다.
|
1 |
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
The -x509 플래그는 자체 서명된 인증서의 생성을 나타냅니다. -days 365 옵션은 인증서가 유효한 일수를 지정합니다. 이 경우 365일입니다. 다른 일수를 선택할 수도 있습니다. 이 명령은 인증서와 연결해야 하는 정보를 보관하기 위해 임시 CSR을 생성합니다.
- 기존 개인 키에서 자체 서명된 인증서 생성하기
이 방법은 이미 존재하는 개인 키에서 자체 서명된 인증서를 생성하는 데 도움이 됩니다. 다음 명령을 입력하여 자체 서명된 인증서를 생성합니다 (domain.crt) 기존 개인 키를 사용하여 (domain.key):
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt |
특정 CSR 정보와 함께 프롬프트에 입력합니다. 선택적으로 다음을 추가할 수 있습니다. -subj 플래그를 명령에 추가하여 프롬프트를 생략할 수 있습니다:
|
1 |
openssl req -key domain.key -new -x509 -days 365 -out domain.crt -subj "/C=CH/ST=Zürich/L=Old Town/O=Example Cloudsigma Company/CN=cloudsigma.com" |
The -x509 플래그는 자체 서명된 인증서 생성을 나타냅니다. -days 365 옵션은 인증서가 유효할 일수를 지정합니다. 이 경우 365일입니다. 다른 일수를 선택할 수도 있습니다. -new 옵션은 CSR 정보 프롬프트를 시작합니다.
섹션 4: 인증서 보기
인증서 및 CSR 파일은 인코딩되어 다음 .pem 확장자로 저장됩니다. 이는 Privacy-Enhanced Mail의 약자입니다. 암호화 키, 인증서 및 기타 중요한 데이터를 저장하고 전송하기 위한 파일 형식입니다. PEM 파일은 사람이 쉽게 읽을 수 없습니다. 이 섹션에서는 인코딩된 PEM 파일의 항목을 보는 데 사용할 수 있는 명령을 찾을 수 있습니다.
- CSR 파일 보기
터미널에서 CSR (domain.csr)의 내용을 보고 확인하려면 다음 명령을 입력하십시오:
|
1 |
openssl req -text -noout -verify -in domain.csr |
예를 들어, 위 명령은 다음과 같은 내용을 출력할 수 있습니다:

- 인증서 항목 보기
다음 명령을 입력하여 인증서 (domain.crt):
|
1 |
openssl x509 -text -noout -in domain.crt |
위 명령은 다음과 같은 내용을 출력할 수 있습니다:

- 인증서가 인증 기관(CA)에 의해 서명되었는지 확인
인증서 (domain.crt)가 특정 CA 인증서 (ca.crt)에 의해 서명되었는지 확인하려면 다음 명령을 입력하십시오:
|
1 |
openssl verify -verbose -CAfile ca.crt domain.crt |
섹션 5: 개인 키
개인 키를 생성하고 검증하는 데 필요한 OpenSSL 명령어를 찾고 계신다면, 이 섹션이 도움이 될 것입니다.
- 개인 키 생성하기
비밀번호로 보호되는 2048비트 개인 키(domain.key)를 생성하려면 터미널에 다음 명령어를 입력하세요:
|
1 |
openssl genrsa -des3 -out domain.key 2048 |
프로세스를 완료하기 위해 명령어에서 비밀번호를 입력하라는 메시지가 표시됩니다. 아래 스크린샷을 참조하세요:

- 개인 키 검증하기
개인 키(domain.key)의 유효성을 검증하려면 터미널에 다음 명령어를 입력하세요:
|
1 |
openssl rsa -check -in domain.key |
그런 다음 비밀번호를 제공해야 합니다. 개인 키가 암호화되어 있고 올바른 암호(passphrase)를 입력하면 암호화되지 않은 키가 터미널에 표시됩니다. 아래 스크린샷을 참조하세요:

- 개인 키가 인증서 및 CSR과 일치하는지 확인하기
개인 키(domain.key)가 인증서(domain.crt) 및 CSR(domain.csr)과 일치하는지 확인하려면 터미널에 다음 명령어를 입력하세요:
|
1 2 3 |
openssl rsa -noout -modulus -in domain.key | openssl md5 openssl x509 -noout -modulus -in domain.crt | openssl md5 openssl req -noout -modulus -in domain.csr | openssl md5 |
위 명령어들의 출력이 동일하다면 개인 키, 인증서, CSR이 서로 연관되어 있을 가능성이 높습니다.
- 개인 키 암호화하기
암호화되지 않은 개인 키(unencrypted.key)가 있고 이 키의 암호화된 버전(encrypted.key)을 얻으려면 터미널에 다음 명령어를 입력하세요:
|
1 |
openssl rsa -des3 -in unencrypted.key -out encrypted.key |
명령어에서 개인 키를 암호화하기 위한 암호(passphrase)를 입력하라는 메시지가 표시됩니다.
- 개인 키 복호화하기
암호화된 개인 키(encrypted.key)가 있고 이 키의 복호화된 버전(decrypted.key)을 얻으려면 터미널에 다음 명령어를 입력하세요:
|
1 |
openssl rsa -in encrypted.key -out decrypted.key |
이 명령은 암호화된 키의 비밀번호(passphrase)를 묻는 메시지를 표시합니다. 올바른 비밀번호를 입력하면 암호가 해독됩니다. 출력은 다음으로 이동합니다: decrypted.key.
섹션 6: 인증서 형식 변환
지금까지 우리가 X.509 인증서로 작업해 왔다는 것을 눈치채셨을 것입니다. 이 인증서는 ASCII PEM으로 인코딩되어 있습니다. 그것도 괜찮지만, 사용할 수 있는 다른 다양한 인증서 인코딩 및 컨테이너 유형이 있습니다. 일부 애플리케이션에서는 다른 형식보다 특정 형식을 선호할 수 있습니다. 또한 일부 다른 형식은 개인 키, CSR 및 CA 서명 인증서와 같은 여러 항목을 하나의 파일에 담을 수 있습니다. OpenSSL을 사용하여 다양한 인증서 형식 간에 변환할 수도 있습니다. 인증서 형식 변환을 위한 몇 가지 OpenSSL 명령을 계속 읽어보세요.
- PEM을 DER로 변환
DER(Distinguished Encoding Rules)는 X.509 인증서 및 개인 키를 위한 바이너리 인코딩입니다. PEM 인코딩된 인증서(domain.crt)를 DER 인코딩된 인증서(domain.der)로 변환하려면 다음 명령을 입력하십시오:
|
1 |
openssl x509 -in domain.crt -outform der -out domain.der |
DER 인코딩 형식의 대부분의 사용 사례는 Java 프로그래밍 언어에서 볼 수 있습니다. 이 Ubuntu 서버에서 Java를 빠르게 설정하는 튜토리얼을 참고하십시오.
- DER을 PEM으로 변환
DER 인코딩된 인증서(domain.der)를 PEM 인증서(domain.crt)로 변환하려면 다음 명령을 입력하십시오:
|
1 |
openssl x509 -inform der -in domain.der -out domain.crt<code> |
- PEM을 PKCS7으로 변환
예를 들어, domain.crt 및 ca-chain.crt와 같은 PEM 인증서를 PKCS7 파일(domain.p7b)에 추가하고자 할 수 있습니다. 이를 수행하는 명령은 다음과 같습니다:
|
1 |
openssl crl2pkcs7 -nocrl -certfile domain.crt -certfile ca-chain.crt -out domain.p7b |
다음을 사용할 수 있습니다: -certfile 옵션을 여러 번 사용하여 PKCS7 파일에 추가할 인증서를 지정합니다. PKCS7 파일은 주로 Java Key stores 및 Microsoft IIS와 관련이 있습니다. P7B 파일로도 알려져 있으며, 인증서 및 CA 서명 인증서로 구성될 수 있는 ASCII 파일입니다.
- PKCS7을 PEM으로 변환
PKCS7 파일(domain.p7b)을 PEM 인코딩된 파일(domain.crt)로 변환하려면 터미널에 다음 명령어를 입력하십시오:
|
1 |
openssl pkcs7 -in domain.p7b -print_certs -out domain.crt |
- PEM을 PKCS12로 변환
개인 키(domain.key)와 인증서(domain.crt)를 하나의 PKCS12 파일(domain.pfx)로 결합하려면 다음 명령어를 입력하십시오:
|
1 |
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx |
이 명령어는 내보내기 비밀번호를 입력하라는 메시지를 표시하며, 이 비밀번호는 선택 사항이므로 비워 둘 수 있습니다. 단일 PEM 파일(domain.crt)에 인증서를 연결하여 여러 인증서를 PKCS12 파일에 체인으로 연결할 수 있습니다. PKCS12는 PFX로도 알려져 있으며 주로 다음 환경에서 사용됩니다: Microsoft IIS.
- PKCS12를 PEM으로 변환
PKCS12 파일(domain.pfx)을 PEM 인코딩된 형식(domain.combined.crt)으로 변환하려면 다음 명령어를 입력하십시오:
|
1 |
openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt |
위의 명령어로 생성된 PEM 파일에는 PKCS12가 보유하고 있던 여러 항목이 모두 포함되어 있습니다.
섹션 7: OpenSSL 버전 확인
실행 중인 소프트웨어의 버전은 실행 중인 애플리케이션의 기능에 영향을 미칠 수 있습니다. 따라서 버전을 확인할 필요가 있습니다. OpenSSL도 마찬가지입니다. 일부 명령줄 옵션은 특정 버전에는 없고 다른 버전에는 있을 수 있습니다. 실행 중인 OpenSSL 버전을 보려면 다음 명령어를 입력하십시오:
|
1 |
openssl version -a |
다음은 이 튜토리얼을 작성하면서 위의 명령을 실행했을 때 얻은 출력 결과입니다:
|
1 2 3 4 5 6 7 8 |
OpenSSL 1.1.1i 8 Dec 2020 built on: Sat Dec 19 15:39:47 2020 UTC platform: linux-x86_64 options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG OPENSSLDIR: "/usr/local/ssl" ENGINESDIR: "/usr/local/lib/engines-1.1" Seeding source: os-specific |
아래에서 실제 스크린샷을 확인할 수 있습니다:

결론
이 튜토리얼에서는 OpenSSL이 무엇인지 설명하고, 인증서 서명 요청(CSR) 및 서버 환경에서 사용할 수 있는 몇 가지 중요한 OpenSSL 명령어를 다루었습니다.
중요한 명령어가 누락되었거나, 다음에서 서버를 설정하는 중에 명령어 관련 문제를 겪고 계신가요? CloudSigma? 언제든지 저희 24/7 고객 지원 팀에 실시간 채팅으로 문의하여 상담을 받아보세요.
즐거운 컴퓨팅 되세요!
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.