티스토리 뷰
발단
java 환경에서 작업을 진행하던 중 아래와 같은 오류 로그 발생
로컬 작업환경에서는 정상적으로 테스트되었으나 서버상에서 테스트 시 발생
Java security providerexception could not derive key
java rsa decryption is failed
해당 에러가 발생하는 부분에서 사용하고 있는 메소드 확인 시 아래와 같음
import org.bouncycastle.util.encoders.Base64
잘 알려진 JCE(Java Cryptography Extension) 라이브러리 보안 공급자 중 하나인 "bouncycastleprovider"를 호출하다 발생하는 것으로 확인.
원인파악
bouncycastleprovider 사용시 기본 설정하는 부분에 대하여 로컬과 서버 환경을 비교하였음.
1. 보안 공급자 목록 확인
로컬
C:\Program Files\Java\jdk1.8.0_202\jre\lib\security\java.security
서버
[JAVA_HOME]/jre/lib/security/java.security
파일 내용
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI
security.provider.11=org.bouncycastle.jce.provider.bouncycastleprovider
security.provider.11 존재 여부 확인 두 환경 모두 존재하여 이상 없음.
2.Extension ClassLoader 라이브러리 존재 여부
로컬
C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext
서버
[JAVA_HOME]/jre/lib/ext
해당 경로에 "bcproc-ext-jdk15-145.jar" 파일 존재 여부 확인
로컬환경에서 해당 파일 확인 되나 서버환경에서 해당 파일 존재하지 않음 확인
서버 측 "bcproc-ext-jdk15-145.jar" 현행화 후 application 재기동 후 테스트 정상 확인
원인을 확인하던 중 서버의 해당 프로젝트 경로의 라이브러리 폴더 /lib 내에 "bcproc-ext-jdk15-145.jar" 파일이 존재하였으나 해당 에러메시지가 발생하는 것에 대하여 확인이 필요하다 생각이 되었음.
현재 작업 중인 환경은 프로젝트 소스에서 직접 호출하는 것이 아닌 프로젝트 내 다른 jar 파일 내부에서 bouncycastleprovider의 메서드를 호출하는 로직으로 확인됨.
classpath 내 jar 간 참조는 불가하고 jar내 MENIFEST.MF 파일 내 별도 정의가 없었으므로
classpath의 /lib 경로의 파일이 아닌 Extension ClassLoader를 통한 참조를 진행하였음.
* ClassLoader 종류
- Bootstrap ClassLoader : $JAVA_HOME/jre/lib/rt.jar
- Extension ClassLoader : $JAVA_HOME/jre/lib/ext/*.jar
- Application ClassLoader : $CLASSPATH
* ClassLoader 우선순위
상위 ClassLoader에 있는 Class가 우선순위가 높다
Bootstrap > Extension > Application
* ClassLoader에서 로드된 클래스가 참조하는 다른 클래스는 상위의 ClassLoader에서 찾을 수 있어야 함.
'JAVA' 카테고리의 다른 글
MyBatis ORACLE SEQUENCE 미증가 해결 (1) | 2024.04.19 |
---|---|
ObjectMapper 결과 값 주입이 안되는 경우 (0) | 2024.01.17 |
세션 일부 값 누락 현상 조치하기(세션 클러스터링) (0) | 2023.08.07 |
java Optional orElse() 의도하지 않은 로직 수행 시 확인사항 (0) | 2023.04.07 |
vscode Execution failed for task ':compileJava' 해결 (0) | 2023.02.27 |
- Total
- Today
- Yesterday
- btye
- WAS
- Windows
- vscode
- html
- Git
- 이벤트발생
- IMAGE
- React
- Eclipse
- TLS
- 깨짐
- docker
- web
- SSL
- parse
- Oracle
- Linux
- SQL
- SpringBoot
- gradle
- Java
- spring
- JPA
- 날짜
- mybatis
- jaxen
- JSON
- jQuery
- 컨테이너
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |