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的简单介绍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 服务器https配置 配置https操作说明文档 1、查看服务器环境配置(tomcat和apache合并使用) 2...
    南京杨小兵阅读 8,822评论 0 9
  • 一. Keytool创建和导入命令 创建keystore和密钥对 为存在的keystore生成证书请求文件CSR ...
    sngths阅读 6,387评论 0 1
  • 数字证书就是网络通讯中标志通讯各方身份信息的一系列数据,其作用类似于现实生活中的身份证。它是由一个权威机构发行的,...
    拉肚阅读 21,127评论 1 17
  • 一、搭建Java Web服务器环境CATALINA_HOME = D:\Java\apache-tomcat-6....
    克鲁德李阅读 630评论 0 1
  • 我今年25岁,在一家国企单位上班,工资还算很理想,身高一米七五左右,我的圈子比较窄,所以平时和女孩子打交道比较少,...
    追女生实践法阅读 2,870评论 0 0