2~3년 전, https 설정을 위한 Let's Encrypt 무료 SSL 인증서 발급/관리 프로그램이 (윈도우 기준) 아파치 용으로는 깔끔치 못해서 부득이하게 홈서버 OS를 우분투로 교체했었습니다.

그런데 시간이 지남에 따라 윈도우용 Let's Encrypt 인증서 생성 프로그램(ACME Client)들도 보강되는 것 같네요. 인증서를 수동 발급하고, 수동으로 아파치에 적용하고, 인증서 만료일(3개월) 전에 자동으로 갱신하는 것이 원활하게 되는 것 같습니다. 그래서 윈도우에서 Let's Encrypt 인증서를 수동으로 발급받고 아파치에 SSL 인증서를 적용하는 방법을 정리하려 합니다. SSL 인증서는 FTPS(FTPES) 구성할 때에도 쓸 수 있기 때문에, 한 번 익혀두면 유용하게 활용하실 수 있을 겁니다.

 

 

1. 윈도우용 ACME Client 프로그램 선택, 다운로드

 

▲ https://letsencrypt.org/docs/client-options/

LetsEncrypt 문서에 나온 많은 종류의 인증서 생성/관리 프로그램(ACME Client)들. 그 중에서 윈도우용+꾸준히 업데이트되고 있는 것을 찾다보니 win-acme 가 보였습니다.

 

▲ win-acme 소개(Overview) 페이지 https://github.com/PKISharp/win-acme 를 보면 "options for other applications"라는 문구가 있습니다. 아파치/Nginx 사용자도 쓸 수 있다는 의미입니다.

 

▲ 스크롤을 위로 올려서 releases 카테고리를 클릭하면 클라이언트 프로그램이 있는 곳으로 이동합니다.

https://github.com/PKISharp/win-acme/releases )

 

▲ 스크롤을 내리다 보면 Support - Assets 항목에 업로드된 프로그램 파일들이 보일 겁니다.

그 중에서 호스팅 업체가 명시되지 않은 win-acme 파일을 받아주세요.

(작성 시점 기준으로 2.0.7 버전이 나온 것을 확인했는데, 기왕이면 최신 버전이 좋겠죠.)

 

2. win-acme 설치

 

설치는 압축을 푸는 것으로 끝입니다. 일종의 포터블 프로그램이라고 보면 돼요.

 

▲ zip 파일 압축을 풀어주세요. 저는 C:\win-acme 디렉토리를 만들고 압축을 풀었습니다.

앞으로 인증서 자동 갱신 스크립트 돌아가면서 꾸준히 쓰일테니, 적당히 잘 보이는 곳에 경로를 지정하는 것이 좋겠습니다.

 

3. win-acme 실행 테스트

 

▲ 명령 프롬프트(cmd)를 관리자 권한으로 실행해주세요.

 

(만약 시작버튼 우클릭시 명령프롬프트(관리자) 안 보이면 검색창에서 cmd 라고 검색한 다음 마우스 우클릭 → 관리자 권한으로 실행하면 됩니다.)

 

▲ cd 명령어로 압축을 푼 디렉토리를 찾아 들어갑니다.

(팁 : 경로는 적당히 쳐주고 Tab 키 누르면 자동완성 됩니다.)

dir 명령어를 입력해서 wacs.exe 실행파일이 있는지 확인했으면...

 

▲ 테스트 삼아 wacs --help 라고 쳐봅니다.

새 창이 뜨면서 옵션들이 좌라락 나온 뒤 창이 꺼지면서 cmd창으로 돌아오면 테스트 통과한 거고,

위 스샷처럼 나온다면 닷넷 프레임웍 런타임을 설치해야 합니다.

 Yes 버튼을 누르면 마이크로소프트 닷넷프레임웍 다운로드 페이지로 이동합니다.

https://dotnet.microsoft.com/download/dotnet-framework/net472 )

