티스토리 뷰

 

출처 : https://bigboss.io/2019/05/install-letsencrypt-ssl-certificate-for-windows-tomcat/

 

영혼 없이 Windows용 Tomcat에 Let's Encrypt SSL 인증서 설치하기 - bigboss.io

Let’s Encrypt 인증서를 설치하려고 검색을 해보니 리눅스 환경에서 certbot을 활용하는 방법이 주로 나왔습니다. 윈도 환경에서는 IIS에 적용하는 방법은 종종 찾을 수 있었지만 Tomcat에 적용하는 방

bigboss.io

우선 필요한 파일을 다운로드하고 설치합니다.

(1) Java와 OpenSSL을 설치하고 Path 환경변수에 추가합니다. Path 환경변수에 꼭 넣을 필요는 없지만 넣어두는 것이 정신 건강에 좋습니다. Windows용 OpenSSL은 아래 링크에서 3MB짜리 Light 버전으로 다운로드 받으면 됩니다.
https://slproweb.com/products/Win32OpenSSL.html

Win64OpenSSL_Light-1_1_1g.msi

 

(2) PJAC (Porunov Java ACME Client)를 다운로드 합니다. 참고로, 이 글을 쓰는 현재 최신 버전은 v3.0.1 입니다.
https://github.com/porunov/acme_client/releases

(3) 편의를 위해 C 드라이브 루트에 cert 폴더를 만듭니다. 그리고 다운로드 받은 acme_client.jar 파일을 C:\cert에 복사합니다.

인증서 발급받기

이제 인증서를 발급받기 위해 영혼 없이 아래 명령어를 순서대로 실행하면 됩니다. 아래 명령어 중에서 한글로 적힌 부분은 각자에게 맞는 내용으로 변경하여야 합니다.

(1) OpenSSL을 이용하여 CA user account key를 생성합니다. (개인키 생성)

-des3를 빼면 비밀번호 없이 생성된다.

> openssl genrsa -out "C:\cert\account.key" 2048

 

(2) private domain key를 생성합니다. (공개키 생성)

> openssl genrsa -out "C:\cert\도메인.key" 2048


(3) CSR (Certificate Signing Request)를 생성합니다. (인증요청서 생성)

> openssl req -new -key "C:\cert\도메인.key" -sha256 -nodes -subj "/C=KR/ST=Seoul/L=Seoul/O=회사명/OU=부서명/CN=도메인/emailAddress=이메일" -outform PEM -out "C:\cert\도메인.csr"


(4) PJAC를 이용하여 CA user account를 등록합니다. 여기부터는 C:\cert 폴더로 이동 후 실행하여야 합니다.

> java -jar acme_client.jar --command register -a "C:\cert\account.key" --with-agreement-update --email 이메일


(5) 인증서를 요청하고 http-01 challenge 파일을 다운로드 받습니다. http-01 challenge가 무엇인지 궁금하시면 구글에서 검색해 보세요.

> java -jar acme_client.jar --command order-certificate -a "C:\cert\account.key" -w "C:\cert" -c "C:\cert\도메인.csr" --well-known-dir "C:\cert" --one-dir-for-well-known

{"status":"error"}

여기에서 에러 발생 ㅠㅠ 다음으로 진행할 수가 없네


(6) C:\cert 폴더를 열어보면 잡다하게 긴 이름의 파일이 하나 만들어져 있을 것입니다. 그게 http-01 challenge 파일입니다. 그 파일을 Tomcat 설치 경로 하위에 있는 webapps\ROOT\.well-known\acme-challenge 폴더에 복사합니다. 윈도 탐색기에서 “.well-known” 폴더를 만들려고 하면 에러 메시지가 뜨면서 만들어지지 않을 것입니다. 그러면 “.well-known.”과 같이 끝에도 점을 하나 더 찍으면 폴더가 만들어 집니다. Tomcat은 80 포트로 HTTP Connector를 설정하여 아래와 같은 URL로 접속 가능해야 합니다.

http://도메인/.well-known/acme-challenge/잡다구리파일명


(7) 다시 C:\cert 폴더로 돌아와서, PJAC를 이용하여 challenge 파일을 검증합니다.

> java -jar acme_client.jar --command verify-domains -a "C:\cert\account.key" -w "C:\cert" -c "C:\cert\도메인.csr"


