Android安全加密:數字簽名和數字證書

Android安全加密專題文章索引

  1. Android安全加密:對稱加密
  2. Android安全加密:非對稱加密
  3. Android安全加密:消息摘要Message Digest
  4. Android安全加密:數字簽名和數字證書
  5. Android安全加密:Https編程

一、數字簽名

1. 概述

數字簽名是非對稱加密與數字摘要的組合應用

2. 應用場景

  • 校驗用戶身份(使用私鑰簽名倍阐,公鑰校驗仇箱,只要用公鑰能校驗通過,則該信息一定是私鑰持有者發(fā)布的)
  • 校驗數據的完整性(用解密后的消息摘要跟原文的消息摘要進行對比)

3. 簽名過程

“發(fā)送報文時惨缆,發(fā)送方用一個哈希函數從報文文本中生成報文摘要,然后用自己的私人密鑰對這個摘要進行加密糜值,這個加密后的摘要將作為報文的數字簽名和報文一起發(fā)送給接收方,接收方首先用與發(fā)送方一樣的哈希函數從接收到的原始報文中計算出報文摘要坯墨,接著再用發(fā)送方的公用密鑰來對報文附加的數字簽名進行解密寂汇,如果這兩個摘要相同、那么接收方就能確認該數字簽名是發(fā)送方的捣染。

數字簽名有兩種功效:一是能確定消息確實是由發(fā)送方簽名并發(fā)出來的骄瓣,因為別人假冒不了發(fā)送方的簽名。二是數字簽名能確定消息的完整性耍攘。因為數字簽名的特點是它代表了文件的特征榕栏,文件如果發(fā)生改變,數字摘要的值也將發(fā)生變化蕾各。不同的文件將得到不同的數字摘要扒磁。一次數字簽名涉及到一個哈希函數、發(fā)送者的公鑰示损、發(fā)送者的私鑰渗磅。”

這里寫圖片描述

4. 使用步驟

//獲取signature 對象检访,初始化算法:MD2withRSA, MD5withRSA, or SHA1withRSA
Signature signature = Signature.getInstance("MD5withRSA");
//創(chuàng)建私鑰(從磁盤上讀仁加恪)
PrivateKey privateKey = (PrivateKey)SerializableUtil.readObject(
"heima.privateKey");
//使用私鑰進行初始化
signature.initSign(privateKey);
//傳入需要簽名的數據
signature.update(content.getBytes());
//執(zhí)行簽名
byte[] sign = signature.sign();

//創(chuàng)建公鑰(從磁盤上讀取)
PublicKey publicKey = (PublicKey) SerializableUtil.readObject(
"heima.publicKey");
//使用公鑰進行初始化
signature.initVerify(publicKey);
//傳入需要校驗的數據(即上面的原文)
signature.update(content.getBytes());
//執(zhí)行校驗
boolean verify = signature.verify(sign);

5. 總結

數字簽名一般不單獨使用脆贵,基本都是用在數字證書里實現SSL 通信協(xié)議医清。下面將學習的數字證書就是基于數字簽名技術實現的。

二卖氨、數字證書

1. 概述

數字證書就是互聯(lián)網通訊中標志通訊各方身份信息的一串數字会烙,提供了一種在Internet 上驗證通信實體身份的方式负懦,數字證書不是數字身份證,而是身份認證機構蓋在數字身份證上的一個章或影啬濉(或者說加在數字身份證上的一個簽名)纸厉。它是由權威機構——CA 機構,又稱為證書授權(Certificate Authority)中心發(fā)行的五嫂,人們可以在網上用它來識別對方的身份颗品。

2. 應用場景

  • 交易者身份的確定性、不可否認性沃缘、不可修改性
  • 對應用進行簽名認證(例如Android 的apk)

3. 數字證書格式

這里寫圖片描述

數字證書的格式普遍采用的是X.509V3 國際標準躯枢,一個標準的X.509 數字證書包含以下一些內容:

  • 證書的版本信息
  • 證書的序列號,每個證書都有一個唯一的證書序列號
  • 證書所使用的簽名算法
  • 證書的發(fā)行機構名稱槐臀,命名規(guī)則一般采用X.500 格式
  • 證書的有效期锄蹂,通用的證書一般采用UTC 時間格式,它的計時范圍為1950-2049
  • 證書所有人的名稱水慨,命名規(guī)則一般采用X.500 格式
  • 證書所有人的公開密鑰
  • 證書發(fā)行者對證書的簽名

4. 數字證書原理

這里寫圖片描述

數字證書是安全領域里的終極武器得糜,SSL 通信協(xié)議里最核心的東西就是數字證書。他涉及到前面提到的所有知識:對稱加密讥巡、非對稱加密掀亩、消息摘要、數字簽名等欢顷。

