본문 바로가기

개발/JAVA

JAVA Spring 사이트에 Let’s Encrypt 인증서를 발급 받는 방법

운영체제: Centos 7

web server: apache + tomcat

 

이미 특정 도메인으로 서비스를 하고 있는 사이트가 있다.

해당 사이트는 백앤드가 java spring 으로 개발되어 있다.

임시적으로 운영할 사이트여서 무료 인증서인 Let’s Encrypt 인증서를 발급받으려고 한다.

 

저장소를 추가하고 설치한다.

yum install epel-release
yum install python-certbot-apache

 

인증서를 발급 받아본다.

certbot --apache -d 도메인명

 

아래와 같은 오류가 난다. 왜냐면 Let’s Encrypt 에서 해당 도메인의 실제 소유주가 맞는지 임의의 호출을 해보기 때문이다.

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: 도메인명
   Type:   unauthorized
   Detail: Invalid response from
   http://도메인명/.well-known/acme-challenge/PFOeNh72aLBJwZtOOifDo3bd7ro1Lowwv9Qf58oDOoI
   [101.79.9.164]: 404

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.

 

이 문제를 해결하려면 /.well-known/acme-challenge/ 폴더에 쓰기 권한을 주면 된다고 한다. 

현재 운영되고 있는 사이트에서 .well-known 로 들어오는 request 는 아예 차단되고 있기 때문에 spring 환경 설정에서 mapping 이 필요하다.

 

나는 위의 url 이 정상적으로 호출만 되면 되기때문에 꼼수로 해결했다.

 

1. /.well-known 로 호출이 오는 것은 /resources/  폴더로 맵핑 (servlet-context.xml 수정후 톰캣 재시작)

<resources mapping="/.well-known/**" location="/resources/" />

 

2. 인증서 생성 수동으로 호출

certbot certonly --manual

 

3. 도메인명 적어주기

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): 도메인명

 

4. 도메인 명을 쓰고 엔터를 치면 어떤 임의의 호출을 할지 아래와 같이 미리 알려준다. 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:

CxxtZHEIxQ2nmzpwOvyA9afE6U_mEExF2BUltDfhWJE.nMcFB0EPfzwbG7Bix8BqqT3FW7OFVFvH1kYCZtyMz3k

And make it available on your web server at this URL:

http://도메인명/.well-known/acme-challenge/CxxtZHEIxQ2nmzpwOvyA9afE6U_mEExF2BUltDfhWJE

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

 

5. 내가 위의 내용을 가지고 다른 터미널에서 아래의 파일을 만든다.

(/.well-known 로 호출이 오는 것은 /resources/  폴더로 맵핑되어 있다.)

/resources/acme-challenge/CxxtZHEIxQ2nmzpwOvyA9afE6U_mEExF2BUltDfhWJE

 

6. 파일을 만들었다면 엔터를 쳐준다.

 

발급이 완료되면 어디에 저장되었는지 알려준다. 

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/도메인명/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/도메인명/privkey.pem
   Your certificate will expire on 2022-07-05. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - 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

 

이제 발급된 인증서를 아파치 설정에서 추가해주면 완료.

'개발 > JAVA' 카테고리의 다른 글

Mac 에서 JDK 버전 변경 및 이클립스 적용  (0) 2020.12.09