본문 바로가기

리눅스

OpenSSL을 사용하여 자체 서명된 SSL/TLS 인증서를 생성하는 방법

728x90

OpenSSL을 사용하여 자체 서명된 SSL/TLS 인증서를 생성하는 방법

자체 서명된(셀프 서명된) SSL/TLS 인증서를 생성하려면 OpenSSL을 사용할 수 있습니다.

1. CSR 및 키 생성

openssl req -newkey rsa:4096 \
-x509 \
-sha256 \
-days 3650 \
-nodes \
-out _wildcard_example_com.crt \
-keyout _wildcard_example_com.key \
-subj "/C=KR/ST=Seoul/L=Jongno-gu/O=SangChul Co., Ltd./OU=Infrastructure Team/CN=*.example.com"
  • req : CSR (Certificate Signing Request)을 생성하는 OpenSSL 명령어입니다.
  • newkey rsa:4096 : 4096비트 RSA 개인 키를 생성합니다.
  • x509 : 셀프 서명된 인증서를 생성합니다.
  • sha256 : SHA-256 해시 알고리즘을 사용합니다.
  • days 3650 : 인증서의 유효 기간을 10년으로 설정합니다.
  • nodes : 개인 키를 암호화하지 않습니다.
  • out _wildcard_example_com.crt : 생성된 인증서 파일의 이름을 설정합니다.
  • keyout _wildcard_example_com.key : 생성된 개인 키 파일의 이름을 설정합니다.
  • subj : 서브젝트 필드를 지정하여 CSR에 내용을 추가합니다.
$ openssl req -newkey rsa:4096 \
> -x509 \
> -sha256 \
> -days 3650 \
> -nodes \
> -out _wildcard_example_com.crt \
> -keyout _wildcard_example_com.key \
> -subj "/C=KR/ST=Seoul/L=Jongno-gu/O=SangChul Co., Ltd./OU=Infrastructure Team/CN=*.example.com"
Generating a 4096 bit RSA private key
.............................................................................++
......................................................................++
writing new private key to '_wildcard_example_com.key'
-----

2. 암호화된 개인 키 생성

openssl genpkey -algorithm RSA -out _wildcard_example_com.key -aes256
  • genpkey : 개인 키를 생성하는 OpenSSL 명령어입니다.
  • algorithm RSA : RSA 알고리즘을 사용합니다.
  • out _wildcard_example_com.key : 생성된 개인 키 파일의 이름을 설정합니다.
  • aes256 : 256비트 AES 알고리즘을 사용하여 개인 키를 암호화합니다.
$ openssl genpkey -algorithm RSA -out _wildcard_example_com.key -aes256
.......................................++++++
..............++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

3. 암호화된 개인 키 확인

openssl rsa -in _wildcard_example_com.key -text
  • rsa : RSA 개인 키를 다루는 OpenSSL 명령어입니다.
  • -in _wildcard_example_com.key : 입력 파일로 지정된 암호화된 개인 키 파일의 내용을 출력합니다.
  • -text : 개인 키의 텍스트 형식으로 표시합니다.
$ openssl rsa -in _wildcard_example_com.key -text
Enter pass phrase for _wildcard_example_com.key:
Private-Key: (1024 bit)
modulus:
    00:bc:77:bd:41:24:a4:e9:90:8a:a9:c2:21:27:e4:
    12:e1:c7:b4:1d:de:a8:56:8c:a2:4c:f9:e2:31:03:
    6f:ed:57:16:13:9e:95:10:ef:76:87:b0:88:92:f0:
    f2:85:c8:6e:5e:dc:22:e3:b3:43:de:8e:60:19:2f:
    ff:46:42:3c:c2:fb:39:7e:e3:07:55:ed:cb:41:4b:
    55:3b:bd:e8:38:32:94:75:0e:eb:ba:4e:dd:76:cf:
    9e:ea:66:6e:b2:40:07:f6:e2:11:f6:09:44:97:76:
    ea:1d:b1:ae:61:76:97:60:cf:48:73:be:fb:c6:48:
    ed:bd:0e:e8:cd:ff:20:06:b5
publicExponent: 65537 (0x10001)
...
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQC8d71BJKTpkIqpwiEn5BLhx7Qd3qhWjKJM+eIxA2/tVxYTnpUQ
73aHsIiS8PKFyG5e3CLjs0PejmAZL/9GQjzC+zl+4wdV7ctBS1U7veg4MpR1Duu6
Tt12z57qZm6yQAf24hH2CUSXduodsa5hdpdgz0hzvvvGSO29DujN/yAGtQIDAQAB
AoGBAK6HbBkxaA5rLh26ip24VcwD9cZbdSSBI6OJHHArMLFnnigZCQ4f03Ighrkc
rFo7nAn4bc7TKZyl2FQ64HkdycllCZS5Vdb0E8nrSinAYpoholOV1J65jSDOo2gK
rAzeel6qOdPYg2kFEZOZbjvlLsBbI7GOAJq+eh07Z4sW2bYBAkEA9iaIyKI6j3Po
RqZIfpmOZ2TKt0JcyiqO7MqVimvF7DMTmamkQKbKOKUYVIX+lErdhXpK9XgS6cJg
LVj86wxT9QJBAMQCU3BKiAMBqyQq2ZcTxGR0ivNCl33zTp/ellEDqLdzaOlcpK+W
yOEwcSRbU9yCQzcGnuNwRvGT+W+TUNHH78ECQQDdircnpOOCA3c2RykOUNSbeFr/
b8ol5wH2WysWh4N+4EWu0sFTswpkyyrHwEXuYCdaoEPhBK45GEoJ5oLUZqcVAkBZ
PKnaLMSBgef1vmBz7Lbz+S8tkvq/h98a387VsXHFm5B+9gOwQVjRVSmdoMqsUM3j
Jmt+JqbV40Wjq5EXAQzBAkEAl1PHiANnUdwfqBkr5ZD86rtqii1Pinz+D3xxHXrk
wHURVgpunwDMvAzySSLVYfd70btTKr9P+SGGX8S+V/M82A==
-----END RSA PRIVATE KEY-----
728x90

