개요
네트워크 데이터 통신에 사용되는 프로토콜인 TLS/SSL 오픈 소스 구현판으로, 기본적인 암호화 기능 및 여러 유틸리티 함수가 구현되어 있다. 거의 모든 버전의 유닉스 계열 운영 체제 및 윈도우에서 OpenSSL을 이용할 수 있다.
이 글에서는 간단히 개인 키 생성, 인증서 서명 요청 생성과 정보 확인을 위한 명령어를 정리한다.
개인 키(Private Key) 생성
genrsa 명령은 RSA 개인 키를 생성한다. 키를 생성할 때는 생성할 개인 키의 크기를 마지막으로 지정해야 한다. 기본값은 2048이다.
openssl genrsa -out <user.key> 2048
# -out : 키를 저장할 파일 경로
# -passout : 암호화 시 사용할 비밀번호
# 예시
openssl genrsa -out test_user.key 2048
암호화를 사용하면 사용할 암호화 알고리즘을 지정한다. 사용할 수 있는 암호화 알고리즘은 -aes128|-aes192|-aes256|-aria128|-aria192|-aria256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea 이며 비밀번호를 요구한다. -passout 옵션으로 비밀번호를 명령어를 통해 바로 지정할 수 있다.
CSR(Certificate Signing Request) 생성
req 명령은 인증서 서명 요청서(Certificate Signing Request)을 생성하고 처리한다.
새 CSR를 생성할 때는 DN(Distinguished Name)을 구성할 필드 값을 입력할 터미널이 표시된다. 일부 속성에는 기본값이 있으므로 값을 비우고 싶을 때는 .을 입력한다.
또는 -subj 옵션에 /type0=value0/type1=value1/... 형식으로 값을 전달해야 한다.
openssl req -new -key <user.key> -out <user.csr>
# -new : 새 CSR을 생성한다.
# -key : 새 CSR 생성 시 사용할 개인 키를 지정한다.
# -out : 결과 파일 경로
# -subj : CSR 생성 시 사용할 필드 값을 전달한다.
# 예시
openssl req -new -key test_user.key -out test_user.csr -subj '/OU=system:masters/CN=test_user'
CSR 정보 확인
생성한 CSR의 정보를 확인할 때는 -text 옵션을 사용한다.
openssl req -in <user.csr> -text -noout
# -in : 처리할 입력 파일 지정
# -text : CSR을 텍스트로 출력한다.
# -noout: 인코딩된 CSR을 출력하지 않는다.
인증서(.crt) 정보 확인
인증서(Certificate) 정보를 확인할 때는 아래와 같이 사용한다.
openssl x509 -in <*.csr> -noout -text
개인 키, CSR, 인증서 인증 정보 일치 확인
개인 키, CSR, CSR로 생성된 인증서(*.crt) 각각의 인증 정보가 서로 일치하는지 확인한다. -modulus 옵션을 사용하면 공개 키의 계수 값을 출력한다.
openssl rsa -noout -modulus -in <user.key> | openssl md5
openssl req -noout -modulus -in <user.csr> | openssl md5
openssl x509 -noout -modulus -in <user.crt> | openssl md5
참고 문서
https://ko.wikipedia.org/wiki/OpenSSL
https://www.lesstif.com/software-architect/openssl-command-tip-7635159.html
https://repo.yona.io/doortts/blog/post/299
https://www.openssl.org/docs/man1.0.2/man1/genrsa.html