[Linux] 리눅스 서버 openssl 인증서 만들기
- IT/리눅스(Linux)
- 2022. 11. 20.
리눅스 사설인증서 만들기 SSL
오늘은 리눅스 서버에서 SSL 사설 인증서를 생성하는 방법에 대해서 알아보도록 하겠습니다. 내 사이트를 호스팅 하겠다는 목적이라면 공인 인증된 기관에서 발급된 사설 인증서가 필요하지만, 내부적으로 사용할 목적이라면 openssl을 이용해서 직접 만들어 보시는 것을 추천 드립니다.
openssl이 설치되어 있어야 합니다.
# rpm -qa | grep openssl
명령어를 통해서 openssl 설치 여부를 확인하실 수 있습니다.
개인 키 발급 .key
OpenSSL> genrsa -out [파일명.key] 2048
- 비밀번호가 없는 개인 키 생성
- https의 ssl 인증서는 서비스를 등록할 때 마다 비밀번호를 입력해야하기 때문에 비밀번호 없이 사용
OpenSSL> genrsa -des3 -out [파일명] 2048
- 비밀번호가 담긴 개인 키 생성 : 암호 및 암호 확인 절차 추가됨
- 공인 인증서의 경우 암호 필요
공개키 발급
개인키와 쌍이 되는 공개키 발급
OpenSSL> rsa -in private.key -pubout -out public.key
writing RSA key
CSR(인증기관 인증요청서) 만들기
SSL 인증 정보를 암호화하여 인증기관 CA에 보내 인증서를 발급받게 하는 신청서
OpenSSL> req -new -key [private key 파일명] -out [파일명.csr]
환경설정파일 강제지정 옵션 추가
OpenSSL> req -config ./openssl.cnf -new -key private.pem -out private.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Kangnam-gu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany.Ltd
Organizational Unit Name (eg, section) []:RnD Center
Common Name (e.g. server FQDN or YOUR name) []:MyDomain.MyCompany.com
Email Address []:manager@MyCompany.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:password
An optional company name []:MyCompany2
주의사항 : 특수문자 금지, CSR과 Private Key는 쌍으로 관리되어야 함.
마지막 challenge password, optional company name 는 안넣는것이 좋습니다.
CSR 인증서 정보 확인
OpenSSL> req -noout -text -in [파일명.csr]
나에게 서명을 해줄 CA가 필요합니다.
rootCA.key 생성하기
genrsa -[암호화 알고리즘] -out [키이름.key] 2048
패스워드 필수
CRT 인증서 만들기
명령어 : openssl req -x509 -days [기간] -key [private key 파일명] -in [csr 파일명] -out [파일명] -days [기간]
# openssl req -x509 -days 365 -key private.key -in private.csr -out mycommoncrt.pem -days 365
key를 이용하여 1년짜리 pem 생성
만들어 놓은 csr로 rootCA의 인증을 받아 private.crt 생성
x509 -req -in private.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out private.crt -days 3650
인증서 Config 파일 (test.conf)
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C=KR
ST=Seoul
L=Seoul
O=COMPANY
OU=DEV
emailAddress=test@test.com
CN = testmachine
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 111.111.111.111
DNS.1 = test.com
SSL 인증서를 만들다 보면 계속 같은 내용을 써야 합니다. 그래서 그 부분을 파일로 만들어 놓고 csr, crt 생성할때 사용하면 됩니다.
openssl req -new -key private.key -out private.csr -config test.conf
openssl req -x509 -days 365 -key private.key -in private.csr -out mycommoncrt.crt -days 365 -config test.conf
그리고 이렇게 해서 인증서를 만들었을때 subjectAltName 이 안들어갑니다 . 그 부분이 필요할 경우에는 아래와 같이 명령어를 사용하면 됩니다.
openssl req -x509 -days 365 -key private.key -in private.csr -out mycommoncrt.crt -days 365 -config test.conf -extensions req_ext
인증서 내용 확인하기
openssl x509 -text -noout -in <인증서파일> : 인증서 내용을 볼수 있다.