일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 권한
- 스프링
- spring boot
- 스프링부트
- 시큐리티
- Refactoring
- assertj
- 리팩토링
- load balancing
- clean code
- gdg
- JWT
- 클린코드
- Security
- JPA
- java
- g1
- OAuth
- GC
- apache
- Producer
- 비동기
- jvm
- oauth2
- 페이징
- RabbitMQ
- 페이스북
- Spring
- tomcat
- 스프링 부트
- Today
- Total
허원철의 개발 블로그
OpenSSL로 https 사용해 보기 본문
이번 편은 Apache에 OpenSSL를 이용하여 https 프로토콜을 사용해보도록 하겠습니다.
HTTP 통신을 하면 도메인의 정보와 그에 대한 데이터가 그대로 노출이 됩니다. 그래서 HTTP 통신의 취약점을 보완하기 위해 주고 받는 모든 메시지를 암호화하여 메시지를 교환합니다. 이런 프로토콜을 HTTPS 이라고 합니다.
HTTPS를 사용하기 위해서는 인증서가 필요한데, 이런 인증서는 사설 인증서, OpenSSL에서 제공하는 인증서가 있습니다. OpenSSL은 내부 어플리케이션이나 테스트 용도로 적당할 것 입니다. (물론 사설 인증서가 훨씬 강력한 보안이 되니 안전하겠죠?)
Apache SSL모듈 사용하기
1) apache에 mod_ssl.so가 있는지 확인합니다.
1 | sudo ls /etc/httpd/modules/ | cs |
※ mod_ssl.so가 없다면 yum명령어로 설치할 수 있습니다.
1 | yum -y install mod_ssl | cs |
2) httpd.conf에 ssl모듈이 활성화시킵니다.
1 2 3 | ... LoadModule ssl_module modules/mod_ssl.so ... | cs |
OpenSSL Key, CSR, CRT 만들기
- 기본옵션으로 진행하므로, 세부 설정은 따로 참고 바랍니다.
1) Private Key 생성
1 | openssl genrsa -out {이름}.key 2048 | cs |
- RSA 키(2048bit) 암호화(2048bit 권장)
- 비밀번호를 등록한 후, 꼭 기억하시기 바랍니다!!
2) 인증서 서명 파일 생성
1 | openssl req -new -key {이름}.key -out {이름}.csr | cs |
- 인증서에 대한 정보를 입력합니다.
- common name에 사용하게 될 도메인을 등록합니다.
3) 자가 서명 인증서 생성
1 | openssl x509 -req -days 365 -in {이름}.csr -signkey {이름}.key -out {이름}.crt | cs |
4) 생성된 key, csr, crt 복사
1 2 3 | cp {이름}.crt /etc/pki/tls/certs/ cp {이름}.key /etc/pki/tls/private/ cp {이름}.csr /etc/pki/tls/private/ | cs |
- /etc/pki/tls 경로에 두어야만 ssl 서비스를 제공이 가능합니다.
※ SELinux에 의해 해당 파일들이 삭제될 수 있습니다. 해당 설정을 내리거나 만약 사용 중에 삭제 되었다면 복원 명령어를 입력합니다.
1 | restorecon -RvF /etc/pki | cs |
Apache에 SSL 설정하기
1) httpd.conf을 수정합니다.
① 인증서관련 Path 설정
1 2 3 4 | ... SSLCertificationFile /etc/pki/tls/certs/{이름}.crt SSLCertificationKeyFile /etc/pki/tls/certs/{이름}.key ... | cs |
② NameVirtualHost 변경
1 2 3 | ... NameVirtualHost *:443 ... | cs |
③ Listen 변경
1 2 3 | ... Listen 443 ... | cs |
④ VirtualHost 수정
1 2 3 4 5 6 7 8 9 | <VirtualHost *:443> ... SSLEngine on SSLCertificationFile /etc/pki/tls/certs/{이름}.crt SSLCertificationKeyFile /etc/pki/tls/certs/{이름}.key ServerAdmin {common name} ServerName {common name} ... </VirtualHost> | cs |
2) Apache 재시작
1 | service httpd restart | cs |
※ 등록해둔 비밀번호를 입력하면 Apache가 실행됩니다.
방화벽 설정
1 | vi /etc/sysconfig/iptables | cs |
1) 443포트 추가
1 2 3 | ... -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 ... | cs |
2) iptable 재시작
1 | service iptables restart | cs |
Add
- SSL 검증을 위해 아래 사이트에서 테스트 해볼 수 있습니다.
- SSL 취약점 발견으로 SSL을 막도록 합니다(TLS만 제공합니다.)
1 | SSLProtocol All -SSLv2 -SSLv3 | cs |
- RC4를 비활성화 하고, 알고리즘을 변화시킵니다.
1 2 | SSLHonorCipherOrder On SSLCipherSuite ALL:!ADH:!EXP:!LOW:!RC2:!3DES:!SEED:!RC4:+HIGH:+MEDIUM | cs |
참고
http://egloos.zum.com/guswl47/v/6514311
https://www.lesstif.com/pages/viewpage.action?pageId=6979614
https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
'server' 카테고리의 다른 글
ELK Stack 개념 정리 (430) | 2017.02.23 |
---|---|
Apache - version 2.4 설치하기 (404) | 2017.02.23 |
Apache - httpd.conf 설정 하기 (438) | 2017.02.01 |
Session Clustering 알아보기 (417) | 2016.12.11 |
[펌] Tomcat Tuning (420) | 2016.12.04 |