東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

eclipse生成的keystore文件转换成pk8+x509.pem

2014年3月25日星期二



使用Auto-Sign签名工具时,看到pem跟pk8俩文件
国有化改革。。
senrsl@senrsl-desktop:~$ cd java/jdk1.7.0_51/
senrsl@senrsl-desktop:~/java/jdk1.7.0_51$ ll
总用量 19776
drwxr-xr-x 8 senrsl senrsl     4096 12月 19 11:25 ./
drwxrwxr-x 3 senrsl senrsl     4096  3月 13 15:26 ../
drwxr-xr-x 2 senrsl senrsl     4096 12月 19 11:19 bin/
-r--r--r-- 1 senrsl senrsl     3339 12月 19 11:11 COPYRIGHT
drwxr-xr-x 4 senrsl senrsl     4096 12月 19 11:11 db/
drwxr-xr-x 3 senrsl senrsl     4096 12月 19 11:11 include/
drwxr-xr-x 5 senrsl senrsl     4096 12月 19 11:13 jre/
drwxr-xr-x 5 senrsl senrsl     4096 12月 19 11:24 lib/
-r--r--r-- 1 senrsl senrsl       40 12月 19 11:11 LICENSE
drwxr-xr-x 4 senrsl senrsl     4096 12月 19 05:11 man/
-r--r--r-- 1 senrsl senrsl      114 12月 19 11:11 README.html
-rw-r--r-- 1 senrsl senrsl      498 12月 19 11:12 release
-rw-r--r-- 1 senrsl senrsl 19895587 12月 19 11:11 src.zip
-rw-r--r-- 1 senrsl senrsl   123324 12月 19 05:11 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r-- 1 senrsl senrsl   173559 12月 19 11:11 THIRDPARTYLICENSEREADME.txt
senrsl@senrsl-desktop:~/java/jdk1.7.0_51$ cd bin
senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$ ll
总用量 720
drwxr-xr-x 2 senrsl senrsl   4096 12月 19 11:19 ./
drwxr-xr-x 8 senrsl senrsl   4096 12月 19 11:25 ../
-rwxr-xr-x 1 senrsl senrsl   5953 12月 19 11:12 appletviewer*
-rwxr-xr-x 1 senrsl senrsl   5865 12月 19 11:12 apt*
lrwxrwxrwx 1 senrsl senrsl      8 12月 19 11:13 ControlPanel -> jcontrol*
-rwxr-xr-x 1 senrsl senrsl   5873 12月 19 11:12 extcheck*
-rwxr-xr-x 1 senrsl senrsl   5893 12月 19 11:12 idlj*
-rwxr-xr-x 1 senrsl senrsl   5861 12月 19 11:12 jar*
-rwxr-xr-x 1 senrsl senrsl   5873 12月 19 11:12 jarsigner*
-rwxr-xr-x 1 senrsl senrsl   5714 12月 19 11:12 java*
-rwxr-xr-x 1 senrsl senrsl   5865 12月 19 11:12 javac*
-rwxr-xr-x 1 senrsl senrsl   5873 12月 19 11:12 javadoc*
-rwxr-xr-x 1 senrsl senrsl   2052 12月 19 05:11 javafxpackager*
-rwxr-xr-x 1 senrsl senrsl   5865 12月 19 11:12 javah*
-rwxr-xr-x 1 senrsl senrsl   5865 12月 19 11:12 javap*
-rwxr-xr-x 1 senrsl senrsl   1809 12月 19 11:03 java-rmi.cgi*
-rwxr-xr-x 1 senrsl senrsl 104202 12月 19 11:13 javaws*
-rwxr-xr-x 1 senrsl senrsl   5861 12月 19 11:12 jcmd*
-rwxr-xr-x 1 senrsl senrsl   5929 12月 19 11:12 jconsole*
-rwxr-xr-x 1 senrsl senrsl   6391 12月 19 11:13 jcontrol*
-rwxr-xr-x 1 senrsl senrsl   5897 12月 19 11:12 jdb*
-rwxr-xr-x 1 senrsl senrsl   5865 12月 19 11:12 jhat*
-rwxr-xr-x 1 senrsl senrsl   5985 12月 19 11:12 jinfo*
-rwxr-xr-x 1 senrsl senrsl   5985 12月 19 11:12 jmap*
-rwxr-xr-x 1 senrsl senrsl  63050  7月  6  2013 jmc*
-rw-r--r-- 1 senrsl senrsl    324  7月  6  2013 jmc.ini
-rwxr-xr-x 1 senrsl senrsl   5857 12月 19 11:12 jps*
-rwxr-xr-x 1 senrsl senrsl   5881 12月 19 11:12 jrunscript*
-rwxr-xr-x 1 senrsl senrsl   5901 12月 19 11:12 jsadebugd*
-rwxr-xr-x 1 senrsl senrsl   5993 12月 19 11:12 jstack*
-rwxr-xr-x 1 senrsl senrsl   5861 12月 19 11:12 jstat*
-rwxr-xr-x 1 senrsl senrsl   5869 12月 19 11:12 jstatd*
-rwxr-xr-x 1 senrsl senrsl   5362  1月 17  2013 jvisualvm*
-rwxr-xr-x 1 senrsl senrsl   5873 12月 19 11:12 keytool*
-rwxr-xr-x 1 senrsl senrsl   5877 12月 19 11:12 native2ascii*
-rwxr-xr-x 1 senrsl senrsl   6013 12月 19 11:12 orbd*
-rwxr-xr-x 1 senrsl senrsl   5893 12月 19 11:12 pack200*
-rwxr-xr-x 1 senrsl senrsl   5981 12月 19 11:12 policytool*
-rwxr-xr-x 1 senrsl senrsl   5857 12月 19 11:12 rmic*
-rwxr-xr-x 1 senrsl senrsl   5865 12月 19 11:12 rmid*
-rwxr-xr-x 1 senrsl senrsl   5877 12月 19 11:12 rmiregistry*
-rwxr-xr-x 1 senrsl senrsl   5889 12月 19 11:12 schemagen*
-rwxr-xr-x 1 senrsl senrsl   5873 12月 19 11:12 serialver*
-rwxr-xr-x 1 senrsl senrsl   5893 12月 19 11:12 servertool*
-rwxr-xr-x 1 senrsl senrsl   6045 12月 19 11:12 tnameserv*
-rwxr-xr-x 1 senrsl senrsl 215415 12月 19 11:12 unpack200*
-rwxr-xr-x 1 senrsl senrsl   5873 12月 19 11:12 wsgen*
-rwxr-xr-x 1 senrsl senrsl   5881 12月 19 11:12 wsimport*
-rwxr-xr-x 1 senrsl senrsl   5877 12月 19 11:12 xjc*
senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$ keytool -importkeystore -srckeystore DeApp.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
程序 'keytool' 已包含在下列软件包中:
 * gcj-4.6-jre-headless
 * openjdk-6-jre-headless
 * gcj-4.5-jre-headless
 * openjdk-7-jre-headless
