안드로이드 keystore 개요
안
드로이드 시스템에서는 키 사이닝(Key signing)이 매우 중요하다. 구글 플레이에서는 키 사이닝으로 이 앱이 신뢰할 수 있는
앱인지, 제작자는 누구인지 판단하는 제1의 근거가 되기 때문이다. 게다가 키 사이닝이 되지 않은 어플리케이션은 안드로이드
시스템에 설치할 수 없기 때문에, 반드시 모든 어플리케이션은 키 사이닝을 해야한다. 혹자는 ‘개발할 때는 사이닝을 안하고도 기기에
설치 잘되는데?’ 라고 물을 수 있겠지만 그것은 경기도 오산이다. 디버깅이나 개발 시 기기에 설치할 때도 개발도구 내부에서 디버그 모드용 키로 사이닝 후 기기에 설치하는 과정을 거치고 있다.
필요 소프트웨어
JDK keytools
안드로이드 keystore 위치
물론 저장하는 위치마다 다르겠지만, 보통 저장하는 곳은 아래와 같다.
- Windows Vista, 7, 8:
C:\Users\<user>\.android\
- Linux/OS X :
~/.android/
디버그 모드용 안드로이드 keystore 생성
디 버그용 keystore는 안드로이드 SDK를 설치할 때 같이 생성된다. ‘안드로이드 keystore 위치’ 섹션에서 설명한 위치에 debug.keystore라는 파일 이름으로 생성되어 있다. 디버그용 keystore는 그냥 사용하면 되는데, 한 가지 유의할 점은 유통기한(?)이 365일 밖에 되지 않는다는 점이다. 만약 365일이 지나서 디버그용 keystore 관련된 에러가 발생한다면 그냥 디버그용 keystore를 지우고 다시 빌드하면 빌드 도구에서 다시 keystore를 생성한다.
[GARD]
가 끔씩 디버그용 keystore를 공유할 때가 있는데, 그 경우 이클립스의 custom debug keystore 기능을 사용하면 편하다. PC에 설치된 SDK의 디버그용 기본 keystore 대신 다른 디버그용 keystore를 사용하는 것인데, 이클립스의 Windows – Preferences – Android – Build 에서 설정할 수 있다. 디버그용 keystore를 만들때 주의할 점은 SDK에서 생성한 디버그용 기본 keystore와 이름과 암호는 동일해야 한다는 점이다.
- Keystore 이름 : “debug.keystore”
- Keystore 암호 : “android”
- Key 별칭 : “androiddebugkey”
- Key 패스워드 : “android”
또 한 가지는 디버그용 keystore로 구글 스토어에 앱을 릴리즈 못한 다는 점을 명심하자. Keystore 만드는 방법은 아래에 설명한다.
릴리즈 모드용 안드로이드 keystore 생성
구 글 플레이나 기타 T스토어나 올레스토어 등에 배포를 해려면 릴리즈 모드용 keystore를 생성해서 이 keystore로 사이닝해야 한다. 키 사이닝을 위해서는 JDK의 keytool 유틸을 이용한다. 아래는 릴리즈용 keystore를 만들기 위한 명령어다. (PATH에 “JDK설치 디렉토리/bin” 가 포함되어 있다는 가정하에 적었다.)
$ keytool -genkey -v -keystore <keystore name> -alias <alias name> -keyalg <alg name> -keysize <key size> -validity <validity days>
- -keystore keystore가 저장될 위치.
- -alias 키 자체 이름
- -keyalg 키 암호화 알고리즘. RSA나 DSA 중 하나를 선택한다.
- -keysize 키의 크기를 나타낸다. 이 옵션을 빼면 기본적으로 1024비트의 크기로 저장한다. 구글에서는 2048비트 이상의 키 크기를 권장
- -validity 유효기간이다. 단위는 일. 365를 입력하면 1년이지만 이렇게 입력하면 경고가 뜰 것이다. 구글에서는 최소 25년 이상(9125일)의 유효기간을 입력할 것을 권장한다. 10000일 정도로 해주면 적당할듯.
25년 뒤에도 이 키를 쓸 정도로 앱이 잘나간다면 문제가 될지 모르겠지만
예를 들어 “my-release-key.keystore”라는 이름으로 RSA알고리즘을 적용, 키 크기를 2048비트, 유효기간을 10000일, 키 이름을 “my_key”라고 만든다면 커맨드 창(혹은 쉘)에서 아래와 같이 입력한다.
$ keytool -genkey -v -keystore my-release-key.keystore -alias my_key -keyalg RSA -keysize 2048 -validity 10000
다만, 어플리케이션마다 다른 키를 적용할 필요없다. 하나의 키로 여러개의 어플리케이션에 사이닝을 할 수 있다.
기존 keystore 정보 보기
구글맵 API 를 신청할 때, SHA1의 인증지문(fingerprint)를 요구한다. SHA1 인증지문을 외우는 사람은 없을테니,
$ keytool -v -list -keystore <keystore path>
를 입력하면 MD5와 SHA1의 인증 지문이 나온다. 과거 구글맵 API v1의 키를 얻을때는 MD5의 인증지문이 필요했는데, 2012년 12월 3일부로 구글맵 API v1의 키가 deprecated 되었다. v2부터는 SHA1의 인증지문을 요구한다. 그리고 JDK7부터는 위의 keytool 명령어에 -v 를 안붙이면 MD5 인증지문이 안나오고 SHA1의 인증지문만 나온다. JDK7부터는 기본 인증지문이 MD5에서 SHA1으로 변경되었기 때문. 참고하시길