안녕세계

[Web] Apache에 무료 SSL 인증서 적용 (개발용) 본문

[Web] Apache에 무료 SSL 인증서 적용 (개발용)

Junhong Kim 2018. 5. 2. 15:09
728x90
반응형

Apache 웹 서버에 무료 인증서 적용 (CentOS7 기준)

개인 인증서 발급 (무료)

개발 및 테스트용으로 적합합니다.

1. 필요한 패키지 설치

SSL 암호화를 위해서는 openssl mod_ssl이 필요합니다.
Centos v6.4 이후 버전에는 openssl이 자동 설치되어 있습니다.

# 설치 확인 $ yum list installed openssl $ yum list installed mod_ssl # 설치가 되지 않았을 경우 $ yum install openssl $ yum install mod_ssl

2. Self Signed Certificate 생성 (개인 인증서)

SSC란 인증서를 만들고 개인키로 직접 인증서에 서명하는 것입니다.
이때, openssl을 이용해 SSC를 생성합니다.

  • 2-1. 인증서 관련 디렉토리 생성후 이동
$ mkdir /etc/httpd/ssl && cd /etc/httpd/ssl
  • 2-2. 개인 키 생성
[root@CentOS ssl]# openssl genrsa -out ca.key 1024 Generating RSA private key, 1024 bit long modulus ...++++++ .....................++++++ e is 65537 (0x10001)
  • 2-3. CSR (Certificate Signing Request) 생성

CSR은 인증서 서명 요청을 의미합니다. 즉, 인증서 발급 받기위한 정보를 저장합니다.
Common Name (eg, your name or your server's hostname)은 SSL 설정시 사용됩니다.

[root@CentOS ssl]# openssl req -new -key ca.key -out ca.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) [XX]:KR State or Province Name (full name) []:Seoul Locality Name (eg, city) [Default City]:Seoul Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:INMA Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
  • 2-4. slef signed key 생성
[root@CentOS ssl]# openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt Signature ok subject=/C=KR/ST=Seoul/L=Seoul/O=Default Company Ltd/CN=INMA Getting Private key
  • 2-5. 생성된 파일 확인
[root@CentOS ssl]# ls ca.crt ca.csr ca.key

3. 파일 복사

다음 위치로 파일들을 복사해주는 이유는,
해당 디렉터리에 위치해야 SSL 서비스를 제대로 제공해줄 수 있기 때문입니다.

[root@CentOS ssl]# cp ca.crt /etc/pki/tls/certs/ [root@CentOS ssl]# cp ca.key /etc/pki/tls/private/ [root@CentOS ssl]# cp ca.csr /etc/pki/tls/private/

Note:
SELinux에 의해 Certificate file 들이 삭제 될 수 있습니다.
삭제되었을 경우 다음과 같은 명령어를 사용하여 삭제 된 구문을 복구 시킬 수 있습니다.

# /etc/pki/* 하위의 모든 폴더나 파일에서 삭제된 구문을 복원 $ restorecon -RvF /etc/pki

4. 아파치 SSL 설정 변경

ssl 설정을 수정하기 위해 다음 파일을 열어주세요.

$ vi /etc/httpd/conf.d/ssl.conf

그 다음 아래 두 내용을 localhost에서 ca로 변경해주세요.

# Server Certificate: # SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateFile /etc/pki/tls/certs/ca.crt # Server Private Key: # SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SSLCertificateKeyFile /etc/pki/tls/private/ca.key

5. 아파치 재시작

아파치 설정 수정 내용 적용

# service httpd restart

6. SSL은 암호화 위해 443번 포트를 사용하기 때문에 virtualhost를 추가해야합니다.

vhost 파일이 없을 경우 생성해주세요.

$ vi /etc/httpd/conf.d/vhost.conf

ServerAdmin SeverName에 사용자명 혹은 서버 호스트명을 입력하세요.

NameVirtualHost *:443 <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key # 위에서 작성했던 common name 입니다. ServerAdmin INMA DocumentRoot /var/www/html # 위에서 작성했던 common name 입니다. ServerName INMA ErrorLog logs/ssl_starkapin_com_error_log CustomLog logs/ssl_starkapin_com_error_log common </VirtualHost>

7. 아파치 재시작

아파치 설정 수정 내용 적용

# service httpd restart

8. 방화벽 설정

443 port를 엽니다.

$ firewall-cmd --permanent --zone=public --add-port=443/tcp

방화벽 설정 적용

$ firewall-cmd --reload

설정 확인
Note: /etc/firewalld/zones/public.xml 여기서도 확인 가능합니다.

# firewall-cmd --zone=public --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh dhcpv6-client http https ports: 80/tcp 443/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

9. 아파치 재시작

아파치 설정 수정 내용 적용

# service httpd restart

10. https 프로토콜로 접속

웹 브라우저에서 IP주소를 입력후 정상적으로 접속되는지 확인합니다.
사이트에 접속하게되면 연결이 비공개로 설정되어 있지 않습니다 라는 페이지가 출력됩니다.
왼쪽 하단 고급 > 안전하지 않음으로 이동하면 정상적으로 페이지가 뜨는 것을 확인할 수 있습니다.
페이지가 안전하지 않음이라고 뜨는 이유는,
공인된 CA가 아닌 우리가 만든 인증서로 SSL을 인증했기 때문입니다.
자세한 내용은 HTTPS와 SSL 포스팅에서 확인하실 수 있습니다.


728x90
반응형

'Infra > Web' 카테고리의 다른 글

[Web] 크롬 캐시 및 쿠키 삭제  (0) 2018.12.01
[Web] Apache에 유료 SSL 인증서 적용 (배포용)  (0) 2018.05.02
[Web] HTTP와 HTTPS 그리고 SSL  (0) 2018.05.02
Comments