Let's Encrypt certificate
목차
certbot 설치[편집 | 원본 편집]
백 포트 리파지토리 활성화 없이 설치한다.
nginx플러그인을 설치한다.
서비스 유닛도 추가된다. (데비안 계열의 경우 /lib/systemd/system/certbot.service, /lib/systemd/system/certbot.timer )
$ sudo apt-get install certbot
certbot.timer에 의해 하루2회 인증서를 자동갱신한다.
설정[편집 | 원본 편집]
nginx설정을 자동화한다.(nginx에 certbot 인증관련 설정을 업데이트한다.)
설치 후 1회 실행한다.
$ sudo certbot --nginx
인증서만 갱신하는 경우 다음 명령을 사용한다.
$ sudo certbot --nginx certonly
화면 출력없이 인증서를 갱신하려면 다음 명령을 사용한다.
$ sudo certbot renew
인증서 보기[편집 | 원본 편집]
$ sudo certbot certificates
플러그인[편집 | 원본 편집]
플러그인은 인증서 발급과 인증서 설치 플러그인으로 구분된다.
플러그인 | 발급 | 설치 | ||
---|---|---|---|---|
nginx | Y | Y | http방식 | |
webroot | Y | N | 구동중인 웹서버의 디렉토리를 사용하여 인증서를 발급한다. | http방식 |
standalone | Y | N | standalone web server를 사용하여 인증서를 발급한다. 80번 포트가 사용가능해야 한다. 웹 서버가 설치되지 않은 경우에 유용하다. | http방식 |
DNS plugins | Y | N | 플러그인이 DNS record를 수정해서 인증서를 발급한다. | dns방식 |
manual | Y | N | 도메인 유효성을 직접 수행해서 인증서를 발급한다. | http방식 또는 dns방식 |
standalone[편집 | 원본 편집]
일시적으로 웹 서비스를 빌려 인증서 유효성을 확인하는 방법이다. 여러 도메인을 발급받을 수 있으나 웹서비스를 중단시키고 발급등을 진행해야 한다.
$ sudo systemctl stop nginx.service
$ sudo certbot certonly
Webroot[편집 | 원본 편집]
웹 디렉토리 내에 인증서의 유효성을 확인할 수 있는 파일을(Challenge Seed) 업로드하여 인증서를 발급하는 방법이다. Challenge Seed를 외부에서 접속 가능한 미리 약속된 경로(/.well-known)에 위치시킨 뒤 Let's Encrypt 서버가 해당 경로로 접속해 인증에 필요한 정보를 읽어간다. 그러므로, ProxyPass로 동작하는 가상호스트에도 적용이 가능하다.
- 서버에 외부에서 접속이 가능하도록 웹서비스가 사용할 디렉토리를 만든다.
- 외부에서 http로 접속이 가능하도록 웹서비스를 설정한다.
$ mkdir /var/www/certbot
$ chown www-data:www-data /var/www/certbot
$ chmod 700 /var/www/certbot
nginx를 사용하는 경우 웹서비스 설정파일의 server 블록에 다음과 같이 입력하여 /.well-known URI가 /var/www/certbot을 가르키도록 한다.
location /.well-known {
root /var/www/certbot/;
}
$ sudo certbot certonly
manual[편집 | 원본 편집]
도메인을 쿼리하여 나타나는 txt레코드에서 인증서 유효성을 확인하는 방법이다. 와일드카드 인증서의 경우 이 방식만을 사용한다.
SubCommands[편집 | 원본 편집]
certonly[편집 | 원본 편집]
인증서를 발급하거나 갱신하지만, 웹서비스 설정파일을 변경하여 설치하지는 않는다.
run (default)[편집 | 원본 편집]
인증서를 발급하고 설치한다. Obtain & install a certificate in your current webserver. 도메인 목록에서 선택하여 인증서를 설치한다.
$ sudo certbot
renew[편집 | 원본 편집]
만료예정인 이전에 발급받은 모든 인증서를 갱신한다.(설정파일에 저장된 /etc/...)
certificates[편집 | 원본 편집]
발급받은 인증서 본다.
delete[편집 | 원본 편집]
인증서를 삭제한다.
Flag[편집 | 원본 편집]
--manual[편집 | 원본 편집]
사용자 확인하거나 쉘 스크립트로 인증서를 발급받는다.
에러[편집 | 원본 편집]
와일드카드(*.example.com) 플러그인 에러[편집 | 원본 편집]
에러메시지[편집 | 원본 편집]
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)
원인[편집 | 원본 편집]
$ certbot-auto renew 명령시 참조하는 설정파일 (/etc/letsencrypt/renewal/xxxxxx.conf)에서
--------------------------------------------------------------------------------
[renewalparams]
authenticator = manual
--------------------------------------------------------------------------------
수동으로 되어 있는 경우는 certbot-auto renew 명령으로 갱신되지 않는다.
해결방법[편집 | 원본 편집]
다음 명령으로 수동으로 실행해줘야 한다.
$ sudo certbot certonly --manual
명령 수행중에 다음과 같은 메시지가 나오는데,
--------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:
--------------------------------------------------------------------------------
DNS레코드를 갱신해 주어야 한다.
DNS레코드는 바로 갱신되지 않으므로 host명령으로 DNS가 갱신되었는지 확인하여야 한다.
갱신완료 메시지[편집 | 원본 편집]
다음과 같은 메시지가 나왔다면 성공적으로 갱신된 것이다.
--------------------------------------------------------------------------------
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
--------------------------------------------------------------------------------