我需要一些帮助将我的.P12证书文件转换为JKS密钥库。我已经使用Java的keytool实用程序遵循了标准命令。但是,当我尝试使用生成的JKS文件通过SOAPUI访问WS端点时,我得到了403.7错误-禁止:需要SSL证书。对同一端点使用P12文件和SOAPUI会产生成功的响应。以下是导入P12密钥库转换为JKS密钥库-
keytool -importkeystore -srckeystore src.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore target.jks
字符串
我还尝试使用openssl转换P12 -> PEM -> DER -> JKS:
openssl pkcs12 -in src.p12 -out src.pem -clcerts
型
(Edit pem分为两个复合部分,分别称为src.key和src.cer)
openssl pkcs8 -topk8 -nocrypt -in src.key -out key.der -inform PEM -outform DER
openssl x509 -in src.cer -inform PEM -out cert.der -outform DER
型
(我运行了一个实用程序来将这两个密钥合并合并到keystore.ImportKey中)
keytool -importkeystore -srckeystore keystore.ImportKey -destkeystore target.JKS
型
同样也没有骰子
我是不是漏掉了什么?
4条答案
按热度按时间zvokhttg1#
如果您有Keytool应用程序和PKCS#12文件,请启动单行命令:
字符串
您需要修改这些参数:
MY_FILE.p12
:表示要转换的PKCS#12文件(.p12或.pfx扩展名)的路径。MY_KEYSTORE.jks
:您要存储证书的密钥库的路径。如果不存在,将自动创建。PASSWORD_JKS
:在密钥库打开时请求的密码。ALIAS_SRC
:与PKCS#12文件中的证书条目匹配的名称,例如“tomcat”。如果您要从生成
.PFX
文件的Windows服务器导出证书,则必须检索Windows创建的“别名”名称。为此,您可以执行以下命令:型
在那里,“aliasname”字段指示您需要在命令行中使用的证书的存储名称。
ALIAS_DEST
:与JKS密钥库中的证书条目匹配的名称,例如“tomcat”。dfddblmv2#
但他问如何将.p12转换为JKS,所以答案是:
字符串
只是不得不用这句话,对我有用。
fumotvh33#
我很惊讶为什么这么长时间没有人回答这个问题。无论如何,将p12转换为jks的最简单方法是使用Keytool。以下是您可能需要使用的命令:用途:
字符串
我相信你所面临的问题可能是因为你没有提供Keypass。请注意,这是一个很好的做法,以保持相同的密码和storepass,因为有时服务器无法区分密码和storepass。
vd2z7a6w4#
这里有一些很好的答案,但我发现,在某些情况下,如果转换为jks,一些p12证书在某些情况下可能不起作用。例如,我们从Java 11的keytool中生成了jks,对于在Java 11上的tomcat 9中运行的应用程序来说,它是可以的。但是在应用程序以与旧的javax库兼容的模式运行的情况下,以相同方式创建的证书在带有java 17的Tomcat 10中不起作用,因此,哪些库实际上如何用于从Java应用程序访问jks密钥库。
然后,我们在这样的基础设施上得到了这样的密钥库的“无效密钥库格式”异常。
另外,生成keytool密钥库所使用的Java版本也很重要。
但是我得到的信息是,如果PKCS 12密钥库曾经“准备好完全兼容java”-请不要问我,这意味着什么:- )-那么它就起作用了-似乎不是所有的p12证书都是一样的。而且真的,这也是我们的情况-所以在这种情况下,你需要将最初以p12格式交付的客户端证书存储在jks中,以作为客户端访问一些远程服务,那么你可能会觉得这个剧本很帅-它首先通过PEM重新转换P12证书,然后创建JKS密钥库,然后还将密钥库中的导入密钥重命名为以所请求
字符串
例如,它的调用方式如下(上述脚本位于文件
keystore-gen-tomcat-compatibility-mode.sh
中):型