본문 바로가기
  • 포르쉐타고싶다
인포테인먼트 - development/flutter

[flutter] 앱 출시와 앱 서명

by 지오ㄴl 2020. 12. 12.

앱을 완성하고 출시를 할 때

기본, 필수이지만 놓치는 부분이 있다.

 

바로 앱 서명 부분.

앱 서명을 왜 하는지 와닿지 않은 상태에서 따라만 하려니

디버깅할 때 되던 기능이

스토어를 통해 다운을 받으면 먹통이 되는 모습을 발견하게 된다.

나는 바보라서 어플의 카카오로그인이 안되고나서야 앱 서명이 뭔지 깨닫게 되었다.

 

기업의 거래과정을 보면 협상안을 기업의 회장이 보면 서명을 통해 확인했다는 인증을 남긴다. 그 서명은 그 거래가 나중에 법원같은 곳에서 증거 등으로 유효성을 따지게 됐을 때 공인된 것임을 인증한다. 서명에 대응되는 앱 서명키는 비슷하게 해당 앱이 인증된 개발자로부터 만들어진 앱이다 를 인증하는데 이용된다(앱서명키=서명, 개발자=회장, 타사 api회사=법원)
앱 서명키는 개발모드, 출시모드로 나뉘어있고
개발모드의 앱서명키는 디버깅된 앱의 유효성을, 출시모드의 앱서명키는 스토어에서 다운받은 앱의 유효성을 인증하게된다.

이 둘을 반드시 독립적으로 관리를 해야하는데, 

그렇지않으면 개발할 때는 잘 되던 api사용이 정작 앱을 다운 받는 소비자의 폰에서는 안될 수가 있다.

 

여기서
두가지를 말한건데

1. 출시방법에서의 앱서명키

- apk로 출시

- App Bundle로 출시
2. 앱 서명키를 왜 등록하고 사용하는가(사용예시)
- 개발모드 키 등록
- 출시모드 키등록
- 앱번들로 출시햇을 때 키등록

 

이게 앱 출시에서의 앱 서명키의 전부라고 할 수 있다.

 


 

1. 출시방법에서의 앱 서명키

 

이 부분은 Flutter의 문서에도 나와있듯이

명령어를 통해 간단하게 만들 수 있다.

 

맥/리눅스에서는

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

 

윈도우에서는

keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

 

여기서 -keystore에 해당하는 ~/key.jks와

마지막에 -alias에 해당하는 key

를 기억해야한다

마찬가지로 아래에 문서에 나와있는 출시과정을 따라하면서

keystore의 비밀번호도 기억해야 한다.

 

이들은 문단2에서 설명하는 키 해시값을 추출하는데 사용된다.

 

 

그리고 다음의 방법은

flutter-ko.dev/docs/deployment/android

에서 확인할 수 있다.

 

놓칠 수 있는 중요한 점은
이 앱 서명키는 앱을 업로드할 때는 필수적이지만
apk로 업로드하느냐, App Bundle로 업로드를 하느냐에 따라
그 이후에 이후 형태가 달라진다.
다음 문단에서 소개하겠다.

 

그렇다면 이 짓을 왜 해야하는가? 위에서 비유했던 것 말고 정확히 앱 서명이 사용되는 모습을 보자.

 


 

2. 앱 서명키를 왜 등록하고 사용하는가

 

여기서는 세가지를 설명할 것이다.

1) 앱 서명키를 왜 등록하고 사용하는가
2) 앱 서명키의 키 해시값 추출방법
3) API제공업체(카카오 개발자)에 키 해시값 등록

 

1) 앱 서명키를 왜 등록하고 사용하는가

타사의 Api를 사용할 경우 이 어플이 해당 api회사에 등록된(카카오 서비스 등록)앱인지 확인을 해야한다

 

개발모드의 서명키, 
출시모드의 서명키

를 독립적으로 관리해야하는데
개발모드 서명키를 등록하면 디버깅모드에서만, 
출시모드 서명키를 등록하면 스토어를 통해 다운받은 앱에서만 api사용을 허락하게 된다.

키을 통해 키 해시를 등록하는 방법을 보자

카카오는 키 해시에 대해 이렇게 설명하고 있다.

- 개발모드 키 해시 추출 명령어

맥/리눅스

keytool -exportcert -alias <key-alias명> -keystore <debug.keystore의 경로> -storepass android -keypass android | openssl sha1 -binary | openssl base64

 

Windows

keytool -exportcert -alias <key-alias명> -keystore <debug.keystore의 경로> -storepass android -keypass android | openssl sha1 -binary | openssl base64

 

 

명령어 중간에 보이는 <key-alias명>과 <~.keystore의 경로>는

문단1에서 생성하면서 설정했던 앱 서명키의 -alias값과 keystore의 경로를 기억하고 넣어야 한다.

뒤이어 나오는 비밀번호 입력도 마찬가지다.

해당 정보를 까먹었다면

해당 앱 프로젝트의 root에 있는 local.properties파일에 그 정보가 저장되어있다.

 

- 출시모드 키 해시 추출 명령어

맥/리눅스

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

 

Windows

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64



하지만 앱번들로 출시하게되면 

개발자가 프로젝트에서 직접뽑은 출시 앱서명키 대신


앱 업로드 도중 구글플레이에서 자체적으로 만든 Play 앱 서명키로 대체된다.
그래서 앱 번들로 출시된 앱을 다운받은 이용자가 api를 사용하기 위해선 
Play 앱 서명키에서 키 햐시를 따로 다운받아 키해시 등록을 해줘야 한다.

 

<Play앱서명키 등록>


<Play 앱서명키 위치>


다시 한번 강조하자면

이 앱이 원래처럼 이 앱 서명키를 사용하려면

앱 프로젝트단에서 생성한 앱 서명키가 아닌

이 Play스토어에서 만든 앱 서명키를 사용해야 한다.

즉, 이 Play앱서명키에서 추출한 키 해시값을 등록해야 한다.

 

<Play 앱 서명키의 키 해시 등록>

위 사진을 보면 인증서를 다운받을 수도 있고

저 SHA-1 인증서 지문을 사용할 수도 있다.

여기서는 저 SHA-1인증서 지문을 통해

앱의 키 해시값을 추출해보겠다.

 

echo <Play 앱 서명키의 SHA-1인증서 지문> | xxd -r -p | openssl base64 

를 명령어로 입력하면

Play 앱 서명키에 해당하는 키 해시값이 나온다.

 

3) API제공업체(카카오 개발자)에 키 해시값 등록

 

 


이렇게 등록해서 사용할 수 있다.

반응형

댓글