Keystore 암호화
Jenkins로 릴리스 빌드를 할 때 keystore 파일과 그에 따른 패스워드 등의 정보를 부주의하게 빌드 스크립트 등에 평문으로 기재하고 체크인해 버리면 필요 이상으로 정보를 공개되고 맙니다. 소스코드에다 keystore 파일, keystore의 Alias나 패스워드까지 있으면 apk에 개발자와 똑같은 서명을 할 수 있어 악용할 위험성도 있습니다. 악용을 방지하기 위해서는 이런 파일과 정보를 암호화해야 합니다.
openssl 커맨드를 사용한 공개키 방식 암호화
openssl 커맨드를 사용하여 공개키 방식 암호화를 합니다.
- app/sample.keysotre : 릴리스 빌드 서명에 필요한 keystore 파일
- app/signingconfig.properties : keystore 파일 내의 각 정보
서명에 필요한 정보 (signingconfig.properties)
storeFile=sample.keystore
storePassword=password
keyAlias=sample
keyPassword=password
릴리스용 설정 (app/build.gradle)
android {
signingConfigs {
release {
def configFile = project.rootProject.file('signingconfig.properties')
def properties = new Properties()
properties.load(new FileInputStream(configFile))
storeFile file(properties.storeFile)
storePassword properties.storePassword
keyAlias properties.keyAlias
keyPassword properties.keyPassword
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
암호화된 서명 파일 준비
- 공개키 만들기
$ openssl rand 32 -out key -base64
$ cat key
LByQ9d4znVmEvNgyNdnjeZRDA2arjH9jcAIrtlqQjVc=
- 암호화
$ openssl enc -e -aes128 -kfile key -in signingconfig.properties -out signingconfig.properties.aes128
$ openssl enc -e -aes128 -kfile key -in sample.keystore -out sample.keystore.aes128
.gitignore 설정
...
# Keystore files
*.keystore
# Signing config files
signingconfig.properties
Jenkins 빌드
echo qS77AjH8dTwsiyndDvxQUYggKC80bTEvsd1CS97Ttoc= > key
openssl enc -d -aes128 -kfile key -in signingconfig.properties.aes128 -out signingconfig.properties
openssl enc -d -aes128 -kfile key -in .keystore/sample.keystore.aes128 -out .keystore/sample.keystore
- 적용 예)