개요
사설 CA 인증서를 이용하여 ssl 인증서 발급하는 방법
구성환경
apache 2.4.41 / openssl 1.0.2k-16 / centos 7.6
1. ROOT CA 인증서 생성
1.1. 개인키 생성
shell> openssl genrsa -aes256 -out rootca.key 2048
Generating RSA private key, 2048 bit long modulus ....................................+++ .....................................+++ e is 65537 (0x10001) Enter pass phrase for rootca.key: <개인키 패스워드 입력> Verifying - Enter pass phrase for rootca.key: <개인키 패스워드 입력> |
1.2. CSR(Certificate Signed Request : 인증요청서 생성) 생성
shell> openssl req -new -key rootca.key -out rootca.csr -config /etc/pki/tls/openssl.cnf
Enter pass phrase for rootca.key: <rootca.key 패스워드> 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) [XX]:KR State or Province Name (full name) []:Seoul Locality Name (eg, city) [Default City]:GangNam Organization Name (eg, company) [Default Company Ltd]:FliedCat Corp. Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:Self singed FliedCat rootCA Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: |
1.3. 자체 서명(self signed) 인증서 생성
- 유효기간 10년 자체 서명 인증서 생성
shell> openssl x509 -days 3650 -req -set_serial 01 -in rootca.csr -signkey rootca.key -out rootca.crt -extfile /etc/pki/tls/openssl.cnf -extensions v3_ca
- -set_serial : CA인증서의 일련번호
2. SSL 인증서 생성
2.1. 개인키 생성
shell>openssl genrsa -aes256 -out private.key 2048
Generating RSA private key, 2048 bit long modulus .....................+++ ........................................................................................+++ e is 65537 (0x10001) Enter pass phrase for private.key: <개인키 패스워드 입력> Verifying - Enter pass phrase for private.key: < 개인키 패스워드 입력> |
2.2. CSR(Certificate Signed Request : 인증요청서 생성) 생성
shell> openssl req -new -key private.key -out server.csr -config /etc/pki/tls/openssl.cnf
Enter pass phrase for private.key: <private.key 패스워드> 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) [XX]:KR State or Province Name (full name) []:Seoul Locality Name (eg, city) [Default City]:GangNam Organization Name (eg, company) [Default Company Ltd]:HOYA Corp. Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:www.hoya.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: |
2.3 인증서 생성
shell> cp /etc/pki/tls/openssl.cnf host_openssl.cnf
- 주체대체이름 설정(host_openssl.cnf 파일)
- 웹브라우저는 인증서 유효 검사시 도메인 이름이 인증서의 CN 또는 주체대체이름(subjectAltName)과 비교하여 일치 하지 않으면 경고메시지를 보낸다.
예) host_openssl.conf 파일
[ req ] ...... req_extensions = v3_req # The extensions to add to a certificate request => 맨 앞의 주석 제거 ...... [ v3_req ] ..... subjectAltName = @alternate_names => [ v3_req ] 섹션에 추가, 이렇게 함으로써 alternate_names 항목을 읽음 # [ alternate_names] 섹션을 추가 하고 해당 섹션에 대체이름을 추가 한다. [ alternate_names ] DNS.1 = hoya.com DNS.2 = www.hoya.com DNS.3 = fliedcat.hoya.com DNS.4 = *.hoya.com |
shell> openssl x509 -req -days 730 -in server.csr -CA rootca.crt -CAcreateserial -CAkey rootca.key -out server.crt -extfile host_openssl.cnf -extensions v3_req
- -CAcreateserial : 인증서 일련번호 파일 생성, <CA인증서이름>.srl 파일명으로 생성, 인증서 일련번호 파일이 존재한다면 -CAserial <filename> 옵션 사용
- -days : 현시간부터 인증서의 유효기간
- -extensions <v3_req> : host_openssl.cnf 파일에서 subjectAltName을 포함하는 섹션(여기서는 v3_req) 이름
3. 웹서버 적용
- 이제 1, 2 항목에서 만들어진 CA인증서(rootca.crt), 개인키(private.key),인증서(server.crt) 3개의 파일을 가지고 apache의 httpd-ssl.conf 파일을 수정해 준다.
3.1. 개인키(private.key) 파일에서 패스워드 제거( 웹구동시마다 패스워드 입력이 번거럽다면 개인키에서 패스워드 제거, 선택 사항)
shell>openssl rsa -in private.key -out private.pem
Enter pass phrase for private.key : <개인키 패스워드 입력> writing RSA key |
3.2. httpd-ssl.conf 수정
SSLCertificateFile "/usr/local/httpd/conf/ssl/server.crt" SSLCertificateKeyFile "/usr/local/httpd/conf/ssl/private.pem" SSLCACertificateFile "/usr/local/httpd/conf/ssl/rootca.crt" |
- SSLCertificateFile : 서버인증서 위치
- SSLCertificateKeyFile : 개인키 파일 위치
- SSLCACertificateFile : CA 인증서 파일 위치
3.3 인증서 확인
'WEB & WAS > Apache' 카테고리의 다른 글
debian Apache Reverse Proxy 설정 (0) | 2021.10.31 |
---|---|
[Apache] http2 적용 (0) | 2019.11.25 |