關於Android開發中的證書和密鑰等問題

關於Android開發中的證書和密鑰等問題
引言

除了Android發佈應用簽名時須要用到證書外,在進行google Map Api開發和Facebook SDK API開發等時都須要申請API Key,在申請這些API Key的時候,也須要用到證書。html

使用Eclipse和ADT開發的時候,證書都是自動生成的,能夠在Eclipse裏Window->Preferneces -> Android -> Bulid Setting裏看到以下截圖java

clip_image002[4]

也即這個開發Debug用的證書在C:\Users\Haihua\.android\debug.keystore中,在這個頁面咱們還能夠看到MD5和SHA1的指紋碼,這個SHA1指紋碼在google Map API Key申請時就須要使用的。android

假如單人開發應用通常無所謂,可是團隊開發的時候,最好使用同一個debug.keystore,這樣手機間切換,能夠無縫安裝,並且也但是使用一樣的API KEY,省得每臺機子編譯時都須要去申請各自不一樣的API Key。可是必須使用默認的別名和密碼(give alias name = androiddebugkey and password = android),不然添加自定義的證書會報失敗。只有別名不對時,在上述對話框的黑體Build位置會提示以下報錯算法

clip_image004[4]

當別名和密碼都不對時,會報以下錯誤api

clip_image006[4]

固然還會有一些其它的報錯,諸如以下使用android studio的報錯android-studio

http://stackoverflow.com/questions/17189076/what-is-the-equivalent-of-eclipse-custom-debug-keystore-in-android-studioeclipse

假設設置了自定義的證書後,就會以下圖所示ide

clip_image008[4]

本覺得用這個可視化工具能夠查看release證書的SHA1等信息,可是因爲它使用默認密碼,因此也沒有辦法查看到。wordpress

設置完自定義證書後,clean一下,而後從新編譯運行就使用自定義證書了。我將打包的apk文件,重命名爲zip或rar以後,解壓縮,而後在解壓的\META-INF\CERT.RSA文件就是簽名的證書,對這個證書使用KeyTool以下操做工具

keytool -printcert –file \META-INF\CERT.RSA

就會拿到這個證書的一個詳細信息,下面截圖有兩個證書,前一個是自動生成的證書,後一個是我試驗作的一個證書。具體以下所示

clip_image010[4]

如何生成證書
命令行生成證書

生成證書使用的是JDK附帶的一個Keytool工具,像上面同樣在cmd中使用時,須要將相關的路徑設置到環境變量中,好比我本地的路徑名爲C:\Program Files\Java\jdk1.8.0_05\bin,就要將其加到Windows的環境變量中。

上述生成debug的證書可使用以下命令

keytool -genkey -alias androiddebugkey -keyalg RSA -keysize 1024 -keypass android -validity 365 -keystore c:\test\mozatdev.keystore -storepass android

至於具體的生成證書和Keytool工具能夠看下以下連接:

java keytool證書工具使用小結 http://www.micmiu.com/lang/java/keytool-start-guide/

Android簽名機制:生成keystore、簽名、查看簽名信息

http://www.ourunix.org/post/146.html

可視化生成證書

上述是使用命令行方式來生成證書,那麼有沒有可視化的生成證書方式呢?

目前我知道可使用Eclipse的ADT工具,即右鍵單擊項目名稱,選擇"Android Tools"->"Export Signed Application Package..."(輸出簽名的應用程序包)

clip_image012[4]

有時候工程中有些Lint Error,點擊是會彈出以下對話框

clip_image014[4]

這個時候咱們能夠先忽略掉錯誤檢查,具體以下圖所示,設置好以後,須要Clean一下再從新調用上述發佈包的工具,不然仍是沒辦法進行下一步。

clip_image016[4]

下一步就給一個建立Key的截圖吧

clip_image018[4]

具體建立的過程能夠參考網上的《android_apk安裝包的製做過程圖解》

clip_image020[4]

上述可視化方法的缺點就是必需要真的打一次包才能生成證書。

如何申請google map V2 Api KEY

關於這一步網上有一個很專門的帖子,這裏先不作展開,照着作就好了,目前爲上面的mozatdev.keystore申請了以下兩個API Key

clip_image022[4]

具體參考連接

繁體版本(內含一個完整的goole map開發)

http://www.moke.tw/wordpress/computer/advanced/410 (推薦看這個,下面這個圖片過小了)

http://cheng-min-i-taiwan.blogspot.sg/2013/04/google-maps-android-api-v2-android.html

在這裏不作google map api的使用,這個還來不及作整理。

如何申請Facebook API Key

上面google map API Key的申請使用的是SHA1指紋,在申請Facebook SDK API時使用的相對來講複雜一點,由於他須要用到的KeyHash,具體命令相似以下:

keytool -exportcert -alias androiddebugkey -keystore C:\Users\Haihua\.android\debug.keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64

運行結果相似以下,當密碼輸出的狀況下生成的hash是同樣的,直接用回車和輸入正確密碼時,結果也是同樣的,二者的區別就是前者不能用,後者能用,至於爲啥同樣,跟算法有關,我也沒去細究。

clip_image024[4]

除了上面提到的keytool工具外,還須要安裝一個openSSL,具體能夠從以下連接下載一個安裝包

https://www.openssl.org/

固然若是不想這麼麻煩安裝這些工具的話,也能夠用下面連接中的代碼方式獲取hash,只是我沒有嘗試過。

詳情還能夠參考Facebook相關官網

官網文檔

https://developers.facebook.com/docs/android/getting-started/

一個比較老的中文翻譯

http://www.cnblogs.com/tianjian/archive/2012/03/21/2410633.html

一個繁體版本的連接(我以爲挺有用的)

http://androchen.logdown.com/posts/2014/01/26/android-facebook-sdk-release-key-hash

在這裏也來不及作相關API使用的具體介紹,只是簡單介紹下申請API Key。

經過上面兩個具體API Key的申請,想必對Android的證書會有一個比較直觀的瞭解了。

小結一些命令

下面再單獨將上述用到的幾個cmd命令抽出來一下

生成證書的命令

keytool -genkey -alias androiddebugkey -keyalg RSA -keysize 1024 -keypass android -validity 365 -keystore c:\test\mozatdev.keystore -storepass android

查看證書詳情的命令

keytool -list -v -keystore C:\Users\Haihua\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

如何查看apk已簽名的證書詳情。因爲在apk安裝時我也不知道怎麼查看,只知道採起apk重命名後解壓縮,拿到\META-INF\CERT.RSA文件,而後執行以下命令查看。

keytool -printcert -file c:\test\ShellShabikDev\cert.rsa

網上還有一種方法,用jarsigner來查看,可是這會查看全部的文件,並且看不到SHA1等指紋,具體命令

jarsigner -verify -verbose -certs ShellShabik.rar

具體顯示

sm 3122 Mon Aug 25 15:51:26 SGT 2014 res/drawable-xxhdpi/common_signin_btn_text_pressed_dark.9.png

X.509, CN=FrankSun, OU=mozat.com, O=mozat, L=Singapore, ST=singapore, C=sg

[certificate is valid from 23/08/14 下午 10:07 to 23/08/15 下午 10:07]

[CertPath not validated: Path does not chain with any of the trust anchors]

導出證書的相關命令

keytool -exportcert -alias androiddebugkey -keystore C:\Users\Haihua\.android\debug.keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64

相關文章
相關標籤/搜索