개발노트
목록

Apache 서버 Certbot SSL 인증서 발급 오류 해결 삽질 후기 (unauthorized, AH01915)

Certbot SSL인증서 아파치오류 unauthorized AH01915
Server 2025.05.23 45 회 읽음
Server 21일 전 45


보안 인증서 발급 오류




안녕하세요! 오늘은 웹사이트 운영에 필수적인 HTTPS 적용, 그중에서도 Let's Encrypt SSL 인증서를 Certbot을 이용해 발급받으려다 예상치 못한 난관에 부딪혔던 경험과 해결 과정을 상세히 공유해 드리려고 해요. 혹시 저처럼 "Certbot failed to authenticate some domains" 또는 아파치 로그에 "AH01915" 같은 메시지를 보고 막막하셨던 분들께 도움이 되길 바랍니다!


오늘은 제 웹사이트에 HTTPS를 적용하기 위해 Certbot으로 SSL 인증서를 발급받으려다 겪었던 아찔한 오류와 그 해결 과정을 생생하게 공유해 드리려고 해요. 혹시 저와 비슷한 문제로 골머리를 앓고 계신 분들이 있다면 이 글이 작은 도움이 되길 바랍니다!


사건의 발단: 도메인 연결 후 SSL 인증서 발급 시도

새로운 도메인을 서버에 연결하는 작업은 언제나 설레죠! adduser 명령어로 새 사용자 계정을 만들고, passwd로 비밀번호도 설정하고, 웹 서버 설정 파일인 httpd.conf나 가상 호스트 설정 파일(vhost.conf)에 새 계정 정보를 추가하는 것까지는 순조로웠어요.

이제 HTTPS 통신을 위한 SSL 인증서를 발급받을 차례! 무료 SSL 인증서 발급 도구인 Certbot은 정말 편리해서 자주 사용하는데요. 이번에도 어김없이 아래 명령어를 입력했습니다. (제 도메인은 www.monim.net이라고 가정할게요.)


# certbot certonly --apache -d www.monim.net


엔터를 딱! 누르고 잠시 기다리는데...

예상치 못한 오류 메시지 등장!

두근거리던 마음도 잠시, 화면에 빨간 글씨와 함께 나타난 오류 메시지는 저를 당황하게 만들었어요.


Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for www.monim.net
Certbot failed to authenticate some domains (authenticator: apache). The Certificate Authority reported these problems:
  Domain: www.monim.net
  Type:   unauthorized
  Detail: 115.68.177.58: Invalid response from http://www.monim.net/.well-known/acme-challenge/8UqYAxKRixE-Gg4zeEHyrewy--EYfkkeHafNPJYVO4U: 400

Hint: The Certificate Authority failed to verify the temporary Apache configuration changes made by Certbot. Ensure that the listed domains point to this Apache server and that it is accessible from the internet.

Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.


"unauthorized" 라니! 인증 권한이 없다니, 이게 무슨 일일까요? 분명 도메인도 잘 연결했고, 서버도 잘 돌아가고 있는데 말이죠. Certbot이 임시로 만든 파일에 접근해서 도메인 소유권을 확인해야 하는데, 그게 안된다는 뜻이었어요.

단서 발견: 아파치 에러 로그 확인

오류 메시지에 나온 힌트대로 로그 파일을 뒤져보기 시작했어요. 아파치(Apache) 웹 서버의 에러 로그를 살펴보니 이런 메시지가 찍혀 있더라고요.


AH01915: Init: (www.example.com:80) You configured HTTPS(443) on the standard HTTP(80) port!


이 메시지는 "어라? 일반 HTTP 접속(80번 포트)인데 왜 HTTPS 설정(443번 포트용 설정)이 되어 있지?" 하고 아파치가 혼란스러워하는 상황을 말해주는 거예요. 분명 저는 80번 포트에는 일반 HTTP 설정을, 443번 포트에는 HTTPS 설정을 하려고 했는데 말이죠.

과거에 이 서버 세팅을 처음 할 때 뭔가 꼬였던 부분이 있었는지, 아니면 제가 다른 설정을 만지다가 문제가 생긴 건지 도통 감이 오지 않았어요. 설정 파일들을 열어보고, 로그 파일을 다시 보고... 몇 시간을 그렇게 원인 찾기에 매달렸답니다.


문제의 핵심: SSLEngine on 설정 중복

계속해서 관련된 설정들을 찾아보다가 SSLEngine on 이라는 지시어가 여러 설정 파일에 중복으로, 혹은 예상치 못한 곳에 적용된 것을 의심하게 되었어요. SSLEngine on은 해당 영역에서 SSL 암호화를 사용하겠다는 선언 같은 거거든요.

터미널에서 아래 명령어로 SSLEngine on이 어디에 설정되어 있는지 찾아봤어요.


