在刚才开始学习android数字签名的相关知识点的时候,被资料中出现的keystore、x509、密钥对、debug.keystore弄的晕头
转向,经过一段时间的了解,总算明白一些。

一、make_key脚本生成密钥对
android源码中自带的工具make_key(development/tools/目录下)可以用来生成RSA密钥对。

./make_key test ‘/C=CN/ST=SH/L=SH/O=TEST/OU=TEST/CN=TEST’

运行以上命令将生成密钥对test.pk8和test.x509.pem。 该命令中,  /C表示“Country Code”,/ST表示“State or Province”,/L表示“City or 
Locality”,/O表示“Organization”,/OU表示“Organizational Unit”,/CN表 示“Name”。

make_key脚本中关键代码如 下:

( openssl genrsa -f4 2048 | tee ${one} > ${two} ) &openssl req -new -x509 -sha1 -key ${two} -out $1.x509.pem \  -days 10000 -subj "$2" &if [ "${password}" == "" ]; then  echo "creating ${1}.pk8 with no password"  openssl pkcs8 -in ${one} -topk8 -outform DER -out $1.pk8 -nocryptelse  echo "creating ${1}.pk8 with password [${password}]"  echo $password | openssl pkcs8 -in ${one} -topk8 -outform DER -out $1.pk8 \    -passout stdin

其实主要利用了openssl来实现, openssl是一个强大的命令,要了解openssl, 可以参考百度百科http://baike.baidu.com/view/300712.htm?fr=aladdin

二、keytool生成密钥
Android数字签名解析(一)中介绍过用keytool生成密钥的方法,

keytool -genkey -alias test.keystore -keyalg RSA -validity 10000 -keystore test.keystore

keytool为JDK中自带的工具,一些第三方的应用开发者,由于没有Android源码环境, 所以会采用keytool来生成密钥。


三、make_key生成的密钥对转换为keystore中的密钥

1、把pkcs8格式的私钥转换为pkcs12格式:
     openssl pkcs8 -in test.pk8 -inform DER -outform PEM -out test.priv.pem -nocrypt

2、生成pkcs12格式的密钥文件:
     openssl pkcs12 -export -in test.x509.pem -inkey test.priv.pem -out test.pk12 -name testkey

3、生成keystore:
     keytool -importkeystore -deststorepass android -destkeypass android -destkeystore test.keystore -srckeystore   shared.pk12
srcstoretype PKCS12 -srcstorepass android -alias testkey

这样就生成了一个名为test.keystore的keystore文件,就可以用这个文件对apk签名。

四、keystore中的密钥转换为密钥对
1、keystore文件转换为pkcs12格式
     keytool -importkeystore -srckeystore test.keystore -destkeystore test.p12 -srcstoretype JKS -   deststoretype PKCS12   

2、dump pkcs12 文件
     openssl pkcs12 -in test.p12 -nodes -out test.rsa.pem  

3、以文本形式打开test.rsa.pem,复制“BEGIN CERTIFICATE”  “END CERTIFICATE”之间的内容到一个文件
test.x509.pem, 即公钥
4、复制 “BEGIN RSA PRIVATE KEY”“END RSA PRIVATE KEY” 之间的内容到一个文件test.rsa.pem,然后运行如下命令
     
openssl pkcs8 -topk8 -outform DER -in     test.rsa.pem -inform PEM -out test.pk8 -nocrypt  

这样就test.x509.pem和test.pk8就生成了.





更多相关文章

  1. Android studio怎么创建一个Java类文件
  2. Android分别使用HTTP协议和TCP协议实现上传文件
  3. android添加文件打开方式以及参数传递
  4. 在Android命令行启动程序的方法
  5. 在pc上安装android market软件并提取apk文件
  6. android studio --terminal 命令编译项目(仅限于ubuntu平台)

随机推荐

  1. 使用fastboot命令刷机流程详解
  2. Android缓存浅析
  3. Android系列教程之六:TextView小组件的使
  4. Android ImageView 的scaleType 属性图解
  5. Android控件之利用selector自定义的带文
  6. Android WebView实现离线加载功能
  7. 使用Vitamio打造自己的Android万能播放器
  8. Android手势ImageView之(自定义GestureDet
  9. Android事件总线之EventBus3.0基本使用
  10. 给大家介绍几个常见的Android代码片段