Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

SSL/TLS 인증서를 생성하는 작업은 많은 리눅스 시스템 관리자에게 익숙한 업무입니다. 다행히도 관리자가 아니더라도 OpenSSL이라는 오픈소스 도구를 사용하면 어렵지 않게 처리할 수 있습니다. OpenSSL은 수많은 리눅스 배포판에 기본적으로 탑재되어 있기 때문입니다. 이 글에서는 OpenSSL이 무엇인지, 어떻게 설치하는지, 그리고 가장 중요한 시스템에서 SSL/TLS 인증서를 생성하는 방법까지 차근차근 알아보겠습니다.

OpenSSL이란?

OpenSSL은 네트워크 트래픽 암호화를 위한 오픈소스 SSL/TLS 구현체를 제공하기 위해 OpenSSL 프로젝트가 개발한 라이브러리입니다. 다양한 유닉스 기반 배포판에서 손쉽게 사용할 수 있으며, 인증서와 RSA 개인 키를 생성하는 것은 물론 일반적인 암호화 관련 작업 전반을 수행하는 데 활용됩니다.

자체 서명(Self-Signed) SSL 인증서의 한계

OpenSSL로 SSL 인증서를 생성하면 그 결과물은 '자체 서명(self-signed)' 인증서가 됩니다. 즉, 공인 인증 기관(CA)이 아닌 자신의 개인 키로 서명된 인증서라는 의미입니다.

따라서 이런 인증서는 '신뢰할 수 있는' 것으로 간주되지 않으며, 외부에 공개되는 웹사이트에는 사용하지 않는 것이 좋습니다. 사용할 경우 방문자의 브라우저에서 인증서 관련 경고가 표시될 가능성이 높습니다.

자체 서명 인증서는 로컬 개발 환경이나 인터넷에 노출되지 않는 백그라운드 애플리케이션 등 내부 용도로 활용하기에 적합합니다. 반면 공개 사이트용 인증서가 필요하다면 Let's Encrypt를 이용하거나 Comodo CA처럼 신뢰할 수 있는 인증 기관에서 발급받는 것이 좋습니다.

OpenSSL 설치 방법

대부분의 리눅스 배포판에는 OpenSSL이 기본으로 포함되어 있습니다. 만약 설치되어 있지 않다면 아주 간단하게 설치할 수 있습니다.

데비안(Debian)이나 우분투(Ubuntu) 계열에서는 apt 명령어로 설치합니다:

sudo apt install openssl

CentOS(또는 그 계열 배포판)에서는 yum 명령어를 사용합니다:

sudo yum install openssl

또는 공식 웹사이트에서 '.tar.gz' 파일 형태로 직접 다운로드해 설치할 수도 있습니다.

기본 사용법

OpenSSL 설치를 마쳤다면, 프로그램이 제공하는 몇 가지 기본 기능부터 살펴보겠습니다.

먼저 설치된 OpenSSL의 버전과 관련 정보를 확인할 수 있습니다:

openssl version -a
리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

프로그램에서 제공하는 도움말(매뉴얼)도 확인해 보세요:

openssl help
리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

설정 파일을 이용한 인증서 생성

OpenSSL로 인증서를 생성하는 방법은 여러 가지가 있으며, 그중 하나는 조직 정보를 미리 지정해 둔 설정 파일을 활용하는 것입니다.

먼저 'example.conf'라는 이름의 설정 파일을 만들고 nano 편집기로 열어 편집합니다:

sudo nano example.conf

설정 파일 내용 예시는 다음과 같습니다:

