Android Keystore漫談

寫在前面

今天使用高德地圖為應用添加Key的時候,發現有一項需要用到安全碼SHA1,而SHA1存在于Keystore中,遂簡單地了解了一下Keystore。雖然之前實習開發中有用同事生成的Keystore對應用加過密,但是對它并不熟,今天以此文對Keystore的認識做一個記錄,也希望可以給未接觸過Keystore的小伙伴們作為參考。

為什么使用Keystore?

為什么使用Keystore?在回答這個問題前,我們先來看看Keystore是什么東西。我們都知道,古時丫鬟被買下時,主人要求丫鬟簽寫賣身契,表示這個丫鬟是老王頭家的。Keystore就如同賣身契,表示這個APP是某一名開發者開發的。有了Keystore,開發者在發布自己的應用到市場時,就無需擔心自己的APP被他人搶走了,因此使用Keystore很有必要。

那么Keystore怎么證明APP開發者的身份呢?在生成Keystore的時候,開發者會錄入自己姓名、單位、組織、所在城市、省份、國家代碼等信息以保證此Keystore是自己的,將錄入自己信息的Keystore放入APP中,這樣就可以保證這個APP是自己開發的了。

此處添加莫再講xmlKeystore放入APP 的糾正和補充

Keystore 傳統理解為密鑰庫,或者鑰匙串。一個keystore里面可以放多組秘鑰,每組密鑰都有有效期、地址、公司等信息,可以通過別名來進行區分拿取。開發者將錄入自己信息的秘鑰(而非秘鑰庫Keystore)存入APP中,以認證此APP為自己開發。

Keystore可理解為一個容器,存放開發者信息、私鑰、公鑰的容器。乍一聽,未接觸過密碼學的小伙伴們可能會對這些名詞感到陌生,接下來我們來簡單了解一下Keystore相關名詞。

名詞解釋

  • 加密
    為了防止我的信息數據被不想看到的人看到,用特殊的算法打亂(信息內容的改變,而非簡單的順序改變)原來的信息數據,使他人即使得到打亂后的信息數據也無法理解其中的含義。
  • 解密
    為了看懂被打亂的信息數據,使用特殊的算法將打亂后的信息數據還原成原來的內容,以理解其中的含義。
  • 實體
    原始未被打亂的信息數據,密碼學稱之為明文,在Keystore里面我們稱之為實體。
  • 公鑰(公共鑰匙)
    加密過程中,算法為了提高其加密程度,傳入一個參數,使同一個算法在不同參數的作用下產生不同的加密效果。公鑰持有者一般為群體,其作用是驗證加密。
  • 私鑰(私有鑰匙)
    通過傳入與公鑰鑰配對的私鑰到算法中,實現解密的效果。一般私鑰由個人持有,需妥善保管,不可告訴他人,其作用是解密簽章。關于私鑰、公鑰的知識,在此不做過多講解,引用公鑰和私鑰中的內容,相信小伙伴們會有點收獲。

比如說,我要給你發送一個加密的郵件。首先,我必須擁有你的公鑰,你也必須擁有我的公鑰。
首先,我用你的公鑰給這個郵件加密,這樣就保證這個郵件不被別人看到,而且保證這個郵件在傳送過程中沒有被修改。你收到郵件后,用你的私鑰就可以解密,就能看到內容。
其次我用我的私鑰給這個郵件加密,發送到你手里后,你可以用我的公鑰解密。因為私鑰只有我手里有,這樣就保證了這個郵件是我發送的。

  • 數字簽名
    實體經私鑰加密后得到的數據。它可以通過公鑰來解密,從而將解密后的內容與實體進行比對,來驗證信息數據是否被篡改過。關于數字簽名更深入的了解,可參考《數字簽名是什么?》一文。
  • 別名
    用來區分Keystore的唯一標識(字符串)。

默認Keystore和自定義Keystore

通過對Keystore相關名詞的了解,我們大致清楚Keystore其實就是驗證APP開發者身份的一個文件。Keystore分為默認Keystore和自定義Keystore,通常應用發布時不用默認的Keystore,因為它不包含開發者的有效信息,且密碼是android,任何人都可通過keytool指令對其內容進行修改,無法驗證APP的有效性。默認Keystore的存放位置為$HOME/.android/debug.keystore,若Android Studio打包簽名apk的時候未找到默認的Keystore時會自動創建它。自定義Keystore可使用Keytool指令或Android Studio來生成,接下來我們來了解自定義KeyStore的生成方式。

Keytool指令參數

Keytool是一個很有用的安全鑰匙和證書的管理工具,使用該指令可實現密鑰庫(Keystore)的創建和查看等操作。我們先來看一下Keytool指令相關的參數。

-genkey
在用戶主目錄中創建密鑰庫(Keystore),后綴名為.keystore。
-alias [alias]
產生別名,后面跟別名內容。若未指定,則別名默認為mykey.
-keystore
指定.keystore文件的名稱,如:

keytool -genkey -keystore dmkf.keystore

