최초 작성일 : 2021-09-27 | 수정일 : 2023-05-12 | 조회수 : 755 |
Let's Encrypt를 이용하여 Apache 웹서버를 중단하지 않고 SSL 인증서를 발급받는 방법은 다음과 같다.
이 가이드에서는 Certbot의 --webroot
플러그인을 사용한다.
이 플러그인은 웹서버가 실행 중인 상태에서 인증서를 발급받을 수 있게 해준다.
Certbot 설치: Homebrew를 사용해 macOS에 Certbot을 설치한다.
터미널에서 다음 명령어를 실행해보자.
brew install certbot
도메인 등록: Certbot을 실행하고 웹 루트 디렉토리를 지정하여 인증서를 발급받는다.
웹 루트 디렉토리는 웹 서버에서 호스팅하는 파일들이 위치한 디렉토리이다.
예를 들어, 아파치 웹서버의 경우 기본 웹 루트 디렉토리는 /Library/WebServer/Documents/
일 수 있다.
터미널에서 다음 명령어를 실행해보자.
csssudo certbot certonly --webroot -w /path/to/your/webroot -d yourdomain.com -d www.yourdomain.com
여기서 /path/to/your/webroot
는 웹 루트 디렉토리의 경로이고, yourdomain.com
과 www.yourdomain.com
은 인증서를 발급받으려는 도메인이다.
필요에 따라 이 값들을 변경하면 된다.
Apache 설정 업데이트: 인증서가 발급되면 아파치 웹서버의 설정을 업데이트해야 한다.
SSL 설정은 일반적으로 httpd-ssl.conf
파일에 저장되어 있다.
이 파일을 열고 다음과 같이 설정한다.
bashSSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
yourdomain.com
은 인증서를 발급받은 도메인으로 변경한다.
Apache 재시작: 설정을 업데이트한 후 아파치를 재시작하여 새로운 설정을 적용한다.
sudo apachectl restart
자동 갱신 설정: Let's Encrypt 인증서는 90일마다 갱신해야 한다.
crontab을 사용해 자동 갱신을 설정할 수 있다.
crontab -e
그리고 다음 줄을 추가한다 (매일 새벽 2시에 인증서를 갱신하도록 설정):
javascript0 2 * * * /usr/local/bin/certbot renew --quiet --renew-hook '/usr/sbin/apachectl graceful'
이렇게 설정하면 Certbot이 자동으로 인증서를 갱신하고, --renew-hook
옵션에 의해 아파치 서버가 재시작되어 새 인증서를 적용하게 된다.
이 때, graceful
옵션은 현재 연결을 중단하지 않고 아파치를 재시작하게 해준다.
테스트: 모든 설정이 완료되면 웹 브라우저를 통해 https://yourdomain.com
에 접속하여 SSL이 제대로 작동하는지 확인한다.
브라우저의 주소창에서 자물쇠 아이콘이 표시되어야 하며, 클릭하면 Let's Encrypt로부터 발급받은 인증서 정보를 볼 수 있어야 한다.
보안 강화: 추가적으로, 웹서버의 보안을 강화하기 위해 HSTS(Strict Transport Security) 설정을 추가하는 것을 고려해볼 수 있다.
이 설정은 브라우저에게 이 사이트가 항상 HTTPS를 통해 접속되어야 함을 알려줍니다.
아파치 설정 파일에서 다음 줄을 추가한다.
vbnetHeader always set Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload'
이 설정은 1년 동안(HSTS max-age) 이 도메인과 모든 서브도메인이 HTTPS를 사용하도록 브라우저에 지시한다.
이 설정을 추가한 후 아파치를 다시 재시작해야 한다.
이렇게 하면 Let's Encrypt 인증서를 사용해 아파치 웹서버를 HTTPS로 전환하는 과정이 완료됩니다.
이제 사용자는 안전하게 웹사이트를 방문할 수 있다.
Tags #Lets_Encrypt