Java 개발 환경에서 사용자 정의 인증서를 생성하고 이 인증서를 신뢰하는 방법을 설명합니다.
JKS 방식 예제
- 인증서 생성
다음 명령어로 키 쌍과 자체 서명 인증서를 생성합니다. 모든 사용자 정의 값은 영문으로 설정하세요.
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -storetype JKS -keystore mykeystore.keystore -validity 365 -ext SAN=dns:myapp.example.com,ip:192.168.1.100
명령 실행 후 비밀번호와 조직 정보를 입력합니다.
키 저장소 비밀번호 입력: changeit
새 비밀번호 재입력: changeit
이름과 성은 무엇입니까?
[Unknown]: myapp.example.com
조직 단위 이름은 무엇입니까?
[Unknown]: DevTeam
조직 이름은 무엇입니까?
[Unknown]: MyCompany
구/군/시 이름은 무엇입니까?
[Unknown]: Seoul
시/도 이름은 무엇입니까?
[Unknown]: Seoul
국가 코드(두 글자)는 무엇입니까?
[Unknown]: KR
CN=myapp.example.com, OU=DevTeam, O=MyCompany, L=Seoul, ST=Seoul, C=KR이(가) 맞습니까?
[아니오]: 예
<myalias>의 키 비밀번호 입력
(키 저장소 비밀번호와 동일한 경우 Enter)
Enter
- 인증서 파일(.cer) 내보내기
keytool -export -alias myalias -keystore mykeystore.keystore -file mycert.cer
키 저장소 비밀번호 입력: changeit
파일 <mycert.cer>에 저장된 인증서
- 신뢰 저장소(TrustStore) 생성
내보낸 인증서를 신뢰 저장소로 가져옵니다.
keytool -import -alias myalias -file mycert.cer -keystore truststore.jks -storepass truststorepwd
이 인증서를 신뢰하시겠습니까? [아니오]: 예
인증서가 키 저장소에 추가되었습니다.
- Spring Boot 애플리케이션 설정
src/main/resources 폴더에 mykeystore.keystore 파일을 넣습니다. application.yml 또는 application.properties에 다음 설정을 추가합니다.
server:
port: 8443
ssl:
enabled: true
key-store: classpath:mykeystore.keystore
key-store-password: changeit
key-store-type: JKS
key-alias: myalias
key-password: changeit
실행 시 JVM 인수로 신뢰 저장소를 지정합니다.
-Djavax.net.ssl.trustStore=truststore.jks -Djavax.net.ssl.trustStorePassword=truststorepwd
PKCS12 방식 예제
- PKCS12 인증서 생성
한 줄 명령어로 모든 정보를 포함하여 생성할 수 있습니다.
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore mycert.p12 -validity 365 -storepass p12password -keypass p12password -dname "CN=myapp.example.com, OU=DevTeam, O=MyCompany, L=Seoul, ST=Seoul, C=KR" -ext "SAN=dns:myapp.example.com,ip:192.168.1.100"
- 공개 키 인증서(CER) 내보내기
keytool -export -alias myalias -keystore mycert.p12 -storetype PKCS12 -file mycert.cer
키 저장소 비밀번호 입력: p12password
파일 <mycert.cer>에 저장된 인증서
- 신뢰 저장소 생성 (JKS 형식으로)
keytool -import -alias myalias -file mycert.cer -keystore truststore.jks -storepass truststorepwd
이 인증서를 신뢰하시겠습니까? [아니오]: 예
인증서가 키 저장소에 추가되었습니다.
이후 Spring Boot 설정은 JKS 방식과 동일합니다. PKCS12 파일을 키 저장소로 사용할 경우 key-store-type을 PKCS12로 변경하고 비밀번호를 일치시키면 됩니다.