# sudo grep -Ri "SSLEngine on" /etc/httpd/


결과는 놀라웠습니다.

/etc/httpd/conf.d/userdir.conf:SSLEngine on
/etc/httpd/conf.d/ssl.conf.disabled:    SSLEngine on
/etc/httpd/conf.d/ssl.conf.disabled:    SSLEngine on
/etc/httpd/conf.d/ssl.conf_ori:      SSLEngine on
/etc/httpd/conf.d/ssl.conf:      SSLEngine on
/etc/httpd/conf/httpd.conf_250509:    SSLEngine On
grep: /etc/httpd/modules/mod_ssl.so: binary file matches
grep: /etc/httpd/run/cgisock.8785: No such device or address


여러 파일에서 SSLEngine on 설정이 발견되었지만, 가장 눈에 띈 것은 /etc/httpd/conf.d/userdir.conf:SSLEngine on 이 부분이었어요. userdir.conf 파일은 보통 사용자 홈 디렉터리를 웹으로 접근할 수 있게 해주는 설정인데, 여기에 SSLEngine on이 설정되어 있으면 다른 가상 호스트 설정보다 먼저 읽혀서 전역적으로 SSL 설정이 적용되어 버리는 문제가 생길 수 있어요. 즉, 모든 HTTP(80 포트) 요청까지 HTTPS로 처리하려고 시도하면서 앞서 봤던 AH01915 오류가 발생했던 거죠!


해결 방법: 문제의 설정 파일 처리


원인을 찾았으니 해결은 상대적으로 간단했어요! 문제가 된 /etc/httpd/conf.d/userdir.conf 파일의 SSLEngine on 설정을 수정하거나, 해당 파일이 꼭 필요한 상황이 아니라면 백업 후 잠시 다른 곳으로 옮겨서 아파치가 읽지 않도록 하는 방법이 있어요. 저의 경우에는 해당 파일의 내용을 검토 후, SSLEngine on 부분을 주석 처리하거나 파일 자체를 잠시 백업 폴더로 이동시키는 방법으로 해결했습니다. (주의: 설정을 변경하기 전에는 항상 원본 파일을 백업해두는 습관이 중요해요!)


만약 userdir.conf 파일 자체는 필요하고, SSLEngine on 설정만 문제라면 해당 라인을 #으로 주석 처리해주시면 됩니다.


# SSLEngine on  <- 이 부분을 이렇게 주석 처리


저는 귀찮아서 userdir.conf 파일을 백업하고 파일을 사용하지 않도록 했습니다.


그리고 아파치 설정을 다시 로드하거나 재시작 해 줍니다.

# sudo systemctl reload httpd
# 또는
# sudo systemctl restart httpd


드디어 성공! Certbot SSL 인증서 발급 완료

두근거리는 마음으로 다시 Certbot 명령어를 실행했습니다.

# certbot certonly --apache -d www.monim.net


Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for www.monim.net

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/www.monim.net/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/www.monim.net/privkey.pem
This certificate expires on 2025-08-21.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


"Successfully received certificate." 만세! 드디어 인증서가 정상적으로 발급되었어요. 이어서 www가 붙지 않은 기본 도메인(monim.net)에 대해서도 동일하게 진행해서 성공했습니다.


# certbot certonly --apache -d monim.net


Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for monim.net

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/monim.net/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/monim.net/privkey.pem
This certificate expires on 2025-08-21.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
...


몇 시간 동안 저를 괴롭혔던 문제가 해결되는 순간, 정말 짜릿하더라고요!


마무리하며: 오류는 성장의 밑거름!

이번 경험을 통해 아파치 설정 파일의 로드 순서와 중복 설정의 위험성에 대해 다시 한번 배울 수 있었어요. 특히 SSLEngine on 같이 강력한 지시어는 정확한 위치에 신중하게 사용해야 한다는 점을 깨달았습니다.

혹시라도 Certbot SSL 인증서 발급에 어려움을 겪고 계신다면, 가장 먼저 아파치 에러 로그를 확인해보시고, 저처럼 설정 파일 어딘가에 SSL 관련 설정이 잘못 적용되어 있지는 않은지 꼼꼼히 살펴보세요. 특히 conf.d 디렉토리 안에 있는 파일들은 알파벳 순서대로 로드되거나 특정 파일이 우선적으로 로드될 수 있으니 이 점도 유의하시면 좋습니다.

오늘 저의 삽질기가 여러분의 문제 해결에 조금이나마 도움이 되었으면 좋겠습니다. 모두 즐거운 서버 운영되시길 바라요!


이전에는 CentOS 사용할 때에는 기본 설치하고 httpd.conf 파일에 계정을 모두 추가해서 사용하다가  Rockly Linux 넘어오면서 이런 문제가 발생했네요.



목록