[AIR]签名类型.P12与.keystore

对于AIR项目的签名类型 无论是android 还是IOS。似乎大家都只知道是.p12 也就是PKCS12类型,很多人都苦恼怎么签名和原生开发的不一样(主要是针对android)。一般android原生开发是使用JKS也就是 .keystore文件来签名。我一直以来想研究出用.p12签名文件转换成.keystor文件的方法。但是很抱歉。从.p12文件转到.keystore会缺少密匙链。当然反方向转换没什么问题。

在AIR手机游戏联合运营的今天。充斥着各种平台的签名 繁杂而讨厌。很多时候如果APK或者IPA需要自己做后台服务器更新的话 还需要去找运营商签名。严重影响更新进度。当然让运营商提供.keystore文件也可以。但是很多人只知道AIR打包只能用.p12文件签名。而使用.keystore文件似乎只有走 打包好APK再重新签的方式。其实不然。p12文件的签名方式 只是FB上限制的。在adt中已经提供了所有签名方式:

-storetype keystore 的类型,由 keystore 实现确定。大多数 Java 安装随附的默认 keystore 实现支持 JKS 和 PKCS12 类型。
Java 5.0 包含对 PKCS11 类型和 Keychain 类型的支持,前者用于访问硬件标记中的 keystore,后者用于访问 Mac OS X
keychain。Java 6.0 包含对 MSCAPI 类型的支持(在 Windows 中)。如果安装和配置了其他 JCA 提供程序,则可能还可以
使用其他 keystore 类型。如果未指定任何 keystore 类型,则使用默认 JCA 提供程序的默认类型。

举个例子:
对于.p12文件的签名方式  如下命令行:
adt
-package
-target ipa-test-interpreter
-provisioning-profile rect_appStore.mobileprovision
-storetype pkcs12
-keystore rect.p12
-storepass 1234
rect.ipa rect-app.xml rect.swf   Default.png
对于.keystore文件的签名方式  如下命令:
adt
-package
-target ipa-test-interpreter
-provisioning-profile rect_appStore.mobileprovision
-storetype jks
-keystore rect.keystore
-storepass 1234
rect.ipa rect-app.xml rect.swf   Default.png

官方文件的例子:

//使用 .p12 文件签名:
-storetype pkcs12 -keystore cert.p12
//使用默认 Java keystore 签名:
-alias AIRcert -storetype jks
//使用特定 Java keystore 签名:
-alias AIRcert -storetype jks -keystore certStore.keystore
//使用 Mac OS X keychain 签名:
-alias AIRcert -storetype KeychainStore -providerName Apple
//使用 Windows 系统 keystore 签名:
-alias cn=AIRCert -storeype Windows-MY
//使用硬件标签签名(请参考标记制造商提供的 Java 配置相关说明,以便使用该标记并获取正确的 providerName 值):
-alias AIRCert -storetype pkcs11 -providerName tokenProviderName
//在不嵌入时间戳的情况下签名:
-storetype pkcs12 -keystore cert.p12 -tsa none

8 评论

  1. 可以使用下面的命令将一个p12文件导入到一个已有的keystore文件中:
    keytool -v -importkeystore -srckeystore temp.p12 -srcstoretype PKCS12 -destkeystore temp.keystore -deststoretype JKS
    导入后可以使用下面的命令查看明细:
    keytool -list -keystore temp.keystore

    1. @polly
      将p12导入keystore或者用keystore直接生成p12都会报derinputstream.getlength():lengthtag=109,too big;这是什么原因

  2. @Rect你好!按照你的移动MMane的制作步骤进行打包,在进行处理apk步骤中,重新签名后,手机安装失败!比较了一下,在META-INF包里面生成的是ANDRIOD.RSA和ANDRIOD.SF,与你生成的文件名字不一样,是不是我再次打包签名失败?今天下午就解压再打包apk弄了3个小时!快崩溃了!

  3. @Rect 你好!按照你的移动MMane的制作步骤进行打包,在进行处理apk步骤中,重新签名后,手机安装失败!比较了一下,在META-INF包里面生成的是ANDRIOD.RSA和ANDRIOD.SF,与你生成的文件名字不一样,是不是我再次打包签名失败?今天下午就解压再打包apk弄了3个小时!快崩溃了!

发表评论

电子邮件地址不会被公开。 必填项已用*标注