數字證書可以通過java 自帶的KeyTool 工具生成,生成后的數字證書一般保管在KeyStore 里捉蚤。KeyStore可以叫做秘鑰倉庫抬驴。

秘鑰倉庫可以保管3 種類型的數據:KeyStore.PrivateKeyEntry(非對稱機密里的私鑰)、KeyStore.SecretKeyEntry (對稱加密里的秘鑰)缆巧、KeyStore.TrustedCertificateEntry(受信任的證書)

5. KeyTool工具

路徑:jre\bin\keytool.exe

這里寫圖片描述

常用命令:
生成keypair

keytool -genkeypair
keytool -genkeypair -alias lisi(后面部分是為證書指定別名布持,否則采用默認的名稱為mykey)

看看keystore 中有哪些項目:

keytool -list 或keytool -list -v
keytool -exportcert -alias lisi -file lisi.cer

生成可打印的證書:

keytool -exportcert -alias lisi -file lisi.cer –rfc

顯示數字證書文件中的證書信息:

keytool -printcert -file lisi.cer

直接雙擊lisi.cer,用window 系統(tǒng)的內置程序打開lisi.cer

6. Android 的keystore 相關知識

debug 簽名路徑:user.android\debug.keystore


這里寫圖片描述

debug.keystore 的別名(alias)及密碼:
別名:androiddebugkey陕悬,密碼:android

簽名命令(jdk1.6):

jarsigner -verbose -keystore debug.keystore -signedjar 1signed.apk 1.apk androiddebugkey

簽名命令(jdk1.7):

jarsigner -verbose -keystore debug.keystore -signedjar 1signed.apk 1.apk androiddebugkey -digestalg
SHA1 -sigalg MD5withRSA

優(yōu)化命令:

zipalign -v 4 1signed.apk 1signedaligned.apk

驗證簽名是否成功:

jarsigner -verify 1signed.apk

7. 補充

簽名證書

由權威頒發(fā)機構頒發(fā)給服務器或者個人用于證明自己身份的東西题暖,默認客戶端都是信任的。主要目的是用來加密和保證數據的完整性和不可抵賴性
例如根證書機構Symantec 頒發(fā)給百度的就是簽名證書捉超,是受信任的胧卤。

這里寫圖片描述

自簽名證書

由服務器自己頒發(fā)給自己,用于證明自己身份的東西拼岳,非權威頒發(fā)機構發(fā)布枝誊,默認客戶端都是不信任的,主要目的是用來加密和保證數據的完整性和不可抵賴性,與簽名證書相同.
例如中鐵集團(SRCA)辦法給12306 的證書就是自簽名證書惜纸,自己給自己頒發(fā)的叶撒。

這里寫圖片描述

三绝骚、Android簽名機制

1、什么是簽名祠够?

Android要求所有已安裝的應用程序都使用數字證書做數字簽名压汪,數字證書的私鑰由開發(fā)者持有。Android使用數字證書作為標識應用程序開發(fā)者的一種方式古瓤,并在應用程序之間建立信任的關系止剖,證書并不用來控制用戶能否安裝那個應用程序,證書不需要有證書認證中心簽名湿滓,完全可以使用自簽名證書(seft-signed certificates)

沒有正確簽名的應用滴须,Android系統(tǒng)不會安裝或運行,此規(guī)則適用于任何地方運行的Android系統(tǒng)叽奥,不管是在模擬器還是在真實設備上扔水。因為這個原因,在真機或模擬器上運行或調試應用前朝氓,必須為其設置好簽名魔市。

2、為什么需要簽名赵哲?

開發(fā)Android的人很多待德,完全可以把包名,類名起成同樣的名字枫夺,這時候如何區(qū)分将宪?簽名可以區(qū)分開發(fā)商或者惡意的開發(fā)者可以通過相同的包名混淆替換已安裝應用。簽名可以保證相同包名但是簽名不同的包不被替換橡庞。

應用如果使用一種key簽名较坛,另外一個key簽名的文件將無法安裝或覆蓋老的版本。防止已安裝的應用被惡意的第三方覆蓋或替換扒最。簽名可以防止交易抵賴

3丑勤、Android簽名機制

在Android 系統(tǒng)中,所有安裝到系統(tǒng)的應用程序都必有一個數字證書吧趣,此數字證書用于標識應用程序的作者和在應用程序之間建立信任關系法竞。

Android 系統(tǒng)要求每一個安裝進系統(tǒng)的應用程序都是經過數字證書簽名的,數字證書的私鑰則保存在程序開發(fā)者的手中强挫。

Android 將數字證書用來標識應用程序的作者和在應用程序之間建立信任關系岔霸,不是用來決定最終用戶可以安裝哪些應用程序。

這個數字證書并不需要權威的數字證書簽名機構認證(CA)纠拔,它只是用來讓應用程序包自我認證的秉剑。

