letsencrypt + ubuntu + apache2 == https
https는 어떤 사이트를 만들더라도 반드시 필요한 프로토콜이다.
안전을 위해 모든 요청에 사용할 수도, 성능을 위해 민감한 정보가 오가는 경우에만 사용할 수도 있다.
난 취준생이라 프로그래밍을 해서 얻는 수입이 없으므로(…) 무료 인증서를 제공하는 letsencrypt를 사용해 서버 인증서를 준비했다.
시작해보자.
자동
공식 홈페이지의 문서를 참고했다.
자동: letsencrypt Interactive shell 사용
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto
letsencrypt-auto
는 python을 주로 사용해 만들어진 스크립트다. --apache
, --nginx
를 추가 매개변수로 사용해 깔끔하게 인증서 생성, 인증서 적용을 한큐에 끝낼 수 있다.
에러 메시지가 출력되지 않았다면 직접 사이트에 들어가 https지원이 잘 되는지 체크하면 끝이다. 참 편리하다.
수동
인증서 생성: letsencrypt
나같은 경우는 기를 쓰고 해봐도 자동으로는 잘 안되어서 결국 수동으로 인증서 생성을 했다.
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly -a standalone -d 도메인명
이렇게 생성할 경우
./letsencrypt-auto certonly -a standalone -d 도메인명
명령을 내리기 전에 웹 서버를 꺼두어야 한다. 안그럼 충돌날 수도 있다.
잘 생성되었다면 아래와 같은 형식의 메시지를 볼 수 있다:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
`etc/letsencrypt/live/api.phople.us/fullchain.pem`
- Your cert will expire on **2016-05-28**. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
완성되었다면 .pem
파일이 여러 개 생성될 것이다. 정확한 파일명은 매번 바뀌는 듯 하나, 쨋든 이런 이름이다.
생성된 파일에 대한 정보는 다음과 같다:
cert.pem
는 인증서(cert) 데이터,chain.pem
은 키 체인,privkey.pem
는 개인키(key) 데이터
잘 저장도록 하자. 잃어버리지거나 유출되지 않도록.
부록 - 인증서 적용: VirtualHost파일에 코드 추가
터미널에
sudo a2enmod ssl
을 입력해 apache가 SSL모듈을 사용하도록 해두자
이제 certfullchain.pem
과 privatekey.pem
를 버츄얼 호스트 파일에 알려주면 된다.
다음의 3줄만 추가하면 된다. 다른 설정도 가능하나, 꼭 해야 하는 설정이 아니므로 생략한다.
도메인이 iam.makerj.com이라고 가정한다
<VirtualHost *:80 *:443>
ServerName iam.makerj.com
SSLEngine on
SSLCertificateFile cert.pem경로
SSLCertificateChainFile chain.pem경로
SSLCertificateKeyFile privatekey.pem경로
~나머지 설정들~
다 작성했으면, 아파치를 재시작하자. 잘 된다.
'WebDev' 카테고리의 다른 글
s3 sigv4 (0) | 2016.03.03 |
---|---|
AWS (0) | 2016.03.02 |
Django Foreign Key (0) | 2016.02.25 |
Require.js (0) | 2016.02.20 |
tosync.js (0) | 2016.02.20 |