Let's Encrypt certificate

wwiki
이동: 둘러보기, 검색

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로 동작하는 가상호스트에도 적용이 가능하다.

  1. 서버에 외부에서 접속이 가능하도록 웹서비스가 사용할 디렉토리를 만든다.
  2. 외부에서 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:

--------------------------------------------------------------------------------

외부링크[편집 | 원본 편집]

https://certbot.eff.org/

https://www.ssllabs.com/ssltest/