我正在尝试连接到SSL服务器,这需要我进行身份验证。 为了在Apache MINA上使用SSL,我需要一个合适的JKS文件。 但是,仅给我一个.PEM文件。
如何从PEM文件创建JKS文件?
可能该链接会有所帮助:http://www.agentbob.info/agentbob/79-AB.html
首先,将您的证书转换为DER格式:
openssl x509 -outform der -in certificate.pem -out certificate.der
然后,将其导入密钥库中:
keytool -import -alias your-alias -keystore cacerts -file certificate.der
你的为我工作,其他人没有。
如果.pem文件包含多个证书,则无法使用。
香港专业教育学院只有一个证书。pem,这是行不通的。 1795:错误:0906D06C:PEM例程:PEM_read_bio:无起始行:/ usr / src / secure / lib / libcrypto /../../../ crypto / openssl / crypto / pem / pem_lib.c:648:正在检查:可信证书
@Brian Knoblauch错误有解决方案吗?
我找到了解决方案。将根证书和中间证书预先附加到.pem,然后进行转换。
@Anthony此命令仅告诉如何将PEM导入JKS。添加从商店导出JKS的命令可能是一个好主意。
如果.pem上有多个证书,如何导入Java密钥库?
如果您只想将PEM格式的证书导入密钥库,则keytool将完成此工作:
keytool -import -alias *alias* -keystore cacerts -file *cert.pem*
如果我这样走,我得到一个错误:keytool错误:java.lang.Exception:输入的不是X.509证书
如果它确实是X.509格式的证书,则该命令正在起作用...
@frandevel,此错误可能是由于PEM输入文件的标题高于--- BEGIN分隔符或在一个文件中包含多个PEM或两者引起的。要么一次删除所有无关的数据,然后一次输入每个PEM,要么使用我的工具,如我的答案中所述。
谢谢@Fuzzyfelt,虐待看一下
同样的问题,.PEM文件干净,带有所有适当的头。
我已经开发了http://code.google.com/p/java-keyutil/,可将PEM证书直接导入Java密钥库中。其主要目的是导入多部分PEM操作系统证书捆绑包,例如ca-bundle.crt。这些通常包括keytool无法处理的标头
这不是一个不好的玩具项目,但是keytool已经为您(以及更多)完成了所有这一切。 (顺便说一句,如果发生异常,则应该关闭FileOutputStream,并关闭finally中的I / O流。)
嗨,布鲁诺,谢谢你的提示。真正的用例是一次性导入/etc/pki/tls/certs/ca-bundle.crt(RHEL / CentOS)的所有条目。 AFAIK,keytool将仅导入第一个条目。我已经看到许多人以不同的方式执行此操作,但是通常涉及为每个证书多次调用keytool。 Ubuntu有一个完全可以执行此操作的更新脚本,只是Ubuntu将其证书存储在目录中。在不久的将来会增加对目录的支持。再次感谢您检查代码。
在我的情况下,我有一个pem文件,其中包含两个证书和一个用于相互SSL身份验证的加密私钥。
所以我的pem文件看起来像这样:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,C8BF220FC76AA5F9
...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
这是我所做的
将文件分成三个单独的文件,以便每个文件仅包含一个条目,
以---BEGIN..开头并以---END..行结尾。假设现在有三个文件:cert1.pem,cert2.pem和pkey.pem。
使用openssl和以下语法将pkey.pem转换为DER格式:
openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER
请注意,如果私钥已加密,则需要提供密码(从原始pem文件的供应商处获取)以转换为DER格式,
openssl将询问您这样的密码:"输入pkey.pem的密码:"。
如果转换成功,您将获得一个名为pkey.der的新文件。
创建一个新的Java密钥库并导入私钥和证书:
String keypass ="password"; // this is a new password, you need to come up with to protect your java key store file
String defaultalias ="importkey";
KeyStore ks = KeyStore.getInstance("JKS","SUN");
// this section does not make much sense to me,
// but I will leave it intact as this is