Develop

[JDK, PASS] cannot access class com.sun.crypto.provider.SunJCE

너드나무 2024. 6. 20. 17:40
반응형

서론

나이스평가정보 PASS 본인안심확인 서비스를 연동하는 도중 JDK 11 에서는 문제 없었으나,
JDK 17이 적용된 프로젝트에서 발생한 이슈에 대해 정리해본다.

참고 배경

  • Gradle 9.0
    • Gradle에 NiceId.jar를 추가하고 VM Option을 지정하였으나 실행 시 VM Option이 미적용되어 동일한 이슈가 발생되었다.
compileJava {
	options.compilerArgs += ["--add-exports=jdk.compiler/com.sun.crypto.provider=ALL-UNNAMED"]
}

dependencies {
	...

	implementation files('libs/NiceId.jar')
}

 

  • com.sun.crypto.provider.SunJCE
    • com.sun.crypto.* 라이브러리는 java.security.Security.getInstance()로 변경되었다.
 

Java Cryptography Architecture Oracle Providers Documentation

AES ECB, CBC, PCBC, CTR, CTS, CFB, CFB8..CFB128, OFB, OFB8..OFB128 NoPadding, PKCS5Padding, ISO10126Padding PBEWithMD5AndDES, PBEWithMD5AndTripleDES, PBEWithSHA1AndDESede, PBEWithSHA1AndRC2_40, PBEWithSHA1AndRC2_128, PBEWithSHA1AndRC4_40, PBEWithSHA1AndRC4

docs.oracle.com

 

  • 나이스평가정보 안심본인인증 jar
    • NiceID_v1.1.jar로 지원받는 나이스평가정보 라이브러리는 com.sun.crypto.provider.SunJCE를 의존하고 있다.
    • 외부 라이브러리를 커스텀하는 것은 좋지 않은 방법임으로 개발 프로젝트에서 해결해야 한다.

해결

  • --add-exports, ALL-UNNAMED
    • 장기적인 해결책이 아닌 임시 방편으로, 모듈 시스템의 캡슐화가 중단되어 JDK의 내부 API를 사용할 수 없게 된다.
    • 하지만, JDK 17에는 com.sun.crypto.provider 모듈을 지원하지 않기 때문에 사용한다. 
 

Java 8에서 Java 11로 전환 - Azure

Java 8에서 Java 11로의 전환을 관리하는 방법에 대한 가이드입니다.

learn.microsoft.com

 

  • Intellij VM Options
    • Run/Debug Configurations에 Add VM options를 반영한다.
--add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED

 

  • Java Command Line
    • -jar 옵션이 가장 마지막에 오는 것이 중요하다.
    • 이전에 넣으면 이후 Arguments는 인식이 되지 않는다.
nohup /bin/java \
    --add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED \
    -Dspring.profiles.active=dev \
    -Dserver.port=8080 \
    -Dlogging.config=./logback-conf.xml \
    -jar server.jar \
    &> was1.log &
 
728x90
반응형