ssl 需要帮助将P12证书转换为JKS

gblwokeq  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(169)

我需要一些帮助将我的.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


同样也没有骰子
我是不是漏掉了什么?

zvokhttg

zvokhttg1#

如果您有Keytool应用程序和PKCS#12文件,请启动单行命令:

keytool -importkeystore -srckeystore [MY_FILE.p12] -srcstoretype pkcs12
 -srcalias [ALIAS_SRC] -destkeystore [MY_KEYSTORE.jks]
 -deststoretype jks -deststorepass [PASSWORD_JKS] -destalias [ALIAS_DEST]

字符串
您需要修改这些参数:

  • MY_FILE.p12:表示要转换的PKCS#12文件(.p12或.pfx扩展名)的路径。
  • MY_KEYSTORE.jks:您要存储证书的密钥库的路径。如果不存在,将自动创建。
  • PASSWORD_JKS:在密钥库打开时请求的密码。
  • ALIAS_SRC:与PKCS#12文件中的证书条目匹配的名称,例如“tomcat”。

如果您要从生成.PFX文件的Windows服务器导出证书,则必须检索Windows创建的“别名”名称。为此,您可以执行以下命令:

keytool -v -list -storetype pkcs12 -keystore FILE_PFX


在那里,“aliasname”字段指示您需要在命令行中使用的证书的存储名称。

  • ALIAS_DEST:与JKS密钥库中的证书条目匹配的名称,例如“tomcat”。
dfddblmv

dfddblmv2#

但他问如何将.p12转换为JKS,所以答案是:

keytool -importkeystore  -srckeystore mystore.p12 -destkeystore myotherstore.jks -srcstoretype PKCS12 -deststoretype jks -srcstorepass mystorepass -deststorepass myotherstorepass -srcalias myserverkey -destalias myotherserverkey -srckeypass mykeypass -destkeypass myotherkeypass

字符串
只是不得不用这句话,对我有用。

fumotvh3

fumotvh33#

我很惊讶为什么这么长时间没有人回答这个问题。无论如何,将p12转换为jks的最简单方法是使用Keytool。以下是您可能需要使用的命令:用途:

keytool -importkeystore  -srckeystore mystore.jck -destkeystore myotherstore.jks -srcstoretype jceks
-deststoretype jks -srcstorepass mystorepass -deststorepass myotherstorepass -srcalias myserverkey
-destalias myotherserverkey -srckeypass mykeypass -destkeypass myotherkeypass

字符串
我相信你所面临的问题可能是因为你没有提供Keypass。请注意,这是一个很好的做法,以保持相同的密码和storepass,因为有时服务器无法区分密码和storepass。

vd2z7a6w

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密钥库,然后还将密钥库中的导入密钥重命名为以所请求

#!/bin/bash

############### start of the execution ################
#Perform initial cleanup:
echo -e 'Cleanup of possibly existing temporary files...'
rm -f "${PKCS12_FILENAME}.pem"
#First delete also the result keystore if existing - there can be only one client certificate in client keystore, so any previous keystore content will be so deleted:
rm -f "${KEYSTORE_FILENAME}"
rm -f "JAVA_FULLY_COMPATIBLE_${KEYSTORE_FILENAME}"

echo -e 'Starting...'

#For export of the p12 certificate into pem format use following statement:
openssl pkcs12 -in "${PKCS12_FILENAME}" -out "${PKCS12_FILENAME}.pem" -descert -passin pass:"${PKCS12_PASSWORD}" -passout pass:"${PKCS12_PASSWORD}"

# Create Java-fully-compatible P12 certificate file:
openssl pkcs12 -export -out "JAVA_FULLY_COMPATIBLE_${PKCS12_FILENAME}" -in "${PKCS12_FILENAME}.pem" -passin pass:"${PKCS12_PASSWORD}" -passout pass:"${PKCS12_PASSWORD}"

#Now create the JKS keystore from the fully compatible PKCS12 certificate
${KEYTOOL_LOCATION}keytool -importkeystore -srckeystore "JAVA_FULLY_COMPATIBLE_${PKCS12_FILENAME}" -srcstoretype PKCS12 -srcstorepass "${PKCS12_PASSWORD}" -deststorepass "${KEYSTORE_PASSWORD}" -destkeypass "${PKCS12_PASSWORD}" -deststoretype ${KEYSTORE_TYPE} -destkeystore "${KEYSTORE_FILENAME}"

#Now rename the key in the keystore to the wished alias, the default created key is named "1"
${KEYTOOL_LOCATION}keytool -changealias -alias "1" -destalias "${ALIAS}" -keypass "${PKCS12_PASSWORD}" -keystore "${KEYSTORE_FILENAME}" -storepass "${KEYSTORE_PASSWORD}"

echo -e 'Keystore with following content created:'
${KEYTOOL_LOCATION}keytool -list -keystore "${KEYSTORE_FILENAME}" -storepass "${KEYSTORE_PASSWORD}"

echo -e 'Finished.'

字符串
例如,它的调用方式如下(上述脚本位于文件keystore-gen-tomcat-compatibility-mode.sh中):

#!/bin/bash
# Created with the help of following sources:
# https://stackoverflow.com/questions/16244182/need-help-converting-p12-certificate-into-jks

# Customize following properties to meet your needs
KEYTOOL_LOCATION="/usr/lib/jdk11.0/bin/"
PKCS12_FILENAME="my p12 certificate.p12"
PKCS12_PASSWORD="pkcspwd"
# possible values here are {jks|pkcs12}:
KEYSTORE_TYPE=jks
KEYSTORE_FILENAME="java_keystore.jks"
KEYSTORE_PASSWORD="jkspwd"
ALIAS=${PKCS12_FILENAME}

#performs the generation based on corresponding variables:
. ../../../common/certs/keystore-gen-tomcat-compatibility-mode.sh

相关问题