Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何生成Java PKCS12存储以连接到常规SSL网站?_Java_Ssl_Public Key Encryption_Pkcs#12 - Fatal编程技术网

如何生成Java PKCS12存储以连接到常规SSL网站?

如何生成Java PKCS12存储以连接到常规SSL网站?,java,ssl,public-key-encryption,pkcs#12,Java,Ssl,Public Key Encryption,Pkcs#12,我们在https上运行标准的web API,并使用常规购买的SSL证书。我们的客户端只是通过https访问它,证书通过默认的系统RootCA受信任 一个新客户端正在使用一个Java通信服务器,该服务器需要PKCS12密钥库中的证书。如何从key/csr/crt/pem文件生成PKS12密钥库 我做了一些研究,大多数例子都需要私钥。当然,我不想与客户端共享我们的私钥 PKCS12密钥库是否可以在没有私钥的情况下创建,类似于浏览器中的标准RootCA 谢谢,蓝美洲狮是的 尽管PFX-now-PKCS

我们在https上运行标准的web API,并使用常规购买的SSL证书。我们的客户端只是通过https访问它,证书通过默认的系统RootCA受信任

一个新客户端正在使用一个Java通信服务器,该服务器需要PKCS12密钥库中的证书。如何从key/csr/crt/pem文件生成PKS12密钥库

我做了一些研究,大多数例子都需要私钥。当然,我不想与客户端共享我们的私钥

PKCS12密钥库是否可以在没有私钥的情况下创建,类似于浏览器中的标准RootCA


谢谢,蓝美洲狮是的

尽管PFX-now-PKCS12主要设计用于将私钥、证书和链证书作为一个束存储或传输,并且最常用于此,但它能够存储一个或多个与任何私钥不匹配的“单独”证书。您是对的,希望连接到您的客户端应该在其信任库中理想地拥有服务器证书链的根证书,或者服务器证书本身,但绝对不是您的私钥

openssl
实际上可以创建这样一个PKCS12:

 openssl pkcs12 -export -in certfile.pem [-name $name] -nokeys -out blah.p12 
 # if you don't specify -name it defaults to 1 (the digit one) which can be mildly confusing
 # instead of being prompted for the password you can use -passout with several forms
 # described on the openssl man page, but consider the warning below
但如果他们使用标准(Sun/Oracle/OpenJDK)加密提供程序,结果在Java中不起作用,该加密提供程序(在8+中)支持PKCS12中的孤立证书作为Java中的“trustedCert”项,前提是(每个)certbag有一个特殊的Sun定义的属性,Java提供程序在创建此类文件时编写该属性,但OpenSSL没有

相反在8:

jre8/bin/keytool -importcert -keystore blah.p12 -storetype pkcs12 -file $certfile [-alias $name]
或者在9+中,pkcs12现在是默认值:

jre9+/bin/keytool -importcert -keystore blah.p12 -file $certfile [-alias $name]
如果不指定别名,则默认为
mykey
。在这两种情况下,您都可以添加
-storepass$pw
,以避免提示输入密码,但因此密码将显示在您的屏幕上,在shell或其他命令处理器的命令历史记录中,它有一个密码,并且在大多数情况下,密码会同时运行到系统上的其他进程(其中任何一个),这可能是安全问题,也可能不是。您还可以添加
-noprompt
以避免出现确认提示


但是user207421(大致上)是正确的,使用这样一个信任库可以中断从他们的系统建立的其他SSL/TLS连接,至少是从同一个JVM建立的,除非单独的调用指定单独的、独立的信任库,并且如果他们已经编码,他们将知道如何处理(并要求)更简单的证书格式,例如PEM。

没有PKCS#12证书。然而,PKCS#12密钥库或信任库是存在的。是哪一个?具体点。谢谢你指出这一点。客户刚刚声明他们需要PKCS12格式的证书。这是否回答了您的问题?在我脑海中,openssl pkcs12-in cert.crt-inkey key-out-export cert.p12应该已经关闭了。有时,LMGTFY链接是合适的答案……如果您是服务器,而客户机是客户机,那么他们需要的是PKCS#12信任库。仅由导出的证书组成,没有私钥。但他们真正需要的是将您的证书(按原样提供)导入到他们现有的信任库中,以便继续访问他们的其他站点。更好的是,您需要获得由他们已经信任的CA签署的服务器证书。正如你看起来已经做到的那样,新客户已经做了一些错误,你没有责任去纠正。他们的要求考虑不周。