(닷넷 프레임웍 요구 화면은 보이지 않는 게 제일 좋습니다. 이미 설치되어 있다는 뜻이니까요.)

 

▲ 참고로 윈도우10 1903 최신 업데이트에는 닷넷프레임웍 4.8이 기본으로 들어있으니까, wacs 프로그램을 강제 종료하고 "설정 - 앱 - 앱 및 기능 - 화면 우측 관련 설정에서 프로그램 및 기능 - 화면 좌측에서 Windows 기능 켜기/끄기"로 들어가서 위 스샷처럼 구성하면 됩니다.

 

▲ 각설하고, 닷넷프레임웍은 Runtime을 받으면 됩니다. 우리는 개발자가 아니니까요.

 

▲ .Net Framework 4.7.2 Runtime 설치 대화창은 한글로 나오기 때문에 어렵지 않게 진행하실 수 있을 겁니다.

 

닷넷프레임워크 런타임 설치가 끝났으면 다시 한 번 wacs --help 라고 입력해서 에러 창 없이 진행되는지 확인합니다. 별 일 없이 진행됐으면 win-acme 실행 테스트 끝!

 

 

4. Let's Encrypt 인증서 수동 발급

 

win-acme 프로그램으로 SSL 인증서만 발급받고 아파치에 연결은 직접 하는 식으로 진행할 겁니다.

wacs 라고 입력해서 win-acme 프로그램을 실행해 주세요.

 

▲ 첫 대화창에는 갱신(renew) 관련 메뉴밖에 안 보이네요.

M을 눌러서 advanced options를 살펴야 할 것 같습니다. m 누르고 엔터.

 

▲ Which kind of certificate would you like to create? 항목은 1번밖에 선택지가 없네요. 1 누르고 엔터.

 

▲ Enter comma-separated list of host names 에는 SSL 인증서를 생성할 도메인들을 콤마(,)로 구분해서 입력합니다. Suggested FriendlyName 으로 자동 정리해주네요. 엔터 키를 눌러서 accept 해줬습니다.

