매일 업데이트
2022-11-25 19:45 8 min

실생활에서 도움이 되는 21가지 OpenSSL 예시

OpenSSL을 활용한 SSL 인증서 생성, 관리 및 형식 변환 가이드

SSL 인증서의 생성, 변환 및 관리 작업에 있어 OpenSSL은 가장 널리 사용되는 도구 중 하나입니다. 이 도구를 활용하는 다양한 상황에 대비하여, 자주 사용되는 OpenSSL 명령들을 유용한 치트 시트 형태로 정리했습니다.

본 가이드에서는 실제 환경에서 자주 사용되는 OpenSSL 명령어들을 자세히 알아보고, 각 명령어가 어떻게 활용될 수 있는지 설명합니다.

인증서 관련 용어에 대한 간략한 설명은 다음과 같습니다.

  • SSL – 보안 소켓 계층(Secure Sockets Layer)
  • CSR – 인증서 서명 요청(Certificate Signing Request)
  • TLS – 전송 계층 보안(Transport Layer Security)
  • PEM – 개인 정보 보호 강화 메일(Privacy Enhanced Mail)
  • DER – 고유 인코딩 규칙(Distinguished Encoding Rules)
  • SHA – 보안 해시 알고리즘(Secure Hash Algorithm)
  • PKCS – 공개 키 암호화 표준(Public Key Cryptography Standards)

참고: SSL/TLS 운영 과정에 대한 이해를 높이면 본 가이드 내용 이해에 더욱 도움이 될 수 있습니다.

새로운 개인 키와 인증서 서명 요청(CSR) 생성

openssl req -out koreantech.org.csr -newkey rsa:2048 -nodes -keyout koreantech.org.key

위 명령어는 2048비트 RSA 키와 함께 CSR 파일을 생성합니다. 생성된 CSR 파일은 인증서 발급 기관에 제출해야 하며, 발급 기관은 서명된 인증서를 der 또는 pem 형식으로 제공합니다. 이 인증서는 일반적으로 Apache 또는 Nginx 웹 서버에 구성됩니다.

자체 서명된 인증서 생성

openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem

이 명령어는 2048비트 RSA 키를 사용하여 자체 서명된 인증서와 키 파일을 생성합니다. 최신 보안 표준을 준수하기 위해 SHA256 해시 알고리즘을 포함했습니다.

팁: 자체 서명된 인증서는 기본적으로 한 달만 유효합니다. 필요에 따라 -days 매개변수를 사용하여 유효 기간을 연장할 수 있습니다.

예: 2년 유효 기간의 자체 서명 인증서 생성:

openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem

CSR 파일 내용 확인

openssl req -noout -text -in koreantech.org.csr

CSR 파일을 인증 기관에 보내기 전에 필요한 정보가 정확하게 포함되어 있는지 확인하는 것이 중요합니다. 이 명령어를 사용하면 CSR 파일의 세부 내용을 검토할 수 있습니다.

RSA 개인 키 생성

openssl genrsa -out private.key 2048

이 명령어를 사용하면 RSA 개인 키를 생성할 수 있습니다. 2048비트는 더욱 강력한 암호화를 제공합니다.

개인 키에서 암호 제거

openssl rsa -in certkey.key -out nopassphrase.key

개인 키에 암호가 설정되어 있으면 Apache 서버 시작 시마다 암호를 입력해야 합니다. openssl rsa -in yourkey.key -check 명령어를 사용하여 개인 키에서 암호를 제거할 수 있습니다.

개인 키 유효성 확인

openssl rsa -in certkey.key –check

개인 키 파일에 의심스러운 점이 있을 경우, 이 명령어를 사용하여 유효성을 검사할 수 있습니다.

인증서 파일 내용 확인

openssl x509 -in certfile.pem -text –noout

인증서 파일의 CN (Common Name), OU (Organizational Unit) 등과 같은 세부 정보를 확인하려면 이 명령어를 사용하세요.

인증서 발급 기관 확인

openssl x509 -in certfile.pem -noout -issuer -issuer_hash

이 명령어를 사용하여 인증서에 서명한 발급 기관을 확인할 수 있습니다.

인증서의 해시 값 확인

openssl x509 -noout -hash -in bestflare.pem

인증서의 해시 값을 확인하려면 이 명령어를 사용합니다.

DER 형식을 PEM 형식으로 변환

openssl x509 –inform der –in sslcert.der –out sslcert.pem

