LetsEncrypt SSL인증서 갱신 시 오류 (Input the webroot for 도메인.com)
SSL 인증서 만료 시작일이 도래되어 미리 아무 문제 없이 갱신이 될지 시뮬레이션 테스트(cerbot renew –dry-run) 해보았더니 C:\Certbot\renewal\www.도메인com.conf 파일에 WEBROOT(각 서브 도메인 마다의 루트 디렉토리) 선언이 안되어 있어 오류가 나는걸 확인 했습니다. 이제 해결해 보시죵~
표시되는 오류 메시지
Failed to renew certificate www.도메
인.com with error: Missing command line flag or config entry for this setting: Input the webroot for 도메인.com:
사용환경
1. Bitnami 회사의 WAMP 서버 패키지 사용중 (윈도우10 / SK 일반 인터넷망(고정IP아님))
2. 서버에 LetsEncrypt SSL 최초 설치시 Standalone이 아닌 Webroot 방식으로 설치함
3. SSL 설치시 서브도메인 내용도 추가 했음 (SSL에 포함한 총 도메인 : www.도메인.com / map.도메인.com / 도메인.com )
상황
1. LetsEncrypt 에서 발급, 설치 한 무료 SSL의 만료일이 가까워져 갱신 전 SSL 상태를 확인했어요.
2. certbot\renewal\www.도메인.com.conf 파일 내부에 WEBROOT(서브도메인 별 루트 디렉토리) 선언이 안되어 있어 오류가 발생됩니다.
이렇게 해결하세요
1.CMD실행
윈도우 시작 버튼 클릭-> cmd 입력 -> 검색결과의 CMD 관리자 권한으로 실행
2. CMD 창에서 “certbot certificates” 입력하여 현재 SSL 상태 확인
ㄴ아래 결과에서 12행을 보면 저는 이미 SSL 인증서 갱신을 했기 때문에 만료일이 89일 남은것으로 확인됩니다.
ㄴ일반적으로 만료일 30일 전 부터 갱신을 할 수 있습니다. (갱신 CMD 명령어 : cerbot renew )
ㄴ만료일이 30일 이전이 아닌 상태에서 certbot renew 하실 경우 “Certificate not yet due for renewal(지금은 갱신 불가)” 메시지가 리턴됩니다.
Microsoft Windows [Version 10.0.19044.2251] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>certbot certificates # SSL 상태 확인 명령어 Saving debug log to C:\Certbot\log\letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Found the following certs: Certificate Name: www.도메인.com <-SSL증명서 이름 Serial Number: 40d0c1761e3983e020d83942d04XXXXX Key Type: RSA Domains: 도메인.com map.도메인.com www.도메인.com <- SSL 증명서 설치시 등록한 서브도메인들 Expiry Date: 2023-02-08 18:20:24+00:00 (VALID: 89 days) <- SSL 증명서 남은 만료일 Certificate Path: C:\Certbot\live\www.도메인.com\fullchain.pem <- SSL fullchain 파일경로 Private Key Path: C:\Certbot\live\www.도메인.com\privkey.pem <- SSL privkey 파일경로
3. 인증서 갱신 시뮬레이션
아직 SSL인증서가 만료일 30일 이전이 아니더라도 만료일 도래시 갱신(renewal)이 문제 없이 되는지 시뮬레이팅 해보실까요.CMD 시뮬레이팅 명령어 : certbot renew --dry-run
C:\WINDOWS\system32>certbot renew --dry-run <-시뮬레이팅 실행 명령어 Saving debug log to C:\Certbot\log\letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing C:\Certbot\renewal\www.도메인.com.conf <-SSL 인증서 conf(설정) 파일 프로세싱 중 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Simulating renewal of an existing certificate for 도메인.com and 2 more domains <-도메인.com과 그외 2개의 추가 도메인을 갱신 시뮬레이팅 하는중 Failed to renew certificate www.도메인.com with error: Missing command line flag or config entry for this setting: <-에러 발생! 아래의 명령이 누락되었다. Input the webroot for 도메인.com: <-도메인.com의 webroot를 입력해달라고 하네요(어차피 map.도메인.com과 www.도메인.com도 같이 webroot 디렉토리 설정을 해줘야 합니다. 여러분은 SSL설치시 도메인을 하나만 설정하셨다면 딱 그것만 webroot 디렉토리 설정 하시면 됩니다. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - All simulated renewals failed. The following certificates could not be renewed: C:\Certbot\live\www.도메인.com\fullchain.pem (failure) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 renew failure(s), 0 parse failure(s) Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile C:\Certbot\log\letsencrypt.log or re-run Certbot with -v for more details.
시뮬레이팅 해보니 저는 위의 빨간색 글씨들 처럼 오류가 발생 됐습니다.
Input the webroot for 도메인.com
SSL 인증서 .conf 파일(설정파일)에 WEBROOT 디렉토리가 선언되지 않았기 때문입니다.
누군가 도메인.com 을 타이핑해서 접속할 때 서버의 어떤 디렉토리로 이동할 것인지를 SSL인증서 .conf 파일에 선언하지 않았다는 의미입니다.
4. 에러에 대한 대처 해결법
WAMP를 사용하건 다른 서버 세팅을 사용하건 관계없이 웹서버라면 각 도메인 입력시 지정되어 접속되는 웹페이지 디렉토리를 입력해주면 됩니다.
제 블로그에서는 WAMP 기준으로 설명드리는 중입니다. 아래 예를 보고 5번 글로 넘어가주세요.
예) 도메인.com = C:\Bitnami\wampstack-8.1.10-0\apache2\htdocs
예) www.도메인.com = C:\Bitnami\wampstack-8.1.10-0\apache2\htdocs
위 두개의 예에 있는 세팅은 도메인.com과 www.도메인.com은 동일하게 “\apache2\htdocs”로 접속되니 동일한 디렉토리로 선언을 했습니다.
예)map.도메인.com = C:\Bitnami\wampstack-8.1.10-0\apache2\htdocs\map
map.도메인.com 으로 접속시 “\apache2\htdocs\map”으로 접속되고 있는 실제 환경에 맞추어 webroot 디렉토리를 선언 했습니다.
이건 저만의 경우입니다. 여러분께서는 SSL최초 설치시 선언한 도메인에 대해서만 세팅하면 돼요!
5. 이제부터 문제해결을 위한 필요한 액션입니다.
5-1. Letsencrypt SSL 최초 설치시 경로를 C:\Certbot 기본값으로 설치했다는 가정을 전제로 하여 설명드립니다.
5-2. 윈도우 탐색기에서 C:\Certbot\renewal 폴더로 이동하세요.
그리고 편집기나 메모장으로 .conf 파일을 여세요.
5-3. .conf 파일을 열면 아래와 같이 내용 확인이 되고 내용 중 [[webroot_map]] 선언 구절은 발견이 안되실겁니다.
5-4. 이제 [[webroot_map]]을 아래와 같이 선언하고 저장해주세요.
5-5. 정리
[[webroot_map]] www.도메인.com = C:\Bitnami\wampstack-8.1.10-0\apache2\htdocs 도메인.com = C:\Bitnami\wampstack-8.1.10-0\apache2\htdocs map.도메인.com = C:\Bitnami\wampstack-8.1.10-0\apache2\htdocs\map 위에서 말씀 드렸듯이 저는 3개의 서브도메인을 SSL 설치 단계에서 지정했기 때문에 위 내용처럼 웹루트를 세 번 선언했습니다. 여러분께서는 본인의 환경에 맞는 구절 선언만 하시면 됩니다. 아마도 아래와 같이 한개만 선언하시면 되겠죠. [[webroot_map]] 도메인.com = C:\Bitnami\wampstack-8.1.10-0\apache2\htdocs 혹시나 제가 쓴 구절을 그대로 가져다 복붙하실까봐 혹시나...다시 한번 설명을 보충하자면 자신의 서버세팅에 맞게끔 수정하여 입력 하셔야 합니다. [[webroot_map]] 여러분의도메인.com = C:\아파치 등 웹서버 디렉토리\웹페이지 루트 디렉토리 그리고 마지막으로 [[webroot_map]] <- 요거 네모괄호 이대로 넣으셔야 합니다. 네모괄호 한쌍씩 없애면 오류 발생!
6. 이제 아파치 서버를 재시작 하시고, CMD창에서 갱신 시뮬레이팅을 다시 해볼까요.
갱신 시뮬레이션 명령어 : certbot renew --dry-run
“Congratulations, all simulated renewals succeeded:”
갱신이 오류없이 실행되는것을 시뮬레이션을 통해 확인했습니다.
이제 SSL 인증서 만료일 30일이 남았을 때 아래의 명령어로 갱신하세요.certbot renew
만료일 30일 이상 남았더라도 강제로 갱신하는 것도 가능하긴 합니다.certbot renew --force-renewal
갱신을 시뮬레이션이 아닌 실제로 진행하셨다면 다시 SSL 인증서의 상태를 확인하세요.cerbot certificates
잘 하셨어요! 좋은 하루되세요! 🤗