본문으로 바로가기







아파치에 보안을 위한 SSL을 적용할 것이다. SSL을 적용하면 브라우저에서 http가 아닌 https로 접속할 수 있게 된다. 여기서는 OpenSSL을 아파치에 적용할 것이다.


우분투 서버에 아파치가 설치되어 있지 않다면 아래 링크를 통해 설치를 하면 된다.




■ 참고 - https에 대해




OpenSSL 설치 및 인증서 생성



1. OpenSSL 설치


먼저 우분투 패키지를 업데이트하고, OpenSSL이 설치되어있는지 확인해 보자.


[mgt@localserver: ~$sudo apt-get update
[mgt@localserver: ~$sudo openssl version
OpenSSL 1.0.2g  1 Mar 2016



OpenSSL이 설치되어 있다면 위와 같이 버전이 나타날 것이다. 설치되어 있지 않다면 아래 명령어를 입력하여 OpenSSL을 설치한다.


[mgt@localserver: ~$sudo apt-get install openssl




2. 개인키 생성


[mgt@localserver: ~$sudo openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
....................+++
...............................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
139937575311000:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:823:You must type 
in 4 to 1023 characters
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:



개인키 생성 명령어를 입력하고 임의의 개인키 암호를 입력하면 된다. 그러면 서버 개인키인 server.key 파일이 생성된다.



임의의 개인키 암호를 입력한다.



3. CSR(Certificate Sinning Request - 인증요청서) 생성


[mgt@localserver: ~$sudo openssl req -new -days 365 -key server.key -out server.csr
Enter pass phrase for server.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) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Yeongdeungpo
Organization Name (eg, company) [Internet Widgits Pty Ltd]:myspring
Organizational Unit Name (eg, section) []:myspring
Common Name (e.g. server FQDN or YOUR name) []:myspring.local
Email Address []:web@myspring.local



그러면 각종 정보를 입력하는 부분이 나온다. 여기에는 자신의 경우에 맞게 적절히 입력하면 된다.


Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:



다음으로 추가로 정보를 입력하는 부분이 나오는데 엔터키를 두 번 눌러 넘어가면 된다.



정보를 적절히 입력하고, 추가 정보를 입력하는 부분은 엔터키를 눌러 넘어 간다.



4. 개인키 패스워드 제거


개인키에 패스워드가 있으면 아파치 구동 시마다 물어본다. 편의를 위해 개인키 패스워드를 제거한다. 패스워드를 제거하더라도 SSL에는 문제가 없다.


# 기존 개인키 복사
[mgt@localserver: ~$sudo cp server.key server.key.origin
 
# 개인키 패스워드 제거
[mgt@localserver: ~$sudo openssl rsa -in server.key.origin -out server.key
Enter pass phrase for server.key.origin:




패스워드 제거되면 위와같이 나타난다.



6. 인증서 생성


개인키와 인증 요청서를 가지고 인증서를 생성한다.


[mgt@localserver: ~$sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -
out server.crt
Signature ok
subject=/C=KR/ST=Seoul/L=Yeongdeungpo/O=myspring/OU=myspring/CN=myspring.local/email
Address=web@myspring.local
Getting Private key




7. 생성된 인증서 확인하기


[mgt@localserver: ~$] ls -l server*
-rw-r--r-- 1 root root 1070 Nov  9 15:55 server.csr
-rw-r--r-- 1 root root 1675 Nov  9 16:00 server.key
-rw-r--r-- 1 root root 1743 Nov  9 15:59 server.key.origin



# 개인키 확인
[mgt@localserver: ~$] cat server.key | head -3
 
# 인증서 확인
[mgt@localserver: ~$] cat server.crt | head -3




개인키 및 인증서 확인




아파치에 SSL 적용



1. SSL 디렉토리 생성 및 인증서 복사


관리의 편의를 위해 ssl 인증서를 모아둘 디렉토리를 생성한다. 


[mgt@localserver: ~$sudo mkdir /etc/apache2/ssl



생성한 디렉토리로 인증서를 복사한다.


[mgt@localserver: ~$sudo cp server.crt /etc/apache2/ssl/server.crt
[mgt@localserver: ~$sudo cp server.csr /etc/apache2/ssl/server.csr
[mgt@localserver: ~$sudo cp server.key /etc/apache2/ssl/server.key




생성한 디렉토리로 복사



2. SSL 모듈 활성


Apache의 SSL 모듈을 활성화한다. 이때 아파치를 재시작 하라는 메시지가 나오는데, 일단 무시한다.


[mgt@localserver: ~$sudo a2enmod ssl




명령어를 실행하면 위와 같이 나타난다.



3. /etc/apache2/ports.conf 파일 수정


아래 내용을 ports.conf 파일에 추가한다.


[mgt@localserver: ~$sudo nano /etc/apache2/ports.conf
 
# 내용추가
<IfModule mod_ssl.c>
    Listen 443
</IfModule>




ports.conf 파일에 내용 추가



4. default-ssl.conf 파일을 복사


default-ssl.conf 파일을 복사해서 board-ssl.conf로 이름을 변경하였다. 복사한 파일명은 본인이 알기 쉽게 정하면 된다. (ex, 도메인명으로)


sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/board-ssl.conf




해당 경로로 이동해 복사한 파일 확인



5. 복사한 파일 수정


위에서 복사한 파일을 수정한다.


[mgt@localserver: ~$sudo nano /etc/apache2/sites-available/board-ssl.conf
 
# 해당 부분 수정
SSLCertificateFile /etc/apache2/ssl/server.crt 
SSLCertificateKeyFile /etc/apache2/ssl/server.key






표시된 부분을 수정한 모습



다음으로 아래 사진에 표시한 부분의 주석(#)을 제거한다.





6. board-ssl 활성화


[mgt@localserver: ~$sudo a2ensite board-ssl




board-ssl 활성화


7. 방화벽 설정


방화벽에 OpenSSL의 포트인 443 포트로 접속을 허용하도록 변경한다.


[mgt@localserver: ~$sudo ufw allow 443/tcp
Rule added
Rule added (v6)



방화벽 설정을 하고 443포트를 확인해보자.


[mgt@localserver: ~$] netstat -anp | grep LISTEN | grep 443




443 포트가 정상적으로 동작하면 위와같이 나타난다.


8. 아파치 재시작


[mgt@localserver: ~$sudo /etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.




9. SSL 적용확인


아파치를 재시작했으면 브라우저에 https://아이피 주소 또는 https://127.0.0.1( = https://localhost 와 동일하다.)을 입력한다.





개인 서명이라 신뢰할 수 없다고 나온다. 하지만 보안 접속은 정상적으로 잘 된다.






RSS구독 링크추가 트위터 이메일 구독