안녕하세요.
쉽게 시작하는 비즈니스 토탈 IT 브랜드, 아이티이지(ITEASY) 입니다.
지난 포스팅에서 구형 OS(운영체제) SSL 인증서 문제에 대한 해결 방법에 대해서 말씀드렸었는데요. 관련 내용은 아래의 링크를 클릭하여 확인해 주세요!😊👇
오늘은 구형 OS SSL 인증서 문제 관련하여 참고하면 좋은 매뉴얼에 대해서 공유하려고 합니다.
OpenSSL 매뉴얼에 대해서 알려드릴게요. 먼저, OpneSSL이 무엇인지 말씀드리겠습니다!
1️⃣ OpenSSL 소개
1-1. OpenSSL의 정의와 주요 기능
OpenSSL은 SSL/TLS 프로토콜을 구현한 오픈소스 암호화 라이브러리로, 인터넷 상의 보안 통신을 지원합니다. 주요 기능은 다음과 같습니다.
- SSL/TLS 프로토콜 지원
- RSA, DSA, ECDSA와 같은 암호화 알고리즘 제공
- 디지털 인증서 생성 및 관리
- 파일 암호화, 복호화, 해시 계산 등 다양한 암호화 작업 수행
OpenSSL은 1998년에 처음 출시되었으며, HTTPS 웹사이트의 대부분에서 사용됩니다.
이는 오픈소스 프로젝트로, 누구나 자유롭게 수정 및 배포 가능합니다.
1-2. OpenSSL의 중요성과 사용 사례
OpenSSL은 웹 서버, 이메일 서버, VPN 등 다양한 보안 통신에 필수적입니다. 예를 들어, HTTPS 연결을 설정하거나, 자체 서명 인증서를 생성할 때 사용됩니다. 또한, 파일 암호화 및 디지털 서명 검증에도 활용됩니다.
2️⃣ 설치
OpenSSL은 다양한 운영 체제에서 설치 가능하며, 아래는 Linux, Windows, macOS에 대한 상세 지침입니다.
2-1. Linux
대부분의 Linux 배포판에서 패키지 관리자를 통해 설치 가능합니다.
▶ Ubuntu/Debian
1. 패키지 목록 업데이트
sudo apt update
2. OpenSSL 설치
sudo apt install OpenSSL
▶ 설치 후 버전 확인
openssl version
▶ Red Hat/CentOS
1. 패키지 목록 업데이트
sudo yum update
2. OpenSSL 설치
sudo yum install OpenSSL
2-2. Windows
Windows에서는 Chocolatey 패키지 관리자 또는 공식 바이너리 다운로드를 통해 설치 가능합니다.
▶ Chocolatey 사용
1. Chocolatey 설치 확인 또는 설치
2. 명령어 실행
choco install OpenSSL
▶ 수동 설치
1. 공식 사이트(Win32OpenSSL)에서 최신 바이너리 다운로드
2. 제공된 지침에 따라 설치 완료
2-3. macOS
macOS에서는 Homebrew를 통해 설치하며, 시스템의 LibreSSL과 구분하여 PATH 설정 필요
▶ Homebrew 사용
1. Homebrew 설치 확인 또는 설치
2. 명령어 실행
brew install OpenSSL
3. Homebrew 버전 사용을 위해 PATH 설정
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >>
~/.zshrc
source ~/.zshrc
macOS 기본적으로 LibreSSL이 포함되어 있지만, 최신 기능은 Homebrew 버전 사용 권장
3️⃣ 기본 사용법
OpenSSL은 명령줄 도구를 통해 다양한 암호화 작업을 수행할 수 있습니다.
아래는 일반적인 명령어와 사용 예제입니다.
3-1. 개인 키 생성
1. RSA 개인 키 생성
openssl genpkey -algorithm RSA -out private_key.pem
2. 옵션 설명 : -algorithm RSA는 RSA 알고리즘 사용, -out은 출력 파일 지정
3-2. 인증서 서명 요청(CSR) 생성
1. 기존 개인 키로 CSR 생성
openssl req -new -key private_key.pem -out CSR.pem
2. 실행 시 조직명, 도메인 등 추가 정보 입력 요청
3-3. 자체 서명 인증서 생성
1. 테스트용 자체 서명 인증서 생성
openssl req -x509 -newkey RSA:2048 -keyout key.pem -out cert.pem -days 365
2. 2048비트 RSA 키 생성, 365일 유효
3-4. 파일 암호화 및 복호화
1. 파일 암호화(AES-256-CBC 사용)
openssl enc -aes-256-cbc -in input.txt -out encrypted.txt -pass pass:yourpassword
2. 파일 복호화
openssl enc -d -aes-256-cbc -in encrypted.txt -out decrypted.txt -pass pass:yourpassword
3-5. 인증서 정보 확인
1. 인증서 내용 확인
openssl x509 -in cert.pem -text -noout
2. 인증서의 유효 기간, 발급자, 주체 정보 등 확인 가능
3-6. SSL 연결 확인
1. 서버와 SSL 연결 테스트
openssl s_client -connect example.com:443
2. 서버 인증서 체인과 연결 상태 확인
3-7. 형식 변환
1. PEM에서 DER 형식으로 변환
openssl x509 -in cert.pem -out cert.der -outform DER
2. DER에서 PEM으로 변환
openssl x509 -in cert.der -out cert.pem -inform DER
이 명령어들은 OpenSSL의 기본적인 사용법을 다룹니다. 추가 명령어는 openssl help로 확인 가능합니다.
4️⃣ 고급 주제
4-1. 인증 기관(CA) 관리
자체 CA 설정은 내부 네트워크나 테스트 환경에서 유용합니다.
▶ 루트 CA 키 및 인증서 생성
openssl genpkey -algorithm RSA -out root_ca_key.pem
openssl req -x509 -new -key root_ca_key.pem -out root_ca_cert.pem -days 3650 -extensions v3_ca -config <(cat /etc/openssl/openssl.cnf <(printf "[v3_ca]\nsubjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid:always,issuer\nbasicConstraints=critical,CA:true,pathlen:0\nkeyUsage=critical,digitalSignature,keyCertSign\n"))
▶ 중간 CA 키 및 인증서 생성
openssl genpkey -algorithm RSA -out intermediate_ca_key.pem
openssl req -new -key intermediate_ca_key.pem -out intermediate_ca_csr.pem
▶ 중간 CA CSR 루트 CA로 서명
openssl x509 -req -in intermediate_ca_csr.pem -CA root_ca_cert.pem -CAkey root_ca_key.pem -out intermediate_ca_cert.pem -days 3650 -extensions v3_intermediate_ca -extfile <(cat /etc/openssl/openssl.cnf <(printf "[v3_intermediate_ca]\nsubjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid:always,issuer\nbasicConstraints=critical,CA:true,pathlen:1\nkeyUsage=critical,digitalSignature,keyCertSign\n"))
▶ 서버 키 및 CSR 생성, 서명
openssl genpkey -algorithm RSA -out server_key.pem
openssl req -new -key server_key.pem -out server_csr.pem
openssl x509 -req -in server_csr.pem -CA intermediate_ca_cert.pem -CAkey intermediate_ca_key.pem -out server_cert.pem -days 365 -extensions v3_server -extfile <(cat /etc/openssl/openssl.cnf <(printf "[v3_server]\nsubjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid:always,issuer\nbasicConstraints=critical,CA:false\nkeyUsage=digitalSignature\n"))
4-2. 웹 서버와의 통합
Apache 및 NGINX에서 OpenSSL 사용 설정
▶ Apache : mod_ssl 모듈 설치 후 가상 호스트 설정
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
SSLCertificateChainFile /path/to/intermediate/cert.pem
</VirtualHost>
▶ NGINX : 서버 블록 설정
server {
listen 443 ssl;
server_name example.com;
root /var/www/html;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_trusted_certificate /path/to/intermediate/cert.pem;
}
4-3. 다중 도메인(SAN) 관리
다중 도메인 인증서 생성 시 SAN 사용
1. 설정 파일(openssl.cnf) 생성
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = domain1.com
DNS.2 = domain2.com
DNS.3 = domain3.com
2. CSR 생성
openssl req -new -key server_key.pem -out server_csr.pem -config openssl.cnf
4-4. 문제 해결 및 디버깅
SSL 연결 문제 진단
▶ 서버 연결 확인
openssl s_client -connect example.com:443
▶ 인증서 체인 검증
openssl verify -CAfile root_ca_cert.pem -untrusted intermediate_ca_cert.pem server_cert.pem
▶ 특정 프로토콜 버전 테스트
openssl s_client -connect example.com:443 -ssl3
▶ 디버깅 모드
openssl s_client -connect example.com:443 -debug
5️⃣ 일반적인 문제 및 해결 방법
| 문제 | 원인 | 해결 방법 |
| 인증서 신뢰 문제 | 인증서 체인 누락 또는 루트 CA 미신뢰 | 전체 체인 설치 및 클라이언트 신뢰 확인 |
| 핸드셰이크 실패 | 프로토콜/암호화 방식 불일치 | 서버 설정 확인, 클라이언트와 호환성 점검 |
| 개인 키와 인증서 불일치 | 키와 인증서 불일치 | openssl x509 -noout -modulus로 비교 |
| 인증서 만료 | 유효 기간 초과 | openssl x509 -text -noout로 확인 후 갱신 |
6️⃣ 보안 고려사항
- OpenSSL은 과거 심각한 보안 취약점(예: Heartbleed)을 겪었으므로 최신 버전 유지 필수
- RSA 키는 2048비트 이상, 최신 암호화 알고리즘 사용 권장
- 민감 정보는 환경 변수나 Docker Secrets로 관리
OpenSSL은 보안 통신을 위한 필수 도구로, 기본 사용법과 고급 기능을 익히면 다양한 암호화 작업을 효율적으로 수행이 가능합니다. 최신 보안 권장 사항을 따르고, 정기적으로 업데이트하여 시스템을 보호하고 강화하시길 바랍니다.
추가로 궁금하신 점이 있다면 언제든지 문의 남겨주세요.
아래 이미지를 클릭 시 아이티이지 홈페이지로 이동합니다!

오늘 알려드린 ‘OpenSSL 매뉴얼’이 도움이 되셨길 바라면서, 기술 포스팅을 마무리하겠습니다.
다음 포스팅에서는 ‘PHP-fpm 매뉴얼’에 대해 다룰 예정입니다. 기대해 주세요🙏
아이티이지의 다양한 IT 이벤트를 확인하고 싶다면?

감사합니다.
IT is easy, ITEASY💙
