有遇到如下error的朋友,可以阅读此文解决:
1、JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore E:\eeee -destkeystore E:\eeee -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。
2、目标 pkcs12 密钥库具有不同的 storepass 和 keypass。请在指定了 -destkeypass 时重试。
3、PKCS12 密钥库不支持其他存储和密钥口令。正在忽略用户指定的-destkeypass值。
先说一下背景,换新公司后项目需要重新创建签名文件,所以遇到了这个之前没有遇到过的问题,既然提示这个警告了(其实用jks类型的一样能打包签名),那我还是来解决一下(强迫症好难)。我很好奇为什么AS(包括用命令指定签名类型)不能直接给我们生成pkcs12类型的签名文件,目前猜测可能是keytool版本问题,这里不深究。讲一下我的解决思路:
1、是否能直接生成pkcs12类型的证书
2、怎么把jks证书转换成pkcs12的

首先说方案一,很简单,用命令生成证书的时候指定storetype为pkcs12:

keytool -genkey -v -alias xxx -keyalg RSA -storetype PKCS12 -keystore E:\xxx -storepass yourStorePass -keypass yourAliasPass -validity 36500

后续按照提示生成即可。(由于公司原因,不便截图,见谅,有遇到问题的话下方评论)
此时生成的证书确实是pkcs12,但alias的口令(密码)与密钥库的口令一样(至于为什么一样,可能还是keytool的版本问题,不深究),如果这样能满足你的需求,那就不用往下看了。但一般我们不希望别名和秘钥库的口令是一样的,所以接下来我们用命令修改刚才创建的别名口令即可:

keytool -keypasswd -alias xxx -keystore C:\xxxxx

到此问题解决。

方案二:使用AS或者普通命令创建证书后,会有如下的提示:
JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore C:\xxx -destkeystore C:\xxx -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。

附普通创建命令:

keytool -genkey -alias test -keypass 654321 -keyalg RSA -keysize 2048 -validity 36500 -keystore C:\xxx -storepass 123456

接着运行其建议的命令:

keytool -importkeystore -srckeystore C:\xxx -destkeystore C:\xxx -deststoretype pkcs12

这行代码的意思是从之前创建的证书导入到新证书里,需要输入之前证书的相关口令 :
输入目标密钥库口令:即设置新证书的秘钥库密码
再次输入新口令:确认新密码
输入源密钥库口令:即之前创建的证书秘钥库密码
输入 的密钥口令:之前秘钥库别名密码
输入正确后,会这样提示:
keytool 错误: java.lang.Exception: 目标 pkcs12 密钥库具有不同的 storepass 和 keypass。请在指定了 -destkeypass 时重试。

好,我们继续按照他的要求添加目标别名pass:

keytool -importkeystore -srckeystore C:\xxx -destkeystore C:\xxx -deststoretype pkcs12 -destkeypass 654321

输入源秘钥库口令后,得到如下提示:
警告: PKCS12 密钥库不支持其他存储和密钥口令。正在忽略用户指定的-destkeypass值。
查看证书内容可知密钥库类型已经是 PKCS12:

keytool -list -v -keystore C:\xxx

也就是说这个keytool不让我们的库秘钥和别名秘钥不一致,先不管警告。这里有两种方案:
a、修改alias test的密码:

keytool -keypasswd -alias test -keystore C:\xxx

b、用上面转换后的证书继续创建一个名为test1的alias,这个alias也即我们需要的alias,之后再删除test别名(因为它的口令跟秘钥库的口令一样):

keytool -genkey -alias test1 -keypass 654321 -keyalg RSA -keysize 2048 -validity 36500 -keystore C:\xxx -storepass 123456

执行后,查看证书的别名,已经有两个了:

keytool -list -v -keystore C:\xxx

删除test别名:

keytool -keystore C:\xxx -delete -alias test

再查看内容,别名只剩我们需要的test1。
到此问题解决。

由此可见,方案一是正解,最简单快捷,不过方案二可以熟悉更多的命令。

这里顺便总结一些常用keytool命令:
1、创建普通证书:
keytool -genkey -alias test -keypass 654321 -keyalg RSA -keysize 2048 -validity 36500 -keystore C:\xxx -storepass 123456

2、创建pkcs12证书:
keytool -genkey -v -alias test -keyalg RSA -storetype PKCS12 -keystore C:\xxx -storepass yourStorePass -keypass yourAliasPass -validity 36500

3、在已有证书里增加alias:
keytool -genkey -alias test1 -keypass 654321 -keyalg RSA -keysize 2048 -validity 36500 -keystore C:\xxx -storepass 123456

4、删除证书里的alias:
keytool -keystore C:\xxx -delete -alias test

