본문 바로가기

WEB & WAS/Apache

[Apache] SSL 인증서 설치

반응형

개요

사설 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