sourcecode

어떻게 하면 spring boot 어플리케이션에서 letsencrypt SSL 증명서를 설정하고 사용할 수 있습니까?

codebag 2023. 2. 11. 09:17
반응형

어떻게 하면 spring boot 어플리케이션에서 letsencrypt SSL 증명서를 설정하고 사용할 수 있습니까?

서버 보안은 처음이라 잘 모르지만 Digital Ocean Droplet에서 실행되는 Spring Boot Application에서 HTTPS를 사용해야 합니다.

제 생각은 letsencrypt 증명서를 등록하고 Spring에게 그것을 사용하라고 말하는 것입니다.

하지만 어떻게 해야 할지 모르겠어요.

감사해요.

Let's Encrypt와 Spring Boot에 대한 블로그 투고를 2개 작성했습니다.

  1. 증명서 발급 Let's Encrypt Certificate로 보호된 Spring Boot Application
  2. 증명서 갱신증명서 갱신을 암호화합시다: 스프링 부트용

간단히 말하면, 순서는 다음과 같습니다.

  1. Let's Encrypt 클라이언트(certbot) 풀링.

  2. 도메인 증명서 생성(example.com 등)

    ./certbot-auto certonly -a standalone -d example.com -d www.example.com

/etc/letsencrypt/live/example.com. 에서는 PKCS파일이 Spring Boot (스프링 부트) PKCS #12 입니다., 키를 키스토어(들어 OpenSSL사용)로.「 PKCS#12 」, 「PKCS#12」, 「PKCS#12」, 「PKCS#12」, 「OpenSSL」입니다.음음음같 뭇매하다

  1. ./etc/letsencrypt/live/example.com디렉토리로 이동합니다.
  2. `openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name tomcat -CAfile chain.pem -caname root`
    

PKCS12를 사용하는 keystore.p12 파일이 생성됩니다./etc/letsencrypt/live/example.com.

이제 Spring Boot 어플리케이션을 설정합니다.application.properties 파일을 열고 다음 속성을 저장합니다.

server.port=8443
security.require-ssl=true
server.ssl.key-store=/etc/letsencrypt/live/example.com/keystore.p12
server.ssl.key-store-password=<your-password>
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat

자세한 내용은 제 블로그 투고를 참조해 주세요.

1단계: git에서 certbot 다운로드

도메인 주소가 가리키는 서버에서 암호화 소스 코드를 가져와야 합니다.이 절차에는 몇 분 정도 걸릴 수 있습니다.

$git clone https://github.com/certbot/certbot

$ cd certbot

$ . / certbot - auto -- 도움말

비고: Python 2.7.8(또는 그 이상)을 미리 설치해야 합니다.

스텝 2: 증명서와 개인 키 생성

단말기에서 다음 명령을 실행하면 암호화 기능이 인증서와 개인 키를 생성합니다.

$ . / certbot - auto cert only - a standalone \

-d example.com -d example.com

비고: 키는 /etc/letsencrypt/live/example.com 디렉토리에 생성됩니다.

스텝 3: PEM 파일에서 PKCS12 파일 생성

PEM 파일을 PKCS12 버전으로 변환하려면 다음 절차를 수행합니다.단말기의 OpenSSL을 사용하여 /etc/letsencrypt/live/example.com로 이동하여 키를 PKCS12로 변환합니다.

$openssl pkcs12 - export - 풀체인의 경우.pem \

       -inkey privkey.pem \

           -out keystore.p12 \

       -name tomcat \

       -CAfile chain.pem \

       -caname root

내보내기 비밀번호 입력:

확인 중 - 내보내기 비밀번호 입력:

(주의:- 한 번에 한 줄씩 쓰고 Enter 키를 누릅니다)

스텝 4: 스프링 부트애플리케이션 설정

application.properties를 엽니다.이 설정을 여기에 둡니다.

server.port=8443 security.sl=true

server.ssl.key-store=/etc/letsencrypt/live/example.com/keystore.p12

server.ssl.key-store-password= 비밀번호

server.ssl을 클릭합니다.keyStoreType=PKCS12

server.ssl.keyAlias= tomcat

또 다른 옵션은 Spring Boot Starter ACME을 사용하는 것입니다.

