안녕세계
[Web] Apache에 무료 SSL 인증서 적용 (개발용) 본문
[Web] Apache에 무료 SSL 인증서 적용 (개발용)
Junhong Kim 2018. 5. 2. 15:09Apache 웹 서버에 무료 인증서 적용 (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 포스팅에서 확인하실 수 있습니다.
'Infra > Web' 카테고리의 다른 글
[Web] 크롬 캐시 및 쿠키 삭제 (0) | 2018.12.01 |
---|---|
[Web] Apache에 유료 SSL 인증서 적용 (배포용) (0) | 2018.05.02 |
[Web] HTTP와 HTTPS 그리고 SSL (0) | 2018.05.02 |