5、修改alias密码:
keytool -keypasswd -alias test -keystore C:\xxx

6、查看 keystore信息:
keytool -list -v -keystore debug.keystore

7、空包签名:
jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkIn] [alias]

8、打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件
keytool -printcert -file META-INF/CERT.RSA

更多命令可cmd 输入keytool查看:
-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令

使用 “keytool -command_name -help” 获取 command_name 的用法

以上
再见

Android签名jks转pkcs12(JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore xx pkcs12“ 迁移到行业标准格式 PKCS12)相关推荐

  1. Android APK签名 JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12“ 迁移到行业标准格式

    Android Studio中进行签名 转载地址:Android APK签名 JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeystore ...

  2. Warning:JKS 密钥库使用专用格式。建议使用 keytool -importkeystore -srckeystore...pkcs12 迁移到行业标准格式 PKCS12

    背景 在给项目生成密钥文件的时候发现出现了一个错误. 使用 android studio 填写好相关信息后,最后生成密钥时会报一个 Error,如下图示: 报错信息如下: Key was create ...

  3. 【错误记录】创建密钥报错 ( Key was created with errors: Warning: JKS 密钥库使用专用格式。建议使用 “ keyto “ 迁移到行业标准格式 PKCS12 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 创建签名密钥 : 选择 " 菜单栏 / Build / Generate Singed Bundle / APK - " 选项 ...

  4. JKS 密钥库使用专用格式。建议使用 “xxx“ 迁移到行业标准格式 PKCS12

    Android开发中,密钥库的生成目前有两种方式: 方式一 1.配置好JDK环境,jdk环境配置请自行百度: 2.使用如下命令生成,回车后输入用户组织等相应信息即可: keytool -genkey ...

  5. JKS 密钥库使用专用格式。建议使用 keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12 迁移到行业标准格式PKCS12

    错误: Key was created with errors: Warning: JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeyst ...

  6. 新版本AS 签名文件创建错误,JKS 密钥库使用专用格式。

    android Studio打包pak请参考下面链接: https://www.jianshu.com/p/940ac5cf0246 需要把 AS刚创建的JKS密钥库迁移到行业标准格式PKCS12,在 ...

  7. android studio生成JKS时候提示:JKS 密钥库使用专用格式。建议使用 keytool -importkeystore

    本文是方便新手的,将过程中许多问题都列举出来引用其他文章链接,方便新手快速找到如何解决,大家根据自己需求选择性查看即可 使用Android Studio自带的功能创建的key的时候,出现warning ...

  8. Android 签名证书生成及jks与keystore 相互转换

    Android 签名证书生成及jks与keystore 相互转换 keytool 这个工具是JDK里面自带的,配置好JDK环境可直接在命令行完成一下操作! 生成签名证书: 生成JKS证书: keyto ...

  9. 迁移到行业标准格式PKCS12

    解决android创建签名,报"迁移到行业标准格式PKCS12"的问题 解决办法,使用命令创建 keytool -genkey -alias 填你的alias -keypass 你 ...

最新文章

  1. 线程安全之strtok()函数
  2. 高维多元数据拟合回归如何进行???
  3. 一个游戏大量合服代表什么_[游戏服务器从入门到关门]4.分区分服、连服、合服...
  4. golang并发官方示例
  5. 解决 SSH Connection closed by foreign host 问题
  6. Java 面试 1 小时,我看出了和月薪 3w 的差距
  7. Python 奇葩语法
  8. JAVA中String类型的字符替换问题
  9. linux bluefish制作网页,Bluefish编辑器
  10. K8s中Secrets
  11. 1 is not JSON serializable的解决方案
  12. 在使用百度地图API时,浏览器报错
  13. RadioGroup 全部取消选中 和选中某个按钮
  14. 虚拟机如何安装优麒麟19.10
  15. 抖音直播间一直没人为什么?提高抖音直播间人气:国仁楠哥
  16. CFD冲蚀模拟的一些理论
  17. 2018上IEC计算机高级语言(C)作业 第3次作业
  18. Qt帮助文档无法打开的解决方案
  19. raid技术基本原理
  20. Oracle ERP系统月结与年结流程

热门文章

  1. 10010---PMP--例外管理
  2. 小偷咋这么快破解了银行卡密码
  3. kubernetes 【CNI插件】Flannel使用详解
  4. 数据结构c语言编程程序,图书管理程序(数据结构c语言实现增删改查)
  5. 最新全球十大医疗公司排名
  6. 远程通讯模块在plc无线通信中的应用
  7. CMake中set/unset的使用
  8. 来自开源支持者的第一笔捐赠
  9. 斯坦福Dan Boneh密码学——03 匿名路由
  10. 调查问卷(单选、多选)