https://github.com/creactiviti/spring-boot-starter-acme

ACME(Automatic Certificate Management Environment)는 LetsEncrypt가 증명서를 자동으로 발급하기 위해 사용하는 프로토콜입니다.

스프링 부트 Webflux의 경우 속성 구성이 변경되었습니다.

server.port=443

server.ssl.enabled=true//the changed line
server.ssl.keyAlias=netty
server.ssl.key-store=path
server.ssl.key-store-password=password
server.ssl.keyStoreType=PKCS12

실행암호화(재시작 불필요)를 통해 etencrypt-tomcat 쿼리 인증서 새로 고침
Tomcat Spring Boot Spring Boot 。

도커 이미지로 패키지화되어 재사용이 용이합니다.이미지 내용:

  • Let's Encrypt를 통해 증명서를 관리하기 위해 탈수되었습니다.
  • 갱신 후 런타임에 증명서를 핫 새로고침하기 위한 tomcat-reloading-module,
  • Tomcat 및 탈수 프로세스를 적절하게 처리하기 위한 init 시스템(init)
  • tomcat을 기동하여 탈수시키는 엔트리 포인트스크립트
  • Tomcat(libtcnat)에서 사용되는 Apache Portable Runtime(APR) 및 APR용 JNI 래퍼의 사전 컴파일 버전이기 때문에 Tomcat은 가능한 한 최고의 TLS 성능을 제공합니다.

블로그 투고를 읽고, 사용하시는 애플리케이션에서의 사용 방법 및 기술적인 상세 내용에 대해 알아보십시오.

Spring-Boot에 내장된 Tomcat이 인증서를 자동으로 가져와 유지할 수 있도록 하는 순수 Java의 작은 라이브러리를 만들었습니다: Spring-Boot LetsEncrypt 도우미

하나의 Java 파일 + ACME4J/BouncyCastle에 의존하여 코드로 재사용할 수 있습니다.

즉, 다음과 같은 처리를 합니다.

  1. 프로그램 시 KeyStore에 정의된 됩니다.server.ssl속성(아직 존재하지 않는 경우)을 선택합니다(또한 여기에 자기 서명 만료 증명서를 추가합니다).
  2. LetsEncrypt로부터의 HTTP-01 ACME 챌린지용 Tomcat 커넥터를 포트 80에 등록합니다.
  3. KeyStore의 인증서가 오래되었거나 누락되었는지 확인하는 스레드를 실행합니다.
  4. 증명서가 오래되었거나 누락된 경우 LetsEncrypt에 명령을 발행하여 포트 80에서 HTTP-01 ACME 챌린지를 전달합니다.
  5. 챌린지 통과 후 증명서는 에서 정의된 KeyStore에 저장됩니다.server.ssl및 문제reloadSslHostConfigsTomcat HTTPS 지원 커넥터에서

이러한 절차를 통해 발급에서 업데이트까지 LetsEncrypt 증명서의 라이프 사이클 전체가 Java 어플리케이션 내에서 커버됩니다.Java 이외의 서드파티는 일절 없습니다.

.pem을 .p12로 내보낼 때 키툴이 파일 형식을 인식하지 못해 문제가 있었습니다.다음은 여러 번 검색한 후 나에게 도움이 된 명령어입니다.

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name tomcat -CAfile chain.pem -caname root -legacy -passout pass:changeit

그 후, 파일 keystore.p12 가 됩니다.따라서 이전에 Emad Van Ben이 말한 것처럼 application.properties 로 설정을 합니다.

  1. letsencrypt에서 SSL 인증서 가져오기
  2. 를 사용하여 키스토어에 추가합니다.keytoolJava 명령어
  3. 위에서 생성된 키스토어를 사용하도록 Spring 응용 프로그램을 구성합니다.

파일은 다음과 같습니다.

 server.port = 8443
 server.ssl.key-store = classpath:sample.jks
 server.ssl.key-store-password = secret
 server.ssl.key-password = password

언급URL : https://stackoverflow.com/questions/36991562/how-can-i-set-up-a-letsencrypt-ssl-certificate-and-use-it-in-a-spring-boot-appli

반응형