본문 바로가기
Develop

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

by 너드나무 2024. 6. 20.
728x90

서론

나이스평가정보 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
반응형