用戶主目錄中會產生名稱為dmkf.keystore的Keystore文件。若未使用該參數,則文件名默認為.keystore。
-keyalg [DSA/RSA]
指定密鑰的算法,未指定時默認為DSA算法。
-validity
指定創建的證書有效期,單位為。未指定時默認為1天。
-dname
證書持有者(APP開發者)信息。
CN:名字或姓氏
OU:組織單位名稱
O:組織名稱
L:城市或區域名稱
ST:州或省份名稱
C:單位的兩字國家代碼
-list
顯示證書信息。
-v
顯示證書詳細信息。
-export
結合-alias導出指定的證書信息。如:

keytool -export -alias dmkf -keystore dmkf.keystore -file D:/mykeystore/myexport.crt

-import
將已簽名的證書導入到密鑰庫,如:

keytool -import -alias dmkf -keystore mystore.keystore -file D:/mykeystore/myanother.crt

-keysize
指定密鑰長度。
-storepass
操作密鑰庫所需的密碼。
-storepasswd
修改操作密鑰庫所需的密碼。
-keypass
指定別名條目的密碼(私鑰的密碼)。
-keypasswd
修改指定別名條目的密碼。
-file
結合-export,指定導出的證書位置及證書名稱。
-delete
刪除密鑰庫中某一條目。如:

keytool -delete -alias dmkf -keystore dmkf.keystore

-printcert
查詢導出的證書信息,如:

keytool -printcert -file D:/mykeystore/dmkf.crt

常用Keytool指令操作

  • 創建Keystore文件
    生成一個別名為dmkf,名為dmkf.keystore的文件。
keytool -genkey -alias dmkf -keystore dmkf.keystore -keyalg RSA
  • 查看Keystore文件
    查看名為dmkf.keystore的Keystore文件信息。
keytool -list -v -keystore dmkf.keystore
Enter keystore password: ****(輸入Keystore操作密碼)
  • 輸出Keystore證書
    從密鑰庫dmkf.keystore中導出別名為dmkf的證書到dmkf.crt文件中(導出的證書中包括主體信息和公鑰)。
keytool -export -alias dmkf -keystore dmkf.keystore -file dmkf.crt
Enter keystore password: ****(輸入Keystore操作密碼)
  • 查看導出的證書信息
    查看導出并保存在dmkf.crt文件中的證書信息。
keytool -printcert -file dmkf.crt
  • 導入證書
    從名為dmkf.crt文件中取出別名為dmkf的證書信息導入到名為truststore.keystore密鑰庫中。
keytool -import -alias dmfk -keystore truststore.keystore -file dmkf.crt

Android Studio生成Keystore

打開Android Studio,在菜單欄中找到Build,單擊彈出下拉框,選擇Generate Signed APK...。

Generate Signed APK...

選擇app,單擊Next按鈕。

Generate Signed APK

單擊Create new...按鈕。

Generate Signed APK

在彈出的New Key Store窗口中選擇Keystore存放路徑,設置Keystore密碼、別名、別名密碼、有效期以及個人信息,單擊OK按鈕完成Keystore的創建。

New Key Store

此時Android Studio自動填充新建的Keystore相關信息,至此Android Studio已完成Keystore的創建。若想用這個Keystore繼續打包APK,單擊Next按鈕。

Generate Signed APK

設置密碼數據庫的密碼,單擊OK按鈕,進入下一步。

設置密碼數據庫的密碼

選擇好APK導出的位置和編譯方式(發布/調試),單擊Finish按鈕完成APK的打包。

Paste_Image.png

在項目根目錄的app文件夾里可以找到命名為app-release.apk的apk文件。

生成apk

以上就是本次Keystore漫談的所有內容,有不準確的地方,歡迎在文章下方的評論處評論指正!

參考

android keystore sha1 md5的理解
Android Studio中的keystore
Android Studio 默認keystore 以及自定義keystore
Andriod Studio debug.keystore(默認)和如何生成自定義的keystore 以及如何生成數字簽名
android keystore sha1 md5的理解
keystore 介紹
關于keystore的簡單介紹

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 服務器https配置 配置https操作說明文檔 1、查看服務器環境配置(tomcat和apache合并使用) 2...
    南京楊小兵閱讀 8,919評論 0 9
  • 一. Keytool創建和導入命令 創建keystore和密鑰對 為存在的keystore生成證書請求文件CSR ...
    sngths閱讀 6,407評論 0 1
  • 數字證書就是網絡通訊中標志通訊各方身份信息的一系列數據,其作用類似于現實生活中的身份證。它是由一個權威機構發行的,...
    拉肚閱讀 21,289評論 1 17
  • 一、搭建Java Web服務器環境CATALINA_HOME = D:\Java\apache-tomcat-6....
    克魯德李閱讀 659評論 0 1
  • 我今年25歲,在一家國企單位上班,工資還算很理想,身高一米七五左右,我的圈子比較窄,所以平時和女孩子打交道比較少,...
    追女生實踐法閱讀 2,929評論 0 0