[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
x509_extensions= v3_ca
distinguished_name = dn
 
[dn]
C = US
ST = California
L = Los Angeles
O = Org
OU = Sales
emailAddress = test@test.com
CN = www.org.test.com
 
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = CA:true
 
[req_ext]
subjectAltName = @alt_names
 
[alt_names]
DNS.1 = test.example.com

위 내용을 복사해 붙여넣은 뒤, 자신의 조직 정보에 맞게 필요한 부분만 수정하면 됩니다.

리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

다음으로 RSA 개인 키를 생성합니다. 이 키는 이후 루트 인증서를 만드는 데 사용됩니다:

openssl genrsa -out example.key 2048

-out 플래그는 생성될 키 파일의 이름을 지정하는 데 사용되며, 키 크기는 2048비트(RSA 키의 기본값)로 지정했습니다.

리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

이어서 인증서 서명 요청(CSR)을 생성해야 합니다:

openssl req -new -key example.key -out example.csr -config example.conf

여기서 -key 플래그는 사용할 RSA 키를, -out 플래그는 생성될 CSR 파일의 이름을, -config 플래그는 참조할 설정 파일의 이름을 지정합니다.

그다음에는 최종 인증서를 발급하는 데 사용할 루트 인증서를 생성합니다:

openssl req -x509 -sha256 -nodes -new -key example.key -out example.crt -config example.conf

루트 인증서를 생성하는 과정에서 -sha256 플래그는 메시지 다이제스트(message digest)로 SHA256을 사용하도록 지정합니다.

이제 마지막 단계입니다. 다음 명령어를 입력하면 드디어 인증서가 생성됩니다:

openssl x509 -sha256 -CAcreateserial -req -days 30 -in example.csr -extfile example.conf -CA example.crt -CAkey example.key -out final.crt

-CA 플래그는 루트 인증서를, -CAkey 플래그는 개인 키를, -extfile은 설정 파일의 이름을 각각 지정합니다. 생성된 'final.crt' 파일이 바로 여러분이 원하는 SSL 인증서입니다.

리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

설정 파일 없이 인증서 생성하기

설정 파일을 따로 준비하지 않고도 OpenSSL로 인증서를 생성할 수 있습니다.

먼저 RSA 개인 키를 생성합니다:

openssl genrsa -out example.key 2048

다음으로 CSR(인증서 서명 요청)을 생성합니다:

openssl req -new -key example.key -out example.csr

CSR을 생성하는 과정에서는 조직에 대한 정보를 입력하라는 질문들이 순차적으로 표시됩니다.

리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

마지막으로 인증서 자체를 생성합니다:

openssl x509 -req -days 30 -in example.csr -signkey example.key -out example.crt
리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

키 및 인증서 검증하기

OpenSSL을 사용하면 -check 플래그를 통해 키와 인증서를 손쉽게 확인하고 검증할 수 있습니다:

openssl rsa -check -in example.key
리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

인증서 서명 요청(CSR)의 내용도 확인할 수 있습니다:

openssl req -text -noout -in example.csr

발급된 인증서 역시 동일한 방식으로 확인할 수 있습니다:

openssl x509 -text -noout -in example.crt
리눅스에서 OpenSSL로 SSL 인증서 생성하는 방법 완벽 가이드

자주 묻는 질문(FAQ)

1. 하트블리드(Heartbleed) 취약점은 여전히 걱정해야 할까요?

하트블리드(CVE-2014-0160)는 2014년 OpenSSL에서 발견된 오래된 취약점으로, 당시 OpenSSL을 사용하는 TLS 서버와 클라이언트 모두 그 영향을 받았습니다. 다행히 취약점이 공개된 며칠 만에 패치가 신속하게 배포되었으며, 최신 버전의 OpenSSL을 사용하고 있다면 지금은 더 이상 걱정할 필요가 없습니다.

데비안이나 우분투 기반 시스템에서 OpenSSL을 사용 중이라면 다음 명령어로 항상 최신 상태를 유지할 수 있습니다:

sudo apt update && sudo apt upgrade openssl

2. SSL 인증서의 유효 기간은 얼마나 되나요?

유효 기간은 인증서를 생성할 때 지정한 값에 따라 달라집니다. 인증서 발급 시 -days 플래그를 사용해 원하는 유효 기간(일 단위)을 직접 설정할 수 있습니다.