본문 바로가기

Android 서명

Android Keystore 생성기

Android Studio나 keytool 없이 몇 초 만에 온라인으로 Android keystore를 생성하세요. Gradle, Capacitor, fastlane, CI, Google Play에서 바로 사용할 수 있는 PKCS#12 릴리스 keystore, PEM 인증서, SHA-1 및 SHA-256 지문(fingerprint)을 받으세요.

컨테이너

PKCS#12

키

RSA 2048, SHA-256

지문

SHA-1 및 SHA-256

릴리스 체크리스트

  1. 1. 이 앱에서 계속 사용할 alias와 password를 선택하세요.
  2. 2. keystore를 다운로드하고 메타데이터를 secret manager에 저장하세요.
  3. 3. Gradle 또는 CI 환경에 동일한 alias와 password를 설정하세요.
  4. 4. 향후 Play 릴리스가 깨지지 않도록 업로드 키를 안정적으로 유지하세요.

입력

Keystore 정보

서명 인증서에 포함될 subject 정보를 입력하고 안정적인 alias를 선택하세요.

결과물

생성된 Android 서명 번들

생성이 완료되면 다운로드 가능한 keystore와 스토어 설정 또는 OAuth 연동에 필요한 인증서 내보내기 및 지문을 받게 됩니다.

서명 번들을 생성하면 여기에 별칭(alias), 지문 및 파일 다운로드 링크가 표시됩니다.

기본 개념

Android keystore란 무엇인가요?

Android keystore는 앱 서명에 사용되는 개인 키와 인증서가 들어 있는 비밀번호로 보호되는 파일입니다. 모든 APK와 Android App Bundle은 설치하거나 게시하기 전에 서명해야 하며, Android는 이미 설치된 버전과 동일한 키로 서명된 경우에만 업데이트를 허용합니다.

따라서 keystore는 프로젝트에서 가장 중요한 파일 중 하나입니다. Play App Signing을 사용하면 keystore는 여러분의 키 업로드 역할을 하며, Google은 앱을 다시 서명하기 전에 이를 확인합니다. Play App Signing을 사용하지 않으면 keystore가 바로 앱 서명 키 자체이며, 이를 잃으면 더 이상 앱을 업데이트할 수 없습니다.

이 생성기는 RSA 2048비트 키와 SHA-256 인증서로 PKCS#12(.p12) keystore를 만들며, 결과물은 다음의 결과물과 동일합니다: keytool Google Play 요구 사항을 충족하는 25년 기본 유효 기간을 가진 Android Studio signing wizard의 결과물과 같습니다.

보안 및 개인정보 보호

keystore 생성 방식

  • keystore는 HTTPS를 통해 stateless Capgo 엔드포인트에서 요청 시 생성되어 브라우저로 바로 다운로드됩니다.
  • 응답은 다음과 함께 전송됩니다: Cache-Control: no-store. 개인 키, 비밀번호, 파일은 데이터베이스에 저장되지 않으며 응답 후에도 보관되지 않습니다.
  • keystore는 PKCS#12 컨테이너 내에서 AES-256 암호화를 사용해 설정한 비밀번호로 보호됩니다.
  • 계정이나 가입이 필요 없으며, 남용 방지를 위해 요청 횟수가 제한됩니다.

키가 내 컴퓨터를 벗어나지 않아야 하나요? 동일한 keytool 명령어를 로컬에서 실행하세요. 같은 종류의 keystore가 만들어집니다.

동일한 keytool 명령어
keytool -genkeypair -v \
  -storetype PKCS12 \
  -keystore release.p12 \
  -alias release \
  -keyalg RSA -keysize 2048 \
  -validity 9125 \
  -dname "CN=Jane Doe, O=Acme Mobile, C=DE"

단계별 안내

온라인 Android keystore 생성 방법

빈 양식에서 Google Play에 서명된 릴리스로 배포하기까지 단 6단계면 충분합니다. 처음 3단계는 1분도 채 걸리지 않습니다.

  1. 1단계

    인증서 정보 입력

    전체 이름, 이메일, 두 글자 국가 code를 입력하세요. 조직, 부서, 도시, 주는 선택 사항이며 인증서 Subject에만 표시됩니다.

  2. 2단계

    Alias, 유효 기간, 비밀번호 설정

    release 또는 upload와 같은 간단한 alias를 선택하고, 유효 기간은 25년으로 유지하며, 8자 이상의 강력한 비밀번호를 설정하세요. 계속하기 전에 이 세 가지 정보를 반드시 기록해 두세요.

  3. 3단계

    Keystore 생성 및 다운로드

    Generate keystore를 선택한 후, .p12 keystore와 PEM 인증서를 다운로드하세요. 결과 패널에서 SHA-1 및 SHA-256 fingerprint를 복사하세요.

  4. 4단계

    keystore와 인증 정보 백업

    keystore 파일, alias, 비밀번호를 비밀번호 관리자나 secret manager에 함께 저장하세요. keystore를 Git에 절대 커밋하지 마세요.

  5. 5단계

    빌드 시 서명 설정

    Gradle, Capacitor CLI, fastlane 또는 Capgo Cloud Build에서 alias와 비밀번호로 keystore를 지정하도록 설정한 뒤, 서명된 release AAB 또는 APK를 빌드하세요.

  6. 6단계

    Google Play에 서명된 앱 업로드

    Play Console에 서명된 Android App Bundle을 업로드하세요. Play App Signing을 사용하면 이 keystore는 업로드 키가 되며, Google이 최종 앱 서명 키를 관리합니다.

