스프링 (STS 4.0.1) 이후 인증서 오류가 발생할 때가 있습니다.
Service URL : https://start.spring.io
오류 내역
1. InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
2. SuncertPathBuilderException: unable to find valid certification path to requested target
유효한 인증서를 찾을 수 없다는 오류로 자체 (설치 된 PC)의 인증서 파일에(cacerts) 인증서 목록(keystore)를 추가해야 합니다.
1. download source
https://gist.githubusercontent.com/lesstif/cd26f57b7cfd2cd55241b20e05b5cd93/raw/InstallCert.java
위 사이트에서 해당 InstallCert.java 파일 내 PC에 다운로드 받습니다.
2. 컴파일
javac InstallCert.java
위 명령을 통해 컴파일 합니다.
3. 실행
신뢰할 수 있는 인증 주소에(start.spring.io)를 추가하기 .
java -cp . InstallCert start.spring.io
Server sent 2 certificate(s):
1 Subject CN=*.spring.io, OU=Spring, O="Pivotal Software, Inc.", L=Palo Alto, ST=California, C=US
Issuer CN=DigiCert SHA2 Secure Server CA, O=DigiCert Inc, C=US
sha1 2e b5 a4 67 23 a3 65 a7 c6 da 70 63 00 b3 1a 0c 90 90 04 a6
md5 ae 16 19 3c 39 a2 12 59 4c 56 f0 c0 e4 02 5f 0e
2 Subject CN=DigiCert SHA2 Secure Server CA, O=DigiCert Inc, C=US
Issuer CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
sha1 1f b8 6b 11 68 ec 74 31 54 06 2e 8c 9c c5 b1 71 a4 b7 cc b4
md5 34 5e ff 15 b7 a4 9a dd 45 1b 65 a7 f4 bd c6 ae
Enter certificate to add to trusted keystore or 'q' to quit: [1]
1
*.spring.io 부분이 있는 인증서를 선택하면 되는데 1번 이 해당됨
Added certificate to keystore 'jssecacerts' using alias 'start.spring.io-1'
위의 키 값을 jssecacerts로 저장합니다.
5. 저장된 Keystore로부터 인증을 추출합니다.
C:\RabbitMQ_WorkSpace>dir
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: AC4A-6A9A
C:\RabbitMQ_WorkSpace 디렉터리
2020-01-13 오후 04:05 <DIR> .
2020-01-13 오후 04:05 <DIR> ..
2020-01-13 오후 03:45 <DIR> .metadata
2020-01-13 오후 04:05 1,086 InstallCert$SavingTrustManager.class
2020-01-13 오후 04:05 6,181 InstallCert.class
2020-01-13 오후 04:04 8,450 InstallCert.java
2020-01-13 오후 04:06 1,673 jssecacerts
2020-01-13 오후 03:45 <DIR> Servers
4개 파일 17,390 바이트
4개 디렉터리 153,032,622,080 바이트 남음
C:\RabbitMQ_WorkSpace>keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias start.spring.io-1
인증서가 <output.cert> 파일에 저장되었습니다.
keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias start.spring.io-1
위의 명령을 통해 output.cert 파일을 만듭니다.
6. JDK에 해당 인증 키값을 추가하여 줍니다.
C:\Users\HJP>echo %JAVA_HOME%
C:\jdk-9+181_windows-x64_ri\java-se-9-ri\jdk-9
위의 명령어와 같이 JAVA_HOME 디렉토리를 확인합니다.
그 폴더에서 파일 찾기 하여 cacerts 파일을 찾습니다.
C:\RabbitMQ_WorkSpace>keytool -importcert -keystore C:\jdk-9+181_windows-x64_ri\java-se-9-ri\jdk-9\lib\security\cacerts -storepass changeit -file output.cert -alias letsencrypt
경고: -cacerts 옵션을 사용하여 cacerts 키 저장소에 액세스하십시오.
소유자: CN=*.spring.io, OU=Spring, O="Pivotal Software, Inc.", L=Palo Alto, ST=California, C=US
발행자: CN=DigiCert SHA2 Secure Server CA, O=DigiCert Inc, C=US
일련 번호: 2329581437e1d99e0471dbdf6b41676
적합한 시작 날짜: Fri Mar 15 09:00:00 KST 2019 종료 날짜: Wed Apr 01 21:00:00 KST 2020
인증서 지문:
SHA1: 2E:B5:A4:67:23:A3:65:A7:C6:DA:70:63:00:B3:1A:0C:90:90:04:A6
SHA256: 50:9F:AD:89:2A:6E:58:8B:56:22:91:47:0C:92:49:F2:83:CA:1F:D3:29:35:99:15:16:DD:FF:09:C0:00:0D:BB
서명 알고리즘 이름: SHA256withRSA
주체 공용 키 알고리즘: 2048비트 RSA 키
버전: 3
keytool -importcert -keystore C:\jdk-9+181_windows-x64_ri\java-se-9-ri\jdk-9\lib\security\cacerts -storepass changeit -file output.cert -alias letsencrypt
위와 같이 cacerts 파일의 경로를 정확하게 기재 후 적용하면 됩니다.
그 후로는 start.spring.io 서버 접근시 오류가 없게 됩니다.