Engineering/Android
Google Play 앱 서명 기능을 사용시 발생한 오류 해결
부스 boos
2025. 7. 24. 15:37
728x90
Android 빌드할때 사용한 signing key 를 구글에서 관리하게 하기 위해 pepk.jar 와 공개키(encryption_public_key.pem) 를 다운받아서 개인 키를 암호화할 수 있다.
test_keystore.jks : 빌드시 생성한 키 스토어 파일
> java -jar pepk.jar --keystore=test_keystore.jks --alias=test_keyalias --output=output.zip --include-cert --rsa-aes-encryption --encryption-key-path=encryption_public_key.pem
Enter password for store 'test_keystore.jks':
Error: Unable to export or encrypt the private key
java.io.IOException: Invalid keystore format
at java.base/sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:664)
at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:222)
at java.base/java.security.KeyStore.load(KeyStore.java:1479)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.KeystoreHelper.loadKeystore(KeystoreHelper.java:53)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.KeystoreHelper.getKeystore(KeystoreHelper.java:39)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.run(ExportEncryptedPrivateKeyTool.java:207)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.main(ExportEncryptedPrivateKeyTool.java:165)
그런데, 갑자기 "Invalid keystore format" 가 나와서 당황했는데, 사용된 키스토어 파일이 잘못될 수도 있다고 해서 keytool 명령어로 키스토어 파일 이상 유무를 확인해 볼 수 있다고 한다.
keytool -list -v -keystore test_keystore.jks
명령어 결과를 보니, "Algorithm HmacPBESHA256 not available" 라는 에러가 다시 발생했다.
> keytool -list -v -keystore test_keystore.jks
Enter keystore password:
keytool error: java.io.IOException: Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available
java.io.IOException: Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2158)
at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:222)
at java.base/java.security.KeyStore.load(KeyStore.java:1479)
at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:1050)
at java.base/sun.security.tools.keytool.Main.run(Main.java:397)
at java.base/sun.security.tools.keytool.Main.main(Main.java:390)
Caused by: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available
at java.base/javax.crypto.Mac.getInstance(Mac.java:191)
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2136)
... 5 more
LLM (gemini) 에서 해당 에러문으로 확인해보니, 사용 중인 Java 런타임 환경에서 HmacPBESHA256 암호화 알고리즘을 사용할 수 없거나 지원하지 않는다는 의미이다.
사용 중인 java 환경을 보니깐, 너무 옛날이긴 하다. (현재 2025년 7월)
> java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
java 버전을 올릴 수는 없어서 OpenJDK 11 을 그나마 최신 버전(11.0.28) 로 업데이트를 한다.
> java -version
openjdk version "11.0.28" 2025-07-15
OpenJDK Runtime Environment Temurin-11.0.28+6 (build 11.0.28+6)
OpenJDK 64-Bit Server VM Temurin-11.0.28+6 (build 11.0.28+6, mixed mode)
pepk 를 재실행해보니 이제는 정상으로 output.zip 이 생성이 되었다.
>java -jar pepk.jar --keystore=test_keystore.jks --alias=test_keyalias --output=output.zip --include-cert --rsa-aes-encryption --encryption-key-path=encryption_public_key.pem
Enter password for store 'test_keystore.jks':
Enter password for key 'test_keyalias':
참고 :
https://www.youtube.com/watch?v=odv_1fxt9BI
https://developer.android.com/studio/publish/app-signing?hl=ko#app-signing-google-play