Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1637561
  • 博文数量: 126
  • 博客积分: 1541
  • 博客等级: 上尉
  • 技术积分: 1914
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-20 11:14
文章分类

全部博文(126)

文章存档

2014年(21)

2013年(42)

2012年(63)

分类: 嵌入式

2013-01-09 16:42:21

 一、简介 Android要求每一个程序必须用开发者的数字密钥签名,标明使用权限。同时,应用程序也需要使用共享的用户ID来目标进程。Android平台的核心组件使用四个密钥来保持安全性。 

       1、platform:核心平台的部分包使用的密钥。 
       2、shared:home/contacts进程中共享的东西使用的密钥。 
       3、media:media/download系统中部分包使用的密钥。 
       4、releasekey:不标明其它类型密钥时,使用的默认密钥。 

       这些密钥用来对发布的iamges文件中的应用程序进行签名,但Android编译系统不使用它们。编译系统使用build/target/product/security/中的testkeys来对包进行签名。因为testkeys是Android开源项目中的一部分,所以不要使用它对发布的产品进行签名,而是应该由设备制造商生成自己的私有密钥。 

       二、生成密钥 对于设备制造来说,每一个产品的密钥都应该存储在vendor//security/下面,分别代表设备制造商和产品名字。为了简化密钥创建过程,把下面的脚本复制到mkkey.sh文件中。如果要定制你的密钥的话,把以AUTH开头的行改为代表你的company的信息。

java代码:

  1. #!/bin/sh AUTH='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com' if [ "$1" == "" ]; then  echo "Create a test certificate key."  echo "Usage: $0 NAME"  echo "Will generate NAME.pk8 and NAME.x509.pem"  echo " $AUTH"  exit fi openssl genrsa -3 -out $1.pem 2048 openssl req -new -x509 -key $1.pem -out $1.x509.pem -days 10000 /  -subj "$AUTH" echo "Please enter the password for this key:" openssl pkcs8 -in $1.pem -topk8 -outform DER -out $1.pk8 -passout stdin mkkey.sh
复制代码

       是一个用来生成平台密钥的脚本。你输入的密码在你的终端窗口中是可见的。 要生成4个平台密钥的话,运行四次mkkey.sh脚本,每一次写入不同的密钥名字和密码。

java代码:
  1. sh mkkey.sh platform # enter password sh mkkey.sh media # enter password sh mkkey.sh shared # enter password sh mkkey.sh release # enter password
复制代码

       三、签名过程 签名过程分为两步: 
       1、对所有的部分单独进行签名。 
       2、把各个部分打包成image文件。 

       四、签名应用程序 使用build/tools/releasetools/sign_target_files_apks来签名一个叫target_files的包。这个包不会按默认方式编译,执行make时,一定要加上”dist”. make -j4 PRODUCT--user dist 上面的命令在out/dist下面创建了一个叫做-target_files.zip的文件,你需要把这个文件传递给sign_target_files_apks脚本。像下面这样运行脚本:

java代码:
  1. ./build/tools/releasetools/sign_target_files_apks -d vendor//security/ -target_files.zip signed-target-files.zip 

复制代码

        如果你项目中有已经编译过或者签过名的apk,而你又不想让它们被重新签名的话,必须为每一个你想忽略的APK在命令行上加上-e Foo.apk=来忽略它们。 sign_target_files_apks还有许多其它在签名时非常有用的选项。用只带一个-h参数的方式运行它会看到全部的帮助信息。 五、创建image文件 产生文件后,你就可以通过下面的方式生成image文件。 build/tools/releasetools/img_from_target_files signed-target-files.zip signed-img.zip signed-img.zip包含所有的.img文件。你可以通过fastboot update signed-img.zip把它们安装到设备上。

阅读(1305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~