请尝试:sudo apt-get install <选定的软件包>
senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$ ./keytool -importkeystore -srckeystore DeApp.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
输入目标密钥库口令: 
再次输入新口令:
keytool 错误: java.io.FileNotFoundException: DeApp.keystore (没有那个文件或目录)
senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$ ./keytool -importkeystore -srckeystore DeApp.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
输入目标密钥库口令: 
再次输入新口令:
输入源密钥库口令: 
已成功导入别名 伪信 的条目。
已成功导入别名 网易新闻2b版 的条目。
已完成导入命令: 2 个条目成功导入, 0 个条目失败或取消
senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$ openssl help
openssl:Error: 'help' is an invalid command.

Standard commands
asn1parse         ca                ciphers           cms              
crl               crl2pkcs7         dgst              dh               
dhparam           dsa               dsaparam          ec               
ecparam           enc               engine            errstr           
gendh             gendsa            genpkey           genrsa           
nseq              ocsp              passwd            pkcs12           
pkcs7             pkcs8             pkey              pkeyparam        
pkeyutl           prime             rand              req              
rsa               rsautl            s_client          s_server         
s_time            sess_id           smime             speed            
spkac             srp               ts                verify           
version           x509             

Message Digest commands (see the `dgst' command for more details)
md4               md5               rmd160            sha              
sha1             

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb      
aes-256-cbc       aes-256-ecb       base64            bf               
bf-cbc            bf-cfb            bf-ecb            bf-ofb           
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb 
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc         
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb        
des               des-cbc           des-cfb           des-ecb          
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb      
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb     
des-ofb           des3              desx              rc2              
rc2-40-cbc        rc2-64-cbc        rc2-cbc           rc2-cfb          
rc2-ecb           rc2-ofb           rc4               rc4-40           
seed              seed-cbc          seed-cfb          seed-ecb         
seed-ofb          zlib             

senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$ openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
Enter Import Password:
MAC verified OK

//这个是不加密钥的方法
senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$ openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt

//这个是加密钥
senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$ openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8
Enter Encryption Password:
Verifying - Enter Encryption Password:
senrsl@senrsl-desktop:~/java/jdk1.7.0_51/bin$



原贴:
地址:http://blog.csdn.net/ilittleone/article/details/17914995

android 一般除了使用jarsigner签名 还有使用signapk 后者位于android源码 前者位于jdk中。两者使用的文件格式不同前者使用JKS 后者使用公钥+私钥 是分开的

第一步 先v把keystore文件转换为pkcs12格式
  1. keytool   -importkeystore -srckeystore debug.keystore   -destkeystore tmp.p12 -srcstoretype JKS         -deststoretype PKCS12   
第二步 将PKCS12 dump成pem 这样就可以按照文本形式查看了
  1. openssl        pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem 
  接下来打开文件intermediate.rsa.pem 看到 PRIVATE KEY 还有CERT PS:private 那边可能有RSA KEY 这个不用管
Bag Attributes
    friendlyName: androiddebugkey
    localKeyID: 54 69 6D 65 20 31 33 38 38 39 37 38 34 32 36 38 36 39
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Bag Attributes
    friendlyName: androiddebugkey
    localKeyID: 54 69 6D 65 20 31 33 38 38 39 37 38 34 32 36 38 36 39
subject=/C=US/O=Android/CN=Android Debug
issuer=/C=US/O=Android/CN=Android Debug
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
复制"BEGIN CERTIFICATE"  "END CERTIFICATE" 到(新建个文件) cert.x509.pem
[
 pem里面内容(下的一样):
-----BEGIN CERTIFICATE-----
。。。。
-----END CERTIFICATE-----
]
复制 "BEGIN RSA PRIVATE KEY"   "END RSA PRIVATE KEY" 到(同上) private.rsa.pem

第三 生成pk8格式的私钥
  1. openssl pkcs8 -topk8 -outform DER -in     private.rsa.pem -inform PEM -out private.pk8 -nocrypt 
  完毕 收集文件 cert.x509.pem private.pk8 其余的中间文件删除即可
PS:

-nocrypt 这个参数设定key加密 如果设置了这个参数 下面签名 只要证书+key 不需要密码了 如果加密 应该 openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 接下来输入密码

用法 java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk
 OK

--
senRsl
2014-03-25 11:12
GMT+8 @Beijing Tongzhou

没有评论 :

发表评论