Java 多密钥存储与多密钥以及密钥的导出/导入

Java 多密钥存储与多密钥以及密钥的导出/导入,java,android,code-signing,keystore,private-key,Java,Android,Code Signing,Keystore,Private Key,我正在为各种客户端开发多个Android应用程序。我为我的客户管理整个开发生命周期,包括开发和发布到Google Play 我关心的是我应该如何签署我为客户提出的申请。现在,我有一个密钥库,对于每个客户端,我创建它们自己的私钥 我担心的是,如果有一天客户想在没有我的情况下使用他们的Android应用程序并自行管理,我需要给他们私钥,以便他们可以发布应用程序的更新 我的问题是,是否可以仅使用1个密钥库来执行此操作,并以某种方式从密钥库导出属于某个客户机的私钥并将其提供给他们,还是应该为每个客户机创

我正在为各种客户端开发多个Android应用程序。我为我的客户管理整个开发生命周期,包括开发和发布到Google Play

我关心的是我应该如何签署我为客户提出的申请。现在,我有一个密钥库,对于每个客户端,我创建它们自己的私钥

我担心的是,如果有一天客户想在没有我的情况下使用他们的Android应用程序并自行管理,我需要给他们私钥,以便他们可以发布应用程序的更新

我的问题是,是否可以仅使用1个密钥库来执行此操作,并以某种方式从密钥库导出属于某个客户机的私钥并将其提供给他们,还是应该为每个客户机创建一个密钥库?如果前者是可能的,那么技术上是如何做到的


最适合我的场景是能够将单个私钥从我的密钥库导出到另一个密钥库,并且能够在不影响密钥有效性的情况下更改此密钥的密码,以便将来仍可以使用此密钥更新为其制作的应用程序。

您可以使用名为keytool的程序将私钥导入或导出到PKCS 12(.p12)文件中:

keytool -importkeystore -srckeystore existing-store.jks -destkeystore new-store.p12 -deststoretype PKCS12
此页面列出了密钥库可以执行的许多操作,例如更改其格式和导出单个密钥:

还有一个名为Keystore Explorer的应用程序,它执行相同的任务,但使用GUI:

您可以在不影响签名能力的情况下更改密码:

keytool -keypasswd -alias "key name" -keypass "old password" -new "new password" -keystore "keystore path"

这意味着,当客户机需要密钥库中的密钥时,只需将其导出即可

您是否对所有私钥使用相同的密码?对于您的用例,如果我是您,我将为每个客户端创建一个单独的密钥库。我对密钥库中的每个密钥使用不同的密码。从逻辑上讲,只管理1个密钥库会更容易,但如果这阻止我允许我的客户独立,那么这不是一个有效的选项。谢谢!也可以更改密钥的密码吗?或者这会改变私钥,导致无法更新应用程序?我有点担心,第一个命令(将密钥导出到新密钥库)会将所有密钥复制到新密钥库中,而我只想复制一个密钥……你让我开始了,我自己设法找到了所需的解决方案。为了准确地执行我需要的操作,我执行以下操作:keytool-importkeystore-srckeystore mystore.jck-destkeystore myotherstore.jks-srcstoretype jks-srcstorepass mystorepass-deststorepass myotherstorepass-srcalas myserverkey-destalas myotherserverkey-srckeypass mykeypass-destkeypassgreat,但是看看我在编辑中发布的新链接。这可能是你未来的参考。