인증 기관에서 제공하는 .der 형식의 인증서를 Apache 서버 등에서 사용하기 위해 .pem 형식으로 변환해야 할 경우 이 명령어를 사용합니다.

PEM 형식을 DER 형식으로 변환

openssl x509 –outform der –in sslcert.pem –out sslcert.der

반대로 .pem 형식의 인증서를 .der 형식으로 변환해야 할 때 이 명령어를 사용합니다.

인증서 및 개인 키를 PKCS#12 형식으로 변환

openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem

Java 애플리케이션 등 PKCS#12 형식의 인증서를 요구하는 환경에서 사용하기 위해 인증서와 개인 키를 하나의 pfx 파일로 결합할 때 사용합니다.

팁: 다음과 같이 -chain 옵션을 사용하여 체인 인증서를 포함할 수 있습니다.

openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem -chain cacert.pem

기존 개인 키를 사용하여 CSR 생성

openssl req –out certificate.csr –key existing.key –new

새로운 개인 키를 생성하는 대신 기존 개인 키를 사용하여 CSR을 생성하고 싶을 때 이 명령어를 사용합니다.

PKCS12 형식 인증서 내용 확인

openssl pkcs12 –info –nodes –in cert.p12

PKCS12 형식은 바이너리 형식이므로 일반 편집기로 내용을 확인할 수 없습니다. 이 명령어를 사용하면 PKCS12 파일의 내용을 볼 수 있습니다.

PKCS12 형식을 PEM 형식의 인증서로 변환

openssl pkcs12 –in cert.p12 –out cert.pem

기존 PKCS12 형식을 Apache 서버나 .pem 형식으로 사용해야 할 경우에 유용합니다.

특정 URL의 SSL 인증서 테스트

openssl s_client -connect yoururl.com:443 –showcerts

이 명령어는 특정 URL의 SSL 인증서를 서버에서 확인하는 데 자주 사용됩니다. 프로토콜, 암호 및 인증서 세부 정보를 검증하는 데 매우 편리합니다.

OpenSSL 버전 확인

openssl version

OpenSSL 보안을 관리하는 데 있어 가장 먼저 해야 할 일 중 하나는 현재 사용 중인 OpenSSL 버전을 확인하는 것입니다.

PEM 파일 인증서 만료 날짜 확인

openssl x509 -noout -in certificate.pem -dates

인증서 만료일을 모니터링하려면 이 명령어가 유용합니다. notBeforenotAfter 구문으로 날짜를 표시하며, notAfter 값은 인증서 만료 여부를 확인하는 데 사용됩니다.

예시:

[[email protected] opt]# openssl x509 -noout -in bestflare.pem -dates
notBefore=Jul 4 14:02:45 2015 GMT
notAfter=Aug 4 09:46:42 2015 GMT
[[email protected] opt]#

SSL URL의 인증서 만료일 확인

openssl s_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout –enddate

특정 URL의 SSL 인증서 만료일을 원격으로 모니터링해야 할 경우에 유용합니다.

예시:

[[email protected] opt]# openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate

notAfter=Dec 8 00:00:00 2015 GMT

URL에서 SSL V2 또는 V3가 허용되는지 확인

SSL V2 확인:

openssl s_client -connect secureurl.com:443 -ssl2

SSL V3 확인:

openssl s_client -connect secureurl.com:443 –ssl3

TLS 1.0 확인:

openssl s_client -connect secureurl.com:443 –tls1

TLS 1.1 확인:

openssl s_client -connect secureurl.com:443 –tls1_1

TLS 1.2 확인:

openssl s_client -connect secureurl.com:443 –tls1_2

웹 서버의 보안 상태를 점검하고 SSL V2/V3가 활성화되어 있는지 확인하려면 이 명령어들을 사용합니다. 활성화되어 있으면 "CONNECTED" 또는 "handshake 실패" 메시지가 나타납니다.

URL에서 특정 암호가 허용되는지 확인

openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443

보안 감사 결과 또는 침투 테스트 결과 특정 취약한 암호가 허용되는 것으로 나타났을 때, 이 명령어를 사용하여 해당 암호의 유효성을 검사할 수 있습니다. 테스트하려는 암호와 URL을 변경해야 합니다. 해당 암호가 허용되면 "CONNECTED" 또는 "handshake 실패" 메시지가 표시됩니다.

위에서 소개된 OpenSSL 명령어들을 통해 웹사이트의 SSL 인증서를 더욱 효율적으로 관리할 수 있기를 바랍니다.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.