同一個開發(fā)者的多個程序盡可能使用同一個數字證書,這可以帶來以下好處稠诲。

  • 有利于程序升級侦鹏,當新版程序和舊版程序的數字證書相同時诡曙,Android 系統(tǒng)才會認為這兩個程序是同一個程序的不同版本。如果新版程序和舊版程序的數字證書不相同略水,則Android 系統(tǒng)認為他們是不同的程序价卤,并產生沖突,會要求新程序更改包名渊涝。

  • 有利于程序的模塊化設計和開發(fā)慎璧。Android 系統(tǒng)允許擁有同一個數字簽名的程序運行在一個進程中,Android程序會將他們視為同一個程序跨释。所以開發(fā)者可以將自己的程序分模塊開發(fā)胸私,而用戶只需要在需要的時候下載適當的模塊

在簽名時,需要考慮數字證書的有效期

  • 數字證書的有效期要包含程序的預計生命周期鳖谈,一旦數字證書失效岁疼,持有改數字證書的程序將不能正常升級。

  • 如果多個程序使用同一個數字證書缆娃,則該數字證書的有效期要包含所有程序的預計生命周期捷绒。

  • Android Market 強制要求所有應用程序數字證書的有效期要持續(xù)到2033 年10 月22 日以后。

Android 數字證書包含以下幾個要點

  • 所有的應用程序都必須有數字證書贯要,Android 系統(tǒng)不會安裝一個沒有數字證書的應用程序

  • Android 程序包使用的數字證書可以是自簽名的暖侨,不需要一個權威的數字證書機構簽名認證

  • 如果要正式發(fā)布一個Android ,必須使用一個合適的私鑰生成的數字證書來給程序簽名崇渗,而不能使用adt 插件或者ant 工具生成的調試證書來發(fā)布

  • 數字證書都是有有效期的字逗,Android 只是在應用程序安裝的時候才會檢查證書的有效期。如果程序已經安裝在系統(tǒng)中宅广,即使證書過期也不會影響程序的正常功能

4扳肛、Android簽名過程

這里寫圖片描述
這里寫圖片描述
這里寫圖片描述

創(chuàng)建證書

這里寫圖片描述

5、Android APP 升級流程

這里寫圖片描述

簽名沖突

如果兩個應用程序, 包名相同, 但是簽名不同, 就無法覆蓋安裝

正式簽名

  • 有效期比較長乘碑,一般大于25年
  • 需要設置密碼
  • 正式發(fā)布應用時,必須用正式簽名來打包

測試簽名(debug.keystore)

  • 有效期是1年金拒,很短
  • 有默認的別名兽肤,密碼,alias=android绪抛,密碼是androiddebugkey
  • 在Android Studio中直接運行項目是,系統(tǒng)默認采用此簽名文件

如果正式簽名丟失了怎么辦?

  • 修改包名资铡,發(fā)布,會發(fā)現有兩個手機衛(wèi)士幢码,用戶會比較糾結
  • 請用戶先刪掉原來的版本笤休,再進行安裝,用戶會流失
  • 作為一名有經驗的開發(fā)人員症副,請不要犯這種低級錯誤
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末店雅,一起剝皮案震驚了整個濱河市政基,隨后出現的幾起案子,更是在濱河造成了極大的恐慌闹啦,老刑警劉巖沮明,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異窍奋,居然都是意外死亡荐健,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門琳袄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來江场,“玉大人,你說我怎么就攤上這事窖逗≈贩瘢” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵滑负,是天一觀的道長在张。 經常有香客問我,道長矮慕,這世上最難降的妖魔是什么帮匾? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮痴鳄,結果婚禮上瘟斜,老公的妹妹穿的比我還像新娘。我一直安慰自己痪寻,他們只是感情好螺句,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著橡类,像睡著了一般蛇尚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顾画,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天取劫,我揣著相機與錄音,去河邊找鬼研侣。 笑死谱邪,一個胖子當著我的面吹牛,可吹牛的內容都是我干的庶诡。 我是一名探鬼主播惦银,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扯俱?” 一聲冷哼從身側響起书蚪,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蘸吓,沒想到半個月后善炫,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡库继,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年箩艺,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宪萄。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡艺谆,死狀恐怖,靈堂內的尸體忽然破棺而出拜英,到底是詐尸還是另有隱情静汤,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布居凶,位于F島的核電站虫给,受9級特大地震影響,放射性物質發(fā)生泄漏侠碧。R本人自食惡果不足惜抹估,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弄兜。 院中可真熱鬧药蜻,春花似錦、人聲如沸替饿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽视卢。三九已至踱卵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間据过,已是汗流浹背颊埃。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝶俱,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓饥漫,卻偏偏與公主長得像榨呆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子庸队,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容