1.
우선 Let's Encrypt에 접속해서 Getting Started를 가보니 shell 접근이 가능하면 certbot을 사용하면 편할거라고 한다. certbot 페이지에 가보면 nodejs는 선택지에 없다. 그리고 난데없이 certonly를 하라고 하고, webroot를 하라고 하는 등... 난 nodejs인데.. 하면서 letsencrypt와 nodejs, express로 검색을 하다보면 letsenrypt-express가 검색이 되서 나오게 된다. 설명을 보면 등록부터 사용, 갱신까지 다 알아서 해주는 것 처럼 보인다. 이렇게 생각하면 여기서 헤매게 된다.
2.
우선 키발급을 먼저 하고, 그 다음에 서버에 적용할 생각을 해야 하는데, 키발급을 인터넷 사이트에서 하려고 생각하는 순간 역시 헤매게 된다. 그러다가 certbot의 문서 중 이곳을 천천히 읽다가 키발급의 원리를 깨닫고 나서야 진행이 쉽게 되었다.
This will carry out the steps needed to validate that you control the domain(s) you are requesting a cert for, obtain a cert for the specified domain(s), and place it in the
/etc/letsencrypt
directory on your machine키발급을 요청하는 사람이 그 도메인에 대한 진짜 주인인지를 판단을 해야 하는데, 그 방법을 해당 도메인의 루트에 특정 파일을 심어 놓고 외부에서 접속해서 그 파일을 확인하는 방법을 사용한다. (아마 그런 것 같다)
3.
그래서 certbot에게 certonly라는 명령으로 키발급만 한다고 알려주고, --standalone으로 직접 80/443 서버를 띄워서 도메인을 확인하거나, --webroot-path 옵션으로 기존에 떠있는 서버를 이용해서 도메인을 확인하는 과정을 거쳐야 /etc/letsencrypt 디렉토리에 pem 파일이 생성된다.
sudo ./certbot-auto certonly --standalone -d 도메인주소
또는
sudo ./certbot-auto certonly --webroot-path 도메인주소로접근시서비스되는디렉토리 -d 도메인주소
이렇게 하고, 이메일 주소를 더 넣거나 하는 등의 과정을 거치면 아래처럼 정상메시지를 볼 수 있다.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/도메인주소/fullchain.pem. Your cert will
expire on 2017-01-29. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
이 때 standalone으로 하는데, 80이나 443포트를 다른 프로세스에서 사용중이면 안된다. 그리고 443포트가 외부에서 접근이 가능한 상태인지, AWS의 경우 Security Group을 확인해줘야 한다.
5.
이제 nodejs 서버의 express에 letsencrypt-express를 적용하면 된다. 예제코드처럼 express()를 한번 래핑하는 식으로 쉽게 구현이 가능하다. 물론 실제 코드에서는 config 파일을 이용해서 아래처럼 구현한다.
```
var express = require('./config/express');
var app = require('letsencrypt-express').create({
server: config.https.server,
email: config.https.email,
agreeTos: true,
approveDomains: config.https.domains,
app: express()
}).listen(config.port, config.https.port);
nodejs 서버는 ubuntu 계정에서 실행하기 때문에 포트포워딩도 해줘야 한다.
```
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3080
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3443
7.
서버를 띄우면 알아서 /etc/letsencrypt/ 에서 발급된 키파일을 이용해서 서버를 띄워주는 것 같다. 그리고 초반에 server를 'staging'으로 해서 한번 띄우고 나면 다시 운영모드로 server를 바꾸고 서버를 재시작해도 키발급자가 "Fake LE Intermediate X1"으로 뜨면서 인증되지 않은 인증서라고 나오는 경우가 있다. 이럴 때는 ~/letsencrypt 디렉토리를 한번 삭제해주면 된다.
8.
그래서 이 작은 초록색 자물쇠를 결국 얻어냈다. ㅎㅎㅎ
안녕하세요. 저도 letsencrypt로 고생하고 있는데요. 저는 ~/letsencrypt/etc만 있고 /etc/letsencrypt는 없는데 저는 경로를 다 ~/letsencrypt/etc로 하면 되는건가요?
답글삭제안녕하세요. 저도 letsencrypt로 고생하고 있는데요. 저는 ~/letsencrypt/etc만 있고 /etc/letsencrypt는 없는데 저는 경로를 다 ~/letsencrypt/etc로 하면 되는건가요?
답글삭제좋은글 감사합니다.
답글삭제