반응형
설명
- SSL 설정할 도메인 : apache01.example.com
Let's Encrypt 특징
- 인증서의 유효기간은 90일이므로 90일마다 갱신해야함
- 만료 2주정도 전에 등록한 이메일 주소로 인증서 만료 예정 메일이 발송됨 (그 전에는 연장 불가)
certbot 다운로드
mkdir -p /home/ubuntu/script \
&& cd /home/ubuntu/script \
&& wget https://dl.eff.org/certbot-auto \
&& chmod a+x certbot-auto
SSL 인증서 발급
- 발급 명령어 실행
./certbot-auto certonly --manual
- 입력하라는 내용 입력
이메일 : test@gmail.com 도메인 : apache01.example.com
- .well-known 경로를 포함한 정보가 나오는지 확인
Create a file containing just this data: pmpfqooRUI6piCBNDiYMl7ENucsZlYJiMSi31\_-OwJs.XmuP3xKSYiVlyZgs_zEz_V3YK7ZOedleYH2RFNQ36ms And make it available on your web server at this URL: http\://apache01.example.com/.well-known/acme-challenge/pmpfqooRUI6piCBNDiYMl7ENucsZlYJiMSi31_-OwJs
- 서버에 파일 생성
- 경로
- $DOCUMENT_ROOT/.well-known/acme-challenge/pmpfqooRUI6piCBNDiYMl7ENucsZlYJiMSi31_-OwJs
- 내용
pmpfqooRUI6piCBNDiYMl7ENucsZlYJiMSi31_-OwJs.XmuP3xKSYiVlyZgs_zEz_V3YK7ZOedleYH2RFNQ36ms
- 경로
- 해당 경로로 접속이 되는지 확인
- 엔터를 순서대로 눌러 나머지 명령어를 수행
- 완료 후 키파일 생성 확인
- 경로 : /etc/letsencrypt/live/도메인명
httpd.conf 파일 수정
- 경로 : $APACHE_HOME/conf/httpd.conf
# 기존 common 로그 포맷 하위에 common_ssl 로그 포맷 추가
LogFormat "%h %l %u %t %{HOST}i \\"%r\\" %>s %b" common
LogFormat "%h %l %u %t %{HOST}i \\"%r\\" %>s %b %{SSL_PROTOCOL}x %{SSL_CIPHER}x" common_ssl
# 하단에 httpd-ssl.conf include 코드 추가
Include conf/extra/httpd-ssl.conf
httpd-ssl.conf 파일 수정
<VirtualHost _default_:443>
...
CustomLog "|/home/ubuntu/app/apache/bin/rotatelogs /home/ubuntu/app/apache/logs/access.%Y-%m-%d.log 86400 +540" common_ssl
...
SSLEngine on
...
SSLCertificateFile "/etc/letsencrypt/live/apache01.example.com/cert.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/apache01.example.com/privkey.pem"
SSLCertificateChainFile "/etc/letsencrypt/live/apache01.example.com/chain.pem"
</VirtualHost>
기타 명령어
- 만료일 확인
./certbot-auto certificates
- 갱신 (성공시 아파치 재실행)
./certbot-auto renew --renew-hook "sudo /home/ubuntu/app/apache/bin/apachectl restart"
참고사항
- 설정 완료 후 아파치를 반드시 재실행할 것
- 인증 과정 중 .well-known 디렉토리 하위 파일 접근을 위해 mod_jk 설정을 .well-known 경로 허용 후 설정 완료 후 원래대로 되돌릴 것
- SSL 설정 완료 후 .well-known 디렉토리 및 파일은 불필요하므로 삭제할 것
[이슈] 인증서 발급 명령어 실행시 아래 문구 오류 발생
- E: Package 'python-virtualenv' has no installation candidate
- 아래 과정 수행 후 인증서 발급 재시도
sudo vi /etc/apt/sources.list
# 변경 전
#deb http://archive.ubuntu.com/ubuntu bionic main
#deb http://archive.ubuntu.com/ubuntu bionic-security main
#deb http://archive.ubuntu.com/ubuntu bionic-updates main
# 변경 후
deb http://archive.ubuntu.com/ubuntu bionic main universe
deb http://archive.ubuntu.com/ubuntu bionic-security main universe
deb http://archive.ubuntu.com/ubuntu bionic-updates main universe
sudo apt update
[이슈] 도메인 변경 후 SSL 재발급시 renew명령으로 갱신 실패할 경우
- /etc/letsencrypt/renewal 디렉토리 안에 이전 도메인명의 conf파일을 제거 후 신규 도메인에 해당하는 설정을 755 퍼미션으로 변경 후 재시도해볼 것
[이슈] 멀티 도메인 연결시 [warn] _default_ VirtualHost overlap on port 443, the first has precedence 오류 발생
- httpd-ssl.conf 파일에 NameVirtualHost *:443 << 추가 후 아파치 재시작
[이슈] ./certbot-auto renew 명령어로 갱신시 오류 발생
- 오류 메시지
Cert is due for renewal, auto-renewing... Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration. The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',) Attempting to renew cert (apache01.example.com) from /etc/letsencrypt/renewal/apache01.example.com.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration. The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',). Skipping. All renewal attempts failed. The following certs could not be renewed: /etc/letsencrypt/live/apache01.example.com/fullchain.pem (failure)
- 해결
- 아파치를 종료한 후 아래 명령어로 갱신을 수행한 다음 다시 아파치를 실행한다.
./certbot-auto renew --standalone --preferred-challenges http
참고 URL
- https://peterpan77.com/windows10-bash-ssl
- http://blog.neonkid.xyz/73
- https://happist.com/548924/%EC%9B%8C%EB%93%9C%ED%94%84%EB%A0%88%EC%8A%A4-tips-lets-encrypt-%EB%AC%B4%EB%A3%8C-ssl%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%8F-%EC%9E%90%EB%8F%99-%EA%B0%B1%EC%8B%A0/
- https://swiftcoding.org/lets-encrypt-renew
- https://swiftcoding.org/lets-encrypt-auto-renew
반응형
'Development > Apache & Tomcat' 카테고리의 다른 글
[Tomcat] 설치하기 (0) | 2018.07.29 |
---|---|
[Apache] mod_jk 설치 (0) | 2018.03.27 |
[Apache] Log Rotation 적용 (0) | 2018.03.27 |
[Apache] Request Method 제한 설정 (0) | 2018.03.27 |
[Apache] 에러 페이지 설정 (0) | 2018.03.27 |