我正在尝试使用Web服务,但我对证书有很多疑问,我在这个主题上相当新手,开发Web服务的团队向我发送了一个文档,其中解释了如何使用它,但是启用连接,我需要使用证书(X.509),我从他们的网站生成p7b证书,我在我的本地环境中导入了该证书,使用Keytool -import生成一个JKS文件,但他们警告我应该安装“委托他们提供给我的“(根和中级)证书我使用了keytool -import和这些.cer文件,并且命令为每个文件生成了一个.JKS,我也安装了这些cer,我的问题是:
使用该Web服务我需要在java的实现逻辑中附加哪个证书文件,jks或p7b?
如何在所有测试环境中使用此证书? (我不知道此证书是否只能在生成CSR的PC中使用。)
我正在尝试使用SOAPUI应用程序模拟调用我收到了身份验证错误,因此可能会出现问题。
他实现了所有使用Windows证书存储和.NET的功能,他们无法支持我对keytool的支持。
答案 0 :(得分:1)
要在SSL / TLS中执行客户端身份验证(也称为相互身份验证),您(您的程序)不仅需要证书,还需要证书PLUS PRIVATE KEY ,通常是中间人/链证书。规范中有5个步骤:
在您的计算机上生成一个密钥对,其中包含一个私钥和一个公钥,以及一个包含公钥的证书签名请求(CSR)。这些步骤可以单独完成,也可以以您没有注意到CSR和私钥的方式组合。
将CSR提交给证书颁发机构(CA)以及适当的身份和授权证明,并在CA要求时付款。
CA颁发一个“终端实体”证书(在本例中为客户端证书),其中包含您的公钥和身份以及其他一些信息并提供此证书,通常还附带中间证书或有时一些中间证书,形成从实体证书到可信CA根或锚证书的“链”。 'p7b'文件是运输一组相关证书的一种相当常见的方式,但不是唯一的方式,例如您的实体证书和链证书。
您将实体证书和链证书返回到您的计算机,并与步骤1中的私钥结合使用。
您使用privatekey PLUS证书链与各种程序的组合,例如浏览器,curl
等实用程序或自定义应用程序。
步骤1和4(和5)的详细信息取决于您使用的系统和软件,您没有以任何可识别的方式指定,尽管听起来您最终会进入Windows证书存储区。如果是这种情况,并且它特别是当前用户商店的个人部分(而不是像SYSTEM这样的机器帐户),那么当您运行MMC(又名管理工具)并选择Cert Mgr addin时,或者直接运行certmgr.msc
,证书的图标左边应该有一个黄色键:
与您的Q相反,Java JCE(至少是Windows上的Oracle-Sun-Java)可以处理这个问题;运行keytool -list -storetype Windows-MY -keystore NONE
并亲眼看看。
但是,一些(可能很多)Java 程序不能。对于那些,您需要一个包含privatekey PLUS证书的密钥库文件;要创建运行导出向导并选择“是,导出私钥”,然后使用“include ... path”格式化PKCS 12(也称为PFX)。
默认情况下,Java 8的最新更新可以自动处理PKCS12密钥库(在keystore.type.compat=true
中查找JRE/lib/security/java.security
),如果程序配置了商店类型,则旧版本可以这样做(我不知道)如果SoapUI那样做)。对于需要JKS的旧版本,在导出到PKCS12后让我们说mykey.p12
转换为
keytool -importkeystore -srcstoretype pkcs12 -srckeystore mykey.p12 -destkeystore mykey.jks
答案 1 :(得分:-1)
您尝试归档的内容称为相互身份验证。为了理解基础知识,您需要了解人类只是通过相同的(对称)密码来隐藏密码来锁定和解锁信息。知道一个密码的每个人都可以
最后,他们发明了证书来简化流程。证书包含打包到文件中的强密码。如果密码是私有的还是公共的,你不知道你不知道的证书,这意味着p7b(pkcsv7b)和jks可以包含绝对相同的信息。不同之处仅在于格式,例如.doc
和.docx
之间的差异。
在大型日本战争中,战争是一件大事,代理人在策略上收集了相反的信息,并将这些信息传递给他们真正的领主,以找到战术/策略中的弱点。无论什么时候发现一个腐败物,他都会变成一个双重伪造的蜜罐,让军阀做出错误的决定并陷入陷阱。
所以作为一个军阀,你必须相信你的经纪人...但是,如何确定?好吧,你可以向其他代理询问你有这些信息的代理,以保证信息可以被信任。所以第一个代理商也必须要求其他代理商签署消息,代理商之间的这个问题就是CSR!如果其他代理商也签字,我们就会有一个信任链#34;好的,我们现在有四方,代理人,签名代理人(黑客)和你。
必须放在哪里?好吧,假设你是一个军阀(服务器),
假设您是enemys行(万维网的开放字段)内的军阀的代理(客户端/浏览器),您必须存储:
您现在已经了解到证书可以包含私钥和公钥。如何在技术上使用它们?
你很幸运,keytools是开源的,从grepcode(click here)下载源代码,你将通过复制和粘贴实现你的实现。
相互身份验证的一些提示:
服务器不应提供其公共证书,因为所有经过身份验证的客户端都已在其信任库中拥有公共证书(密钥)。
客户的证书应以非电子方式发送(以rf代码或其他形式打印)。
客户端应以两个单独的物理信件显示服务器的公钥和客户私钥(如果您使用电子现金卡(ec卡),您可能会注意到您有两个字母,一个用于PIN,另一个用于ec卡。