본문 바로가기

일::개발

Android 출시를 위한 key, keystore

안드로이드 앱을 출시하기 위한 signing 절차와 그때 필요한 keystore 에 대해서 좀 알아보자.

google play 에 안드로이드 앱을 출시하기 위해 두 가지 키, app signing key(Flutter 문서에는 deployment key로 표현됨)와 upload key가 필요하다. 

문서에는 이렇게 나와 있고, 그 이후에 이런저런 절차들이 주욱 설명되어 있다.

그냥 따라하면 되긴 하지만, 각각의 과정이 무엇이고 왜 필요한지 조금만 더 보자.

일단 용어들만 정확하게 알아도 대략 이해가 되기는 하는데, 그 전에 private 키와 public 키가 뭐고 왜 필요한지에 대해서는 알아야 이 일을 왜 하는지 이해할 수 있을 것 같다.

 

여기서 비대칭키에 대한 설명을 자세하게 할 것은 아니고, 일단

 

  • 공개키(public key)는 다른 사람들에게 배포할 수 있는 키, 개인키(private key)는 나만 가지고 있는 키. (이름만 봐도 당연하다)
  • 어떤 데이터를 public key로 암호화해서 배포한다 -> private key가 있어야 복호화할 수 있다 -> 누구나 나에게 데이터를 보낼 수 있지만, 그 내용은 나만 확인할 수 있다.
  • 어떤 데이터를 private key로 암호화해서 배포한다 -> public key가 있으면 누구나 복호화할 수 있다 -> 누구나 내가 만든 데이터를 볼 수 있고, 내가 만든 데이터임을 확인할 수 있다.

이 정도만 알고 있어도 앱 배포 과정에 필요한 것을 이해하기 쉬울 것 같다.

 

중요한 것은 "내가 만든 데이터임을 확인할 수 있다" 이 부분이다. 구글플레이(플레이스토어)에서는 업로드된 파일이 내가(등록된 개발자, 앱의 소유자)가 만든 것임을 확인해야 하고, 앱을 다운로드한 사용자는 그 앱이 내가 만들것임을 확인해야 한다.

 

이때 필요한 것이 나의 private key(당연히 public key도 필요)이고, 플레이스토어 업로드 과정, 사용자의 다운로드 과정에 각각 필요하기 때문에 app signing key, upload key로 구분하고 있는 것이다. (이것은 용도가 다르기 때문에 구분한 것이고 특정한 경우에는 app signing key와 upload key를 같은 키를 사용하기도 한다.)

 

대략 이게 왜 필요한 과정인지를 알았으면 각각 무엇인지 좀 보자. 아래의 용어가 뭔지만 알아도 해야하는 과정이 이해될 것이다.

 

app signing key

사용자가 다운로드하는 .apk 파일에 서명하기 위한 키

 

upload key

플레이스토어에 업로드하기 위해 앱 번들(.aab or .apk)을 서명할 때 사용하는 키

upload key는 구글을 통해서 만든 app signing key 를 이용하거나 app signing key와 별도로 직접 만들 수도 있다.

 

인증서(certificate) : .der or .pem

인증서에는 public key와 키 소유자에 대한 정보가 들어 있다.

private key가 포함되어 있지 않기 때문에 인증서는 다른 사람과 공유해도 상관 없고, 실제로 다운로드한 앱이 올바른 private key로 서명되어 있는지 확인하는데 인증서를 사용할 수 있다.

사이닝된 앱을 플레이스토어에 등록하면google play console 에서 app signing key certifiate 와 upload key certificate를 다운로드할 수 있다.(https://play.google.com/console/u/0/developers/app/keymanagement)

 

인증서 지문(certificate fingerprint)

API제공 업체가 제공하는 특정 API를 사용하기 위해 업체에 등록해야 하는 인증서의 fingerprint.

keystore 파일이 있으면 만들어낼 수 있고,

등록된 앱의 경우에는 google play console에서 MD5, SHA-1, SHA-256 fingerprint를 얻을 수도 있다.

 

키 저장소 keystore (Java keystore)

private key와 인증서를 저장하는 저장소 파일

 

일반적으로는 keystore 파일을 하나 만드는 것부터 시작하게 된다.

keytool을 이용해서 keystore 파일을 생성하고 그 안에 있는 private key와 인증서(에 포함된 public key)를 이용해서 앱에 서명한다.

 

 

실제로 flutter 프로젝트에서 keystore를 만들고, 서명하고, 업로드하는 과정은 다음 포스트에서 해보기로 하자!