SSL证书X.509导出

时间:2017-08-25 14:10:02

标签: java ssl

我正在尝试使用Web服务,但我对证书有很多疑问,我在这个主题上相当新手,开发Web服务的团队向我发送了一个文档,其中解释了如何使用它,但是启用连接,我需要使用证书(X.509),我从他们的网站生成p7b证书,我在我的本地环境中导入了该证书,使用Keytool -import生成一个JKS文件,但他们警告我应该安装“委托他们提供给我的“(根和中级)证书我使用了keytool -import和这些.cer文件,并且命令为每个文件生成了一个.JKS,我也安装了这些cer,我的问题是:

  • 使用该Web服务我需要在java的实现逻辑中附加哪个证书文件,jks或p7b?

  • 如何在所有测试环境中使用此证书? (我不知道此证书是否只能在生成CSR的PC中使用。)

我正在尝试使用SOAPUI应用程序模拟调用我收到了身份验证错误,因此可能会出现问题。

他实现了所有使用Windows证书存储和.NET的功能,他们无法支持我对keytool的支持。

2 个答案:

答案 0 :(得分:1)

要在SSL / TLS中执行客户端身份验证(也称为相互身份验证),您(您的程序)不仅需要证书,还需要证书PLUS PRIVATE KEY ,通常是中间人/链证书。规范中有5个步骤:

  1. 在您的计算机上生成一个密钥对,其中包含一个私钥和一个公钥,以及一个包含公钥的证书签名请求(CSR)。这些步骤可以单独完成,也可以以您没有注意到CSR和私钥的方式组合。

  2. 将CSR提交给证书颁发机构(CA)以及适当的身份和授权证明,并在CA要求时付款。

  3. CA颁发一个“终端实体”证书(在本例中为客户端证书),其中包含您的公钥和身份以及其他一些信息并提供此证书,通常还附带中间证书或有时一些中间证书,形成从实体证书到可信CA根或锚证书的“链”。 'p7b'文件是运输一组相关证书的一种相当常见的方式,但不是唯一的方式,例如您的实体证书和链证书。

  4. 您将实体证书和链证书返回到您的计算机,并与步骤1中的私钥结合使用。

  5. 您使用privatekey PLUS证书链与各种程序的组合,例如浏览器,curl等实用程序或自定义应用程序。

  6. 步骤1和4(和5)的详细信息取决于您使用的系统和软件,您没有以任何可识别的方式指定,尽管听起来您最终会进入Windows证书存储区。如果是这种情况,并且它特别是当前用户商店的个人部分(而不是像SYSTEM这样的机器帐户),那么当您运行MMC(又名管理工具)并选择Cert Mgr addin时,或者直接运行certmgr.msc,证书的图标左边应该有一个黄色键:

    certmgr with privatekey

    与您的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)

您尝试归档的内容称为相互身份验证。为了理解基础知识,您需要了解人类只是通过相同的(对称)密码来隐藏密码来锁定和解锁信息。知道一个密码的每个人都可以

  1. 阅读消息
  2. 重写消息以发送虚假信息
  3. 这很危险。因此,他们发明了两个不同的密码,一个用于写入(私有),另一个用于接收(公共),我们称之为不对称。不对称加密的问题是,你可以选择只有一个密码,相反的密码是计算出来的,不能自由选择。

    最后,他们发明了证书来简化流程。证书包含打包到文件中的强密码。如果密码是私有的还是公共的,你不知道你不知道的证书,这意味着p7b(pkcsv7b)和jks可以包含绝对相同的信息。不同之处仅在于格式,例如.doc.docx之间的差异。

    第二个问题

    在大型日本战争中,战争是一件大事,代理人在策略上收集了相反的信息,并将这些信息传递给他们真正的领主,以找到战术/策略中的弱点。无论什么时候发现一个腐败物,他都会变成一个双重伪造的蜜罐,让军阀做出错误的决定并陷入陷阱。

    所以作为一个军阀,你必须相信你的经纪人...但是,如何确定?好吧,你可以向其他代理询问你有这些信息的代理,以保证信息可以被信任。所以第一个代理商也必须要求其他代理商签署消息,代理商之间的这个问题就是CSR!如果其他代理商也签字,我们就会有一个信任链#34;好的,我们现在有四方,代理人,签名代理人(黑客)和你。

    必须放在哪里?好吧,假设你是一个军阀(服务器),

    1. 您需要信任库中所有客户端(代理商)的公共密码才能向他们发送消息(下载),
    2. 您需要知道您的私人密码,以对代理发送的邮件(帖子,请求,上传)进行编码。
    3. 假设您是enemys行(万维网的开放字段)内的军阀的代理(客户端/浏览器),您必须存储:

      1. 您的私钥,用于发送消息和签署其他座席的消息
      2. 军阀的公钥,用于编码主人的命令。
      3. 您现在已经了解到证书可以包含私钥和公钥。如何在技术上使用它们?

        你很幸运,keytools是开源的,从grepcode(click here)下载源代码,你将通过复制和粘贴实现你的实现。

        相互身份验证的一些提示:

        1. 服务器不应提供其公共证书,因为所有经过身份验证的客户端都已在其信任库中拥有公共证书(密钥)。

        2. 客户的证书应以非电子方式发送(以rf代码或其他形式打印)。

        3. 客户端应以两个单独的物理信件显示服务器的公钥和客户私钥(如果您使用电子现金卡(ec卡),您可能会注意到您有两个字母,一个用于PIN,另一个用于ec卡。