결과물 사용하기

생성된 keystore로 Android 앱 서명

alias와 비밀번호를 위에서 입력한 값으로 교체하세요. keystore가 PKCS#12 형식이므로 key password와 store password는 동일합니다.

Gradle 서명 설정

Capacitor, Ionic, React Native, Flutter 및 네이티브 프로젝트에서 작동합니다. 비밀번호는 gradle.properties 또는 환경 변수에 저장하세요.

android/app/build.gradle
// android/app/build.gradle
android {
    signingConfigs {
        release {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_STORE_PASSWORD
            storeType "pkcs12"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

# ~/.gradle/gradle.properties (keep out of Git)
RELEASE_STORE_FILE=/path/to/release.p12
RELEASE_STORE_PASSWORD=your-password
RELEASE_KEY_ALIAS=release

Capacitor CLI

단 하나의 명령어로 Capacitor 앱의 서명된 Android App Bundle를 빌드하세요.

Capacitor 서명 빌드
bunx cap build android \
  --keystorepath ./release.p12 \
  --keystorepass "your-password" \
  --keystorealias release \
  --keystorealiaspass "your-password" \
  --androidreleasetype AAB

Capgo Cloud Build

keystore를 한 번 저장한 후 Capgo로 클라우드에서 iOS 및 Android 앱을 빌드하고 서명하세요.

Capgo CLI
bunx @capgo/cli@latest build credentials save \
  --platform android \
  --keystore ./release.p12 \
  --keystore-alias release \
  --keystore-key-password "your-password" \
  --keystore-store-password "your-password"

fastlane

CI 시크릿에서 서명 속성을 Gradle 액션에 주입하세요.

Fastfile
gradle(
  task: "bundle",
  build_type: "Release",
  properties: {
    "android.injected.signing.store.file" => ENV["RELEASE_STORE_FILE"],
    "android.injected.signing.store.password" => ENV["RELEASE_STORE_PASSWORD"],
    "android.injected.signing.key.alias" => ENV["RELEASE_KEY_ALIAS"],
    "android.injected.signing.key.password" => ENV["RELEASE_STORE_PASSWORD"],
  }
)

CI에서 검증, 변환 및 저장

별칭과 지문을 확인하고, 레거시 도구를 위해 JKS로 변환하거나, CI 시크릿을 위해 파일을 인코딩합니다.

keytool 및 base64
# Inspect the keystore, alias, and fingerprints
keytool -list -v -keystore release.p12 -storetype PKCS12

# Convert to JKS if an older tool requires it
keytool -importkeystore \
  -srckeystore release.p12 -srcstoretype PKCS12 \
  -destkeystore release.jks -deststoretype JKS

# Base64-encode the keystore for a CI secret
base64 -i release.p12 | tr -d '\n' > release.p12.base64

문제 해결

흔한 Android keystore 오류와 해결 방법

Keystore가 변조되었거나 비밀번호가 올바르지 않습니다
스토어 비밀번호가 잘못되었습니다. 비밀번호 관리자에서 다시 복사하고, CI 시크릿의 끝부분 공백을 확인하세요.
Keystore에서 별칭 'release'를 찾을 수 없습니다
별칭이 일치하지 않습니다. keytool -list를 실행하여 keystore의 정확한 별칭을 확인하세요. 대소문자가 구분됩니다.
마지막 블록이 올바르게 패딩되지 않았습니다
키 비밀번호가 잘못되었습니다. PKCS#12 keystore의 경우 키 비밀번호는 스토어 비밀번호와 동일해야 합니다.
잘못된 keystore 형식
구버전 Java 8 툴체인이 PKCS#12 파일을 JKS로 읽는 중입니다. Gradle에서 storeType을 "pkcs12"로 설정하거나 keytool -importkeystore로 파일을 JKS로 변환하세요.
Android App Bundle가 잘못된 키로 서명되었습니다
Google Play는 원래의 업로드 키를 요구합니다. 해당 키로 서명하거나, 새 keystore의 PEM 인증서를 사용해 Play Console에서 업로드 키 재설정을 요청하세요.
Google Sign-In 또는 Firebase Auth가 릴리스 빌드에서만 실패합니다
Firebase에 릴리스 SHA-1 및 SHA-256 지문과 Play Console의 Play App Signing 키 지문을 추가하세요.

자주 묻는 질문

Android keystore 생성기 FAQ

keystore 형식, 비밀번호, 유효성, Google Play 업로드 키, 키 분실 시 조치 방법 등에 대한 답변입니다.

Android keystore란 무엇인가요?

Android keystore는 APK 또는 Android App Bundle 서명에 사용되는 개인 키와 인증서를 저장하는 비밀번호 보호 파일입니다. Android와 Google Play는 이 서명을 통해 모든 업데이트가 동일한 개발자로부터 온 것을 검증하므로, 앱의 모든 향후 릴리스에 동일한 키로 서명해야 합니다.

Android Studio 없이 온라인으로 Android keystore를 생성하는 방법은 무엇인가요?

위 양식에 이름, 이메일, 국가 code, 키 별칭, 유효 기간, 비밀번호를 입력한 후 'Generate keystore'를 선택하세요. 즉시 사용 가능한 .p12 keystore, PEM 형식의 인증서 사본, 그리고 SHA-1 및 SHA-256 지문(fingerprint)을 받을 수 있습니다. Android Studio, JDK, keytool 설치 없이 바로 생성할 수 있습니다.

이 Android keystore 생성기는 어떤 파일 형식을 생성하나요?

단일 RSA 2048-bit 서명 키와 SHA-256 서명 인증서를 포함한 PKCS#12 (.p12) keystore와 PEM 인증서 내보내기를 생성합니다. PKCS#12는 Java 9부터 기본 keystore 유형이며, Gradle, apksigner, jarsigner, Google Play에서 모두 지원됩니다. 구형 도구가 JKS 파일을 필요로 하는 경우 keytool -importkeystore 명령으로 변환할 수 있습니다.

온라인에서 keystore를 생성하는 것이 안전한가요? 내 키가 저장되나요?

keystore는 HTTPS를 통한 stateless Capgo 엔드포인트에서 요청 시 생성되어 브라우저로 바로 반환됩니다. 응답에는 Cache-Control: no-store 헤더가 포함되며, 개인 키, 비밀번호, 파일은 데이터베이스에 기록되지 않거나 응답 이후에 유지되지 않습니다. 보안 정책상 키가 기기를 벗어나지 않아야 하는 경우, 이 페이지에 표시된 동등한 keytool 명령을 사용하세요.

이 keystore를 Google Play 릴리스에 사용할 수 있나요?

네. Play App Signing에 등록한 새 앱의 업로드 키로 사용하거나, 직접 APK 배포 시 앱 서명 키로 사용할 수 있습니다. Google Play는 인증서가 최소 2033년 10월 22일까지 유효해야 한다고 요구하며, 기본 25년 유효 기간이 이를 충족합니다.

스토어 비밀번호와 키 비밀번호를 다르게 설정해야 하나요?

아니요. PKCS#12 keystore는 컨테이너와 키에 하나의 비밀번호를 사용합니다. Gradle, Capacitor CLI, fastlane 또는 Capgo Cloud Build에서 store password와 key password에 모두 같은 값을 입력하세요.

유효 기간은 얼마로 설정해야 하나요?

기본값인 25년을 유지하세요. Google은 최소 25년을 권장하며, 2033년 10월 22일 이전에 만료되는 인증서로 서명된 업로드는 Google Play에서 거부됩니다. 기존 키의 유효 기간은 나중에 연장할 수 없습니다.

keystore나 비밀번호를 분실하면 어떻게 되나요?

Play App Signing을 사용하는 경우, 여기서 새 keystore를 생성하고 PEM 인증서를 업로드하여 Play Console에서 업로드 키 재설정을 요청할 수 있습니다. Play App Signing을 사용하지 않는다면 키 분실 시 동일한 앱 리스팅에 업데이트를 게시할 수 없으므로, 파일, alias, 비밀번호를 secret manager에 백업해 두세요.

디버그용 keystore를 만들 때도 이 도구가 필요한가요?

보통은 필요 없습니다. Android SDK는 ~/.android/debug.keystore에 비밀번호 'android'와 alias 'androiddebugkey'를 사용하는 디버그 keystore를 자동으로 생성합니다. 이 생성기는 스토어 출시마다 안정적으로 유지되어야 하는 릴리스 및 업로드 키에 사용하세요.

SHA-1 및 SHA-256 지문(fingerprint)은 어디서 확인하나요?

생성 직후 결과 패널에 표시됩니다. Firebase, Google Sign-In, Google Maps 또는 Android App Links(assetlinks.json)에 등록하세요. Play App Signing이 앱을 다시 서명하면 Google 서비스에는 Play Console의 앱 서명 키 지문도 필요합니다.

Capacitor, Ionic, React Native, Flutter 앱에서도 작동하나요?

네. keystore는 프레임워크에 종속되지 않습니다. Capacitor, Ionic, React Native, Flutter는 물론 Kotlin 또는 Java 네이티브 프로젝트를 포함해, Gradle을 사용하는 모든 Android 빌드에서 이 keystore로 서명할 수 있습니다.

Capgo Native Build

Capgo로 iOS 및 Android 앱을 클라우드에서 빌드하고 서명하세요

이 도구로 생성한 keystore를 업로드하고, CI에서 릴리스 빌드를 트리거한 뒤, 자체 build farm을 운영할 필요 없이 서명된 Android App Bundle을 Google Play에 배포하세요.

Native Build 살펴보기