반응형
Android APK 서명: .pk8 및 .pem에서 .jks로 변환하기
안드로이드 앱 개발 과정에서 APK 서명은 필수적인 단계입니다. 이 글에서는 .pk8 및 .pem 파일을 .jks(Java Key Store) 형식으로 변환하여 APK에 서명하는 방법과, 중간에 발생할 수 있는 에러 해결 방법을 체계적으로 정리했습니다.

1. 서명 파일 변환의 필요성
일반적으로 Android Studio에서는 .jks 형식의 키스토어 파일을 사용합니다. 그러나 .pk8(개인 키)와 .pem(공개 키) 파일만 있는 상황에서는 이를 .jks 파일로 변환해야 APK 서명이 가능합니다. 아래는 변환 과정의 주요 단계입니다.
2. 변환 과정
단계 1: PKCS#12 형식으로 변환
첫 번째 단계는 .pk8 및 .pem 파일을 PKCS#12(.p12) 형식으로 변환하는 것입니다. 이를 위해 OpenSSL을 사용합니다.
openssl pkcs12 -export -in platform.x509.pem -inkey platform.pk8 -out keystore.p12 -name your_alias
- platform.x509.pem: 공개 키 파일
- platform.pk8: 개인 키 파일
- keystore.p12: 생성될 PKCS#12 파일 이름
- your_alias: 키스토어에서 사용할 별칭(alias)
주의: .pk8 파일이 DER 형식인지 확인해야 합니다. 필요하다면 PEM 형식으로 변환합니다. (에러 해결 방법에서 자세히 설명)
단계 2: JKS(Java Key Store) 형식으로 변환
생성된 PKCS#12 파일을 JKS 형식으로 변환합니다. 이를 위해 Java의 keytool 명령어를 사용합니다.
keytool -importkeystore -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -alias your_alias
- keystore.jks: 변환될 JKS 파일 이름
- keystore.p12: PKCS#12 파일 이름
단계 3: 변환 결과 확인
변환된 JKS 파일이 정상적으로 생성되었는지 확인합니다.
keytool -list -v -keystore keystore.jks
3. 에러 및 해결 방법
변환 과정에서 자주 발생하는 에러와 이를 해결하는 방법을 정리했습니다.
에러: Could not read private key from -inkey file
- 원인: OpenSSL이 .pk8 파일에서 개인 키를 읽지 못하는 경우 발생합니다. .pk8 파일이 DER 형식일 가능성이 높습니다.
해결 방법
- .pk8 파일의 형식 확인 및 변환 .pk8 파일이 DER 형식인지 확인 후, 필요 시 PEM 형식으로 변환합니다.
- platform.pk8: 입력 파일 (DER 형식)
- platform.pem: 출력 파일 (PEM 형식)
- openssl pkcs8 -topk8 -inform DER -outform PEM -in platform.pk8 -out platform.pem -nocrypt
- PEM 형식의 개인 키 사용 변환된 PEM 형식의 개인 키 파일(platform.pem)을 사용하여 다시 시도합니다.
- openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out keystore.p12 -name your_alias
4. 결론
.pk8 및 .pem 파일을 .jks 파일로 변환하는 과정은 다음 단계를 포함합니다:
- OpenSSL을 사용한 PKCS#12(.p12) 파일 생성
- keytool을 사용한 JKS 파일 변환
- 변환된 파일의 내용 확인
변환 과정에서 발생하는 주요 에러는 파일 형식 불일치로 인한 것이며, 이를 해결하기 위해 OpenSSL로 .pk8 파일을 PEM 형식으로 변환해야 합니다. 이 글이 해당 과정을 이해하고 문제를 해결하는 데 도움이 되었기를 바랍니다.
반응형