(원래 Let's Encrypt 인증서 하나에 다수의 도메인을 넣을 수 있는데, wacs 프로그램에서는 대표 도메인, 대체 도메인 개념이 있나 봅니다. 그러므로 1차 도메인 주소가 다르면 SSL 인증서를 각각 따로 발급받는 게 낫겠습니다. 도메인 주소 ②로 https 접속했는데 인증서 정보 조회했을 때 대표도메인 주소(도메인 주소 ①)가 나오면 이상하잖아요.)

 

▲ How would you like to validate this certificate? 질문은... 홈서버의 경우 인증서를 홈서버에 저장할 필요가 있으니까 5번을 선택합니다.

Path to the root of the site 란에는 사이트 root 경로를 넣으면 될 것 같고(=웹루트 경로=index.html 이 있는 곳),

What kind of CSE would you like to create? 질문에서 암호화 방식은 (많이들 쓰는) RSA를 택하면 될 것 같습니다.(2번)

 

▲ How would you like to store this certificate? 질문에는 3번을 선택하는 게 좋겠죠? 우리는 아파치 사용자니까요.

Path to folder where .pem files are stored 질문에는 인증서 저장 경로를 입력합니다. 윈도우탐색기 등으로 경로를 미리 만들어 뒀어야 하겠죠? 그리고 저는 테스트하느라 웹루트 경로 하위에 인증서 저장 경로를 지정했는데, 이렇게 하면 누구든 도메인 주소에 인증서 저장 경로만 붙이면 접근할 수 있기 때문에 인증서를 탈취당할 수 있겠죠? 그러니까 인증서 저장 경로는 웹루트 경로와 분리하는 게 안전하겠습니다.

Which installer should run for the certificate? 질문에는 1번을 선택합니다(Do not run any installation steps).

Enter email(s) 블라블라~~(comma seperated) 에는 이메일 주소를 입력하면 되는데(다수의 이메일 주소는 콤마로 구분), 저는 Let's Encrypt 인증서 쓰면서 이메일 오는 게 귀찮더군요. 그래서 이 질문은 엔터키 쳐서 건너뛰었습니다.

Open in default appliation? 질문은 무슨 얘긴지 모르겠어서 (추천값인) n 을 넣었고,

Do you agree with the terms? 질문은 당연히 y 를 넣습니다.

 

※ 2019. 12. 02. "순이"님 제보

- Open in default appliation? 질문은 질문 위에 적힌 "Terms of service : 블라블라~" 경로의 PDF 파일을 디폴트 프로그램으로 열어보겠냐고 묻는 내용인 것 같습니다.

 

▼ 그러면 인증서 생성이 한동안 진행될 텐데요,

▲ Do you want to specify the user the task that will run as? 질문은 사용자를 특정하기 싫어서 n 을 넣었습니다.

두 달쯤 뒤에(7월 24일) 갱신(renewal) 스케줄 잡았다고 알려주고 인증서 생성 절차가 끝납니다. L키를 눌러서 갱신 스케줄 목록(List scheduled renuals)을 보니까 확인이 되네요.

이제 wacs 프로그램을 종료합니다.

 

Let's Encrypt 인증서 발급 절차는 이것으로 끝!

확인해봅니다.

 

▲ 인증서 저장 경로에 (블라블라)chain.pem 파일과 (블라블라)key.pem 파일이 생성되었네요.

 

▲ 제어판 - 관리도구 - 작업 스케줄러 로 들어가보니 win-acme renew 갱신 트리거가 등록되었네요.

 

▲ 참고 : 인증서 수동 갱신, 인증서 폐기, 자동 갱신 스케줄 관리도 wacs.exe 로 처리할 수 있습니다.

 

5. 발급받은 인증서를 아파치에 적용하기

 

아파치 설치 폴더 아래의 conf 폴더에서 httpd.conf 파일을 메모장으로 엽니다(저는 C:\Apache24\conf\httpd.conf 입니다.).

 

▲ Ctrl+F 누르고 mod_socache_shmcb.so 모듈과 mod_ssl.so 모듈의 주석을 해제합니다.

 

아래에 설명하는 두 가지 방법들 중 하나를 선택하여 적용합니다.

 

① 첫번째 방법 : SSL 연결 설정을 아파치 설정파일 안에 넣기 - 비추천

 

httpd.conf 파일 아랫부분에 아래 스샷처럼 입력해서 SSL 연결 설정을 구성하고 저장+빠져나옵니다.

 

 

SSLCertificateFile 과 SSLCertificateKeyFile 의 따옴표 안에는 인증서 경로와 chain.pem, key.pem 파일의 위치를 본인 환경에 맞게 바꾸어 적어주세요.

SSLCipherSuite 는 내용이 엄청 깁니다. 스샷의 내용을 첨부파일로 넣어놓을테니 SSLCipherSuite 부분을 복붙하세요.

 

httpd1.conf
다운로드

(SSLCipherSuite 출처 : https://blog.lael.be/post/5107 - 감사합니다!)

 

▲ 명령프롬프트를 관리자 권한으로 띄우고, httpd -k restart 라고 입력하여 아파치 서비스를 재시작합니다.

 

▲ 웹브라우저에서 https 주소로 접속해봅니다. 주소 옆에 자물쇠 모양 뜨고 SSL 인증서 정보도 잘 나오긴 합니다.

 

▲ 그런데 http 주소로 접근했을 때 400 Bad Request 오류가 뜨는군요.

 

제가 이 방법을 비추천하는 이유가 이 부분 때문입니다. https 주소만 쓸 것이고 http 주소는 어찌 되든 상관 없다 한다면 이 방법을 택해도 되는데, 실사용 할 때 http 주소 쳤을 때 https로 전환 연결되도록 하는 경우가 많거든요. 

http 주소를 쳤을 때 https 주소로 연결되게(re-direct) 하고 싶다거나, http/https 주소 모두 오류 없이 연결되도록 하고 싶다면 아래에 적는 ②두번째 방법을 적용해야 합니다.

 

 

② 두번째 방법 : SSL 연결 설정을 VirtualHost 안에 넣기 - 추천

 

첫번째 방법 적용시 http 연결에서 400 Bad Request 오류가 뜨는 이유는 SSL 엔진이 80포트와 443포트 모두에게 영향을 미치기 때문입니다.

 

[윈도우10 64bit] APM Apache 2.4 아파치 설치과정 정리(웹서버 구축)

[윈도우10 64bit] 아파치 2.4에서 VirtualHost로 1PC에 멀티도메인(서브도메인) 연결하기

제가 제시했던 방식으로 아파치를 설치하셨다면 httpd.conf(아파치 설정 파일)에 ▼아래 스크린 샷처럼 VirtualHost로 사이트(도메인) 연결 설정이 되어 있을 텐데요,

 

▲ 만약 80포트 VirtualHost 구성을 안 하셨다면 위 스샷처럼 간단하게라도 구성하세요.

 

<Directory "블라블라"> 부분은 놔두고, 443포트 Listen 명령어와 443포트 VirtualHost 구성을 추가하면서 443포트 VirtualHost 안쪽에 SSL 연결 설정을 끼워넣는 식으로 처리한 다음 저장+빠져나옵니다(▼아래 스샷 참고).

 

httpd1.conf
다운로드

SSLCipherSuite 는 내용이 엄청 기니까 첨부파일에서 SSLCipherSuite 부분을 복사+붙여넣으세요.

SSLCertificateFile 과 SSLCertificateKeyFile 의 따옴표 안에는 인증서 경로와 chain.pem, key.pem 파일의 위치를 본인 환경에 맞게 바꾸어 적어주세요.

 

▲ 그 다음 명령 프롬프트(cmd)를 관리자 권한으로 띄우고 httpd -k restart 라고 입력하여 아파치 서비스를 재시작합니다.

 

▲ 웹브라우저에서 http 연결, https 연결 둘 다 오류 없이 접속되는지 확인합니다.

 

여기까지 처리한 것으로 끝내도 되고,

http 연결 시도시 https 연결로 돌려주게끔 설정하고 싶으면 구글에서 "아파치 https 리다이렉트"라고 쳐보면 여러가지 방법이 나오니까 마음에 드는 것으로 적용하세요.

저는 아래 스샷처럼 301 Redirect 로 구현하는 게 취향에 맞더군요.

 

▼ Redirect 구문이 한글주소를 인식하지 못해서 퓨니코드로 바꿔줬는데, 당황하지 마세요.

 

이쯤에서 마무리 짓겠습니다. 긴 글 읽느라 고생 많으셨습니다.

Let's Encrypt 인증서와 관련된 이런저런 실험, SSL 인증서 적용에 관련된 아파치 팁들이 궁금하시면 아래 글을 참고하세요(양이 많아서 재탕하기 힘드네요.ㅠㅠ).

[우분투 18.04 데스크톱] LAMP : Let's Encrypt SSL 인증서 수동 발급과 아파치(Apache)에 적용하기

 

★ 3개월 뒤에 인증서 자동갱신 정상적으로 됐는지 결과 남길게요.

 

※ 참고한 문서들

 

https://community.letsencrypt.org/t/getting-lets-encrypt-working-on-apache-and-windows-10/77107

https://commaster.net/content/how-setup-lets-encrypt-apache-windows

https://github.com/PKISharp/win-acme/wiki/Basic-Usage

https://github.com/PKISharp/win-acme/wiki/Advanced-usage

https://github.com/PKISharp/win-acme/wiki/Command-line

https://github.com/PKISharp/win-acme/wiki/How-To-Run (Command line examples)

https://community.letsencrypt.org/t/wacs-exe-generates-only-2-out-of-3-pem-files/94730/3

https://sarc.io/index.php/httpd/1120-apache-https-http-redirect-rewrite

반응형