4. 암호 없는 개인 키 생성

openssl rsa -in _wildcard_example_com.key -out nopassword_wildcard_example_com.key
  • -out nopassword_wildcard_example_com.key : 암호가 없는 개인 키를 저장할 파일의 이름을 설정합니다.
$ openssl rsa -in _wildcard_example_com.key -out nopassword_wildcard_example_com.key
Enter pass phrase for _wildcard_example_com.key:
writing RSA key

5. 암호 없는 개인 키 확인

openssl rsa -in nopassword_wildcard_example_com.key -text
  • 다시 한 번 암호 없는 개인 키 파일의 내용을 확인합니다.
$ openssl rsa -in nopassword_wildcard_example_com.key -text
Private-Key: (1024 bit)
modulus:
    00:bc:77:bd:41:24:a4:e9:90:8a:a9:c2:21:27:e4:
    12:e1:c7:b4:1d:de:a8:56:8c:a2:4c:f9:e2:31:03:
    6f:ed:57:16:13:9e:95:10:ef:76:87:b0:88:92:f0:
    f2:85:c8:6e:5e:dc:22:e3:b3:43:de:8e:60:19:2f:
    ff:46:42:3c:c2:fb:39:7e:e3:07:55:ed:cb:41:4b:
    55:3b:bd:e8:38:32:94:75:0e:eb:ba:4e:dd:76:cf:
    9e:ea:66:6e:b2:40:07:f6:e2:11:f6:09:44:97:76:
    ea:1d:b1:ae:61:76:97:60:cf:48:73:be:fb:c6:48:
    ed:bd:0e:e8:cd:ff:20:06:b5
publicExponent: 65537 (0x10001)
...
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQC8d71BJKTpkIqpwiEn5BLhx7Qd3qhWjKJM+eIxA2/tVxYTnpUQ
73aHsIiS8PKFyG5e3CLjs0PejmAZL/9GQjzC+zl+4wdV7ctBS1U7veg4MpR1Duu6
Tt12z57qZm6yQAf24hH2CUSXduodsa5hdpdgz0hzvvvGSO29DujN/yAGtQIDAQAB
AoGBAK6HbBkxaA5rLh26ip24VcwD9cZbdSSBI6OJHHArMLFnnigZCQ4f03Ighrkc
rFo7nAn4bc7TKZyl2FQ64HkdycllCZS5Vdb0E8nrSinAYpoholOV1J65jSDOo2gK
rAzeel6qOdPYg2kFEZOZbjvlLsBbI7GOAJq+eh07Z4sW2bYBAkEA9iaIyKI6j3Po
RqZIfpmOZ2TKt0JcyiqO7MqVimvF7DMTmamkQKbKOKUYVIX+lErdhXpK9XgS6cJg
LVj86wxT9QJBAMQCU3BKiAMBqyQq2ZcTxGR0ivNCl33zTp/ellEDqLdzaOlcpK+W
yOEwcSRbU9yCQzcGnuNwRvGT+W+TUNHH78ECQQDdircnpOOCA3c2RykOUNSbeFr/
b8ol5wH2WysWh4N+4EWu0sFTswpkyyrHwEXuYCdaoEPhBK45GEoJ5oLUZqcVAkBZ
PKnaLMSBgef1vmBz7Lbz+S8tkvq/h98a387VsXHFm5B+9gOwQVjRVSmdoMqsUM3j
Jmt+JqbV40Wjq5EXAQzBAkEAl1PHiANnUdwfqBkr5ZD86rtqii1Pinz+D3xxHXrk
wHURVgpunwDMvAzySSLVYfd70btTKr9P+SGGX8S+V/M82A==
-----END RSA PRIVATE KEY-----

6. 인증서 정보 확인

openssl x509 -in _wildcard_example_com.crt -noout -subject -startdate -enddate
  • x509 : X.509 형식의 인증서를 다루는 OpenSSL 명령어입니다.
  • -in _wildcard_example_com.crt : 입력 파일로 지정된 인증서 파일의 내용을 출력합니다.
  • -noout : 인증서 내용을 출력하지 않고, 주어진 옵션만 출력합니다.
  • -subject : 서브젝트 정보를 출력합니다.
  • -startdate : 인증서의 시작일을 출력합니다.
  • -enddate : 인증서의 만료일을 출력합니다.
$ openssl x509 -in _wildcard_example_com.crt -noout -subject -startdate -enddate
subject= /C=KR/ST=Seoul/L=Jongno-gu/O=SangChul Co., Ltd./OU=Infrastructure Team/CN=*.example.com
notBefore=Jan 18 06:10:51 2024 GMT
notAfter=Jan 15 06:10:51 2034 GMT

 

제목= /C=KR/ST=서울/L=종로구/O=(주)상철
 
728x90