보안 인증서(SSL)
사이트에서 개인정보를 저장한다면 반드시 보안인증서를 설치해야 한다.
보안인증서의 기본 개념과 이론은 생활코딩을 참조하고, 이 문서의 맨 아래에 있는 참고링크도 꼭 한번씩 살펴보도록 한다.
- SSL이란 무엇인가 1, 2 (미닉스의 작은 이야기들)
- http://www.phpschool.com/link/tipntech/77347
- http://www.phpschool.com/link/tipntech/77348
개인정보란
개인정보의 범위 및 사례
(20131021)개인정보보호법 적용사례 상황별 맞춤 서비스 시나리오(100 …
개인정보 취급방침
인증서의 사용하기
CA(인증서 판매 기업) 선택
인증서를 사용하려면 CA에서 인증서를 구매해야 한다. 무료로 제공하는 곳도 있다. 하지만 무료인 만큼 이런 저런 조건이 붙을 수 있다.
CA를 선택할 때는 신뢰할 수 있는 곳인지를 꼭 확인해야 한다.
여기서는 무료 인증서를 제공하는 https://letsencrypt.org/ 를 사용한다. 단점은 인증기간이 3개월이므로 3개월마다 갱신해야 한다는 거다. 하지만 무료 인증서를 자동배포해주는 https://certbot.eff.org/#ubuntuxenial-apache 를 사용하고 서버의 크론에 등록하면 귀찮은 작업을 하지 않아도 무료인증서를 사용할 수 있다.
유료인증기관으로 믿을 만한 곳은 https://www.comodossl.co.kr 등이 있고, 각 CA의 시장 점유율은 위키피디아에서 볼 수 있다.
준비사항
인증서는 https 프로토콜을 사용하고 https는 443 포트를 사용하므로, 서버의 보안정책의 inbound에 443 포트를 열어주어야 한다.
- 보안정책 점검
보안정책에 HTTPS 를 위한 443 포트가 추가되어 있어야 https:// 사이트가 열린다.
- 아파치의 SSL 모듈을 활성화 한다.
sudo a2enmod ssl
- 아피치를 재시작 한다.
sudo service apache2 restart
- SSL 인증서 관련된 파일을 위치시킬 디렉토리를 만든다.
sudo mkdir /etc/apache2/ssl
- /etc/apache2/ssl 디렉토리에 인증서 파일들을 위치시킨다.
파일들의 경로는 아래와 같다.
- /etc/apache2/ssl/ca.pem
- /etc/apache2/ssl/ssl.crt
- /etc/apache2/ssl/ssl.key
/etc/apache2/ssl/sub.class1.server.ca.pem
보안을 위해서 디렉토리와 파일의 권한을 조정한다.
디렉토리와 파일의 소유자는 root로 지정한다.
sudo chown
-R
root:root /etc/apache2/ssl;
파일의 권한을 600(소유자만 읽기, 쓰기 허용)
sudo chmod 600 /etc/apache2/ssl/*.*
디렉토리의 권한을 700(소유자만 읽기, 쓰기, 실행 허용)
sudo chmod 700 /etc/apache2/ssl;
팔자의 경우 아래와 같은 상태가 되었다.
virtualhost를 설정한다.
하나의 웹서버(apache)에서 여러개의 서비스를 도메인 별로 운영할 수 있도록 돕는 apache의 기능이다. 기본 설정 파일인 /etc/apache2/sites-available/default-ssl을 수정한다. 아래에서는 편집기로 nano를 사용하고 있다. nano에 대한 사용법은
을 참고한다.
default-ssl.conf 를 참조하여 virtualhost 설정에 다음을 추가한다.
<
VirtualHost *:80
>
영역을 그대로 복사하여
<
VirtualHost *:443
>
으로 바꾼다.
ErrorLog 아래에 다음 소스를 추가한다.
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/kcwu.or.kr/kcwu\_or\_kr.crt
SSLCertificateKeyFile /etc/apache2/ssl/kcwu.or.kr/kcwu\_or\_kr\_SHA256WITHRSA.key
SSLCertificateChainFile /etc/apache2/ssl/kcwu.or.kr/rsa-dv.chain-bundle.pem
SSLCACertificateFile /etc/apache2/ssl/kcwu.or.kr/AddTrustExternalCARoot.crt
- apache를 재시작한다.
재시작 할 때 비밀번호를 물어보는 경우가 있다. 이것은
에서 입력한 비밀번호를 입력하면 된다.
https 프로토콜로 접속한다.
(구글 크롬 기준) 아래와 같이 녹색 자물쇠가 도메인 앞에 표시되고, 인증서와 관련된 팝업이 표시된다면 SSL 서비스를 성공적으로 제공하기 시작한 것이다.
드루팔 사이트에서 http를 https로 무조건 redirect 하기
.htaccss 에 다음을 추가한다.
Find the code line:
RewriteEngine
on
다음 코드를 추가한다.
# Redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP\_HOST}%{REQUEST\_URI} [L,R=301]
위 항목을 추가하면 http는 무조건 https 로 연결된다. 따라서 virtual host 설정에서
<
VirtualHost *:
443
>
만 남기고
<
VirtualHost *:80
>
은 삭제해도 된다.
하지만 이렇게하면 front 페이지는 자동으로 바뀌지만, 서브경로는 자동으로 변환되지 않으므로 둘 다 있는게 좋다.
ex)
같은 경우는 자동변환되지 않는다.
Font를 https 로 로드 못하는 문제
크롬
>
개발자도구
>
Console 에서 에러가 나는 곳을 찾는다.
src:url 을 src:local로 하나더 추가해준다.
@font-face {
font-family: 'revicons';
src: local('../fonts/revicons/revicons');
src: url('../fonts/revicons/revicons.eot?5510888');
src: url('../fonts/revicons/revicons.eot?5510888#iefix') format('embedded-opentype'),
url\('../fonts/revicons/revicons.woff?5510888'\) format\('woff'\),
url\('../fonts/revicons/revicons.ttf?5510888'\) format\('truetype'\),
url\('../fonts/revicons/revicons.svg?5510888\#revicons'\) format\('svg'\);
font-weight: normal;
font-style: normal;
}