美文网首页
Android应用使用pem和pk8签名

Android应用使用pem和pk8签名

作者: 1024猿 | 来源:发表于2019-12-11 12:58 被阅读0次

    Android应用使用到的签名文件,在不同应用场景会使用到不同文件格式的key:.keystore、.pem、*.pk8等。
    这里一起罗列下,留个底。

    1.生成key

    密钥库类型:jks
    密钥文件名:test1211.keystore
    key store password:test1211
    key alias:test1211
    key password:test1211
    有效期:100年

    命令:keytool -genkey -v -keystore test1211.keystore -alias test1211 -keyalg RSA -validity 36500
    输入密钥库口令:
    再次输入新口令:
    您的名字与姓氏是什么?
      [Unknown]:  Test1211
    您的组织单位名称是什么?
      [Unknown]:  Test1211
    您的组织名称是什么?
      [Unknown]:  Test1211
    您所在的城市或区域名称是什么?
      [Unknown]:  ShenZhen
    您所在的省/市/自治区名称是什么?
      [Unknown]:  GuangDong
    该单位的双字母国家/地区代码是什么?
      [Unknown]:  CN
    CN=Test1211, OU=Test1211, O=Test1211, L=ShenZhen, ST=GuangDong, C=CN是否正确?
      [否]:  y
    
    正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 36,500 天):
             CN=Test1211, OU=Test1211, O=Test1211, L=ShenZhen, ST=GuangDong, C=CN
    输入 <test1211> 的密钥口令
            (如果和密钥库口令相同, 按回车):
    [正在存储test1211.keystore]
    
    2.密钥库类型jks转为pkcs12

    密钥库类型:pkcs12
    密钥文件名:test1211-pkcs12.keystore
    key store password:test1211
    key password:test1211

    特别说明:在进行转换时必须保证key store pwdkey pwd一致,不然会报错:
    keytool 错误: java.security.UnrecoverableKeyException: Cannot recover key
    修改密码,请参考下文10.修改密码

    命令:keytool -importkeystore -srckeystore test1211.keystore -destkeystore test1211-pkcs12.keystore -deststoretype pkcs12
    正在将密钥库 test1211.keystore 导入到 test1211-pkcs1211.keystore...
    输入目标密钥库口令:
    再次输入新口令:
    输入源密钥库口令:
    已成功导入别名 test1211 的条目。
    已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消
    
    3.密钥库类型pkcs12转为jks

    密钥库类型:jks
    密钥文件名:test1211-jks.keystore
    key store password:test1211
    key password:test1211

    命令:keytool -importkeystore -srckeystore test1211-pkcs12.keystore -destkeystore test1211-jks.keystore -deststoretype jks
    正在将密钥库 test1211-pkcs12.keystore 导入到 test1211-jks.keystore...
    输入目标密钥库口令:
    再次输入新口令:
    输入源密钥库口令:
    已成功导入别名 test1211 的条目。
    已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消
    
    4.查看key签名信息

    查看jks和pkcs12的命令都一样,输入key store password的密码。
    这里只是查看其中一个文件,你可以对比三个文件,证书指纹都是一致的。

    命令:keytool -list -v -keystore test1211.keystore
    输入密钥库口令:
    密钥库类型: jks
    密钥库提供方: SUN
    
    您的密钥库包含 1 个条目
    
    别名: test1211
    创建日期: 2019-12-11
    条目类型: PrivateKeyEntry
    证书链长度: 1
    证书[1]:
    所有者: CN=Test1211, OU=Test1211, O=Test1211, L=ShenZhen, ST=GuangDong, C=CN
    发布者: CN=Test1211, OU=Test1211, O=Test1211, L=ShenZhen, ST=GuangDong, C=CN
    序列号: 5c5ee261
    有效期为 Wed Dec 11 10:49:56 CST 2019 至 Fri Nov 17 10:49:56 CST 2119
    证书指纹:
             MD5:  43:D6:36:8C:44:1D:DE:78:51:58:AB:21:85:BE:33:9C
             SHA1: 41:AA:5F:D1:A2:E8:2C:7D:48:4E:8A:03:8A:2D:B3:36:30:EC:CE:A1
             SHA256: E4:33:51:ED:D0:A0:8D:30:33:31:81:A1:1C:5E:2C:64:39:99:72:56:DF:CF:8E:3A:5A:7A:16:D8:F9:83:26:30
    签名算法名称: SHA256withRSA
    主体公共密钥算法: 2048 位 RSA 密钥
    版本: 3
    
    扩展:
    
    #1: ObjectId: 2.5.29.14 Criticality=false
    SubjectKeyIdentifier [
    KeyIdentifier [
    0000: 85 CC 7D 2C 0B F1 14 C2   20 D7 B9 99 52 22 AE 42  ...,.... ...R".B
    0010: B0 57 07 D2                                        .W..
    ]
    ]
    
    
    
    *******************************************
    *******************************************
    
    5.将PKCS12格式的key dump为可直接阅读的文本

    dump过程中也会提示输入密码,正确输入之后可阅读的token会存储在test1211.rsa.pem中
    如果没安装openssl,点击下载

    命令:openssl pkcs12 -in test1211-pkcs12.keystore -nodes -out test1211.rsa.pem
    Enter Import Password:
    MAC verified OK
    
    6.提取密钥key

    这一段(包含这两个tag)的文本复制出来,新建为文件my.x509.pem (签名时用到的公钥)

    用文本编辑器打开test1211.rsa.pem,将从
    -----BEGIN PRIVATE KEY-----
     到
    -----END PRIVATE KEY-----
    
    这一段(包含这两个tag)的文本复制出来,新建为文件my_private.rsa.pem
    
    将从
    -----BEGIN CERTIFICATE-----
     到
    -----END CERTIFICATE-----
    
    7.转换,生成pk8格式的私钥

    这个生成的my_private.pk8就是签名时用到的私钥

    命令:openssl pkcs8 -topk8 -outform DER -in my_private.rsa.pem -inform PEM -out my_private.pk8 -nocrypt
    
    8.对apk签名
    命令:java -jar signapk.jar my.x509.pem my_private.pk8 my.apk my_signed.apk
    
    9.查看apk的签名信息
    命令:keytool -list -printcert -jarfile my_signed.apk
    
    10.修改密码

    如果密码不一致,会导致jks和pkcs12互转时报错Cannot recover key
    建议把key store password修改为与key password一致,如下命令:

    命令:keytool -storepasswd -keystore test1211.keystore
    

    参考1:Android 创建自己的pk8, x509.pem并给app签名
    参考2:查看并修改签名证书keystore的密码,alias别名等相关参数

    相关文章

      网友评论

          本文标题:Android应用使用pem和pk8签名

          本文链接:https://www.haomeiwen.com/subject/uqlogctx.html