(8) 검증이 완료되면 인증서를 생성 및 다운로드합니다.

> java -jar acme_client.jar --command generate-certificate -a "C:\cert\account.key" -w "C:\cert" -c "C:\cert\도메인.csr" --cert-dir "C:\cert"


(9) 이제 C:\cert 폴더에 세 개의 PEM 파일이 생긴 것을 확인할 수 있을 것입니다. (cert.pem, chain.pem, fullchain.pem)


(10) Tomcat에서 사용하기 위해 인증서 파일을 변환합니다.

> openssl pkcs12 -export -in "C:\cert\fullchain.pem" -inkey "C:\cert\도메인.key" -out "C:\cert\keystore.p12" -name tomcat -CAfile "C:\cert\chain.pem" -caname root -password pass:패스워드


(11) 마지막으로, Tomcat에 SSL 인증서를 적용하기 위해 Tomcat의 conf 폴더에 있는 server.xml에 아래와 같이 Connector를 설정합니다.

  • Tomcat 8.5 이상

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"

maxThreads="150" SSLEnabled="true">

<SSLHostConfig>

<Certificate certificateKeystoreFile="C:\cert\keystore.p12"

certificateKeystorePassword="패스워드"

certificateKeystoreType ="pkcs12" type="RSA" />

</SSLHostConfig>

</Connector>

  • Tomcat 8 이하

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"

maxThreads="150" SSLEnabled="true"

keystoreFile="C:\cert\keystore.p12" keystorePass="패스워드" keystoreType="pkcs12">

인증서 갱신하기

Let’s Encrypt 인증서의 유효기간은 90일이기 때문에 계속 유지하려면 주기적으로 인증서를 재발급 받아야 합니다. 만료일이 가까워지면 위의 (4)번에서 입력한 이메일 주소로 알림 메일이 옵니다. 그러면 위의 (5)번부터 (10)번까지 순서대로 다시 실행하고 Tomcat을 재시작하면 됩니다.

출처 : https://letsencrypt.org/ko/docs/challenge-types/

HTTP-01 챌린지

이것은 오늘날 가장 일반적인 도전 유형입니다. Let’s Encrypt는 ACME 클라이언트에 토큰을 주고 ACME 클라이언트는 http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN>의 웹서버에 파일을 저장합니다. 이 파일에는 토큰과 게정 키 지문이 들어있습니다. ACME 클라이언트가 Let’s Encrypt에 파일이 준비되었음을 알리면 Let’s Encrypt는 여러 유리한 지점에서 어쩌면 여러 번 해당 파일을 찾기 위해 노력합니다. 우리의 유효성 검사가 웹서버에서 올바른 응답을 받는다면 유효성 검사는 성공적인 것으로 간주되며 당신은 인증서를 발급받을 수 있습니다. 만약 유효성 검사가 실패하면 새 인증서로 다시 시도해야합니다.

우리의 HTTP-01 챌린지의 구현은 최대 10개의 리다이렉션까지 리다이렉션을 따릅니다. “http:” 또는 “https:“로의 리다이렉션만 허용하고 80번 포트나 443번 포트로만 리다이렉션합니다. IP 주소로의 리다이렉션은 허용하지 않습니다. HTTPS URL로 리다이렉션되면 인증서의 유효성을 검사하지 않습니다(이 문제는 유효한 인증서를 부트 스트랩하기 위한 것이므로 자체 서명되거나 만료된 인증서가 발생할 수 있음).

HTTP-01 챌린지는 80번 포트에서만 수행할 수 있습니다. 클라이언트가 임의의 포트를 지정할 수 있게 하면 문제가 덜 안전해지므로 ACME 표준에서는 허용되지 않습니다.

장점:

  • 도메인 구성에 대한 추가 지식 없이도 쉽게 자동화할 수 있습니다.
  • 호스팅 제공 업체는 CNAME 도메인에 대한 인증서를 발급 할 수 있습니다.
  • 상용 웹서버와 함께 작동합니다.

단점:

  • ISP가 포트 80을 차단하면 작동하지 않습니다 (드문 경우이지만 일부 가정용 ISP에서 일어남).
  • Let’s Encrypt에서는이 과제를 사용하여 와일드 카드 인증서를 발급 할 수 없습니다.
  • 웹 서버가 여러 개인 경우 모든 서버에서 파일을 사용할 수 있는지 확인해야합니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함