数字证书格式转换

摘要

  公钥加密技术12号标准(Public Key Cryptography Standards #12,PKCS#12)为存储和传输用户或服务器私钥、公钥和证书指定了一个可移植的格式。它是一种二进制格式,这些文件也称为PFX文件。开发人员通 常需要将PFX文件转换为某些不同的格式,如PEM或JKS,以便可以为使用SSL通信的独立Java客户端或WebLogic Server使用。本文描述如何从PFX文件导出私钥、公钥和证书并用它们创建JKS或PEM文件。

简介

  创建的PFX证书通常用来满足两个目的:

  1. 客户端证书:该证书通常安装在客户端的浏览器上,向其他终端的服务器提供用户身份。它还向服务器提供一个公钥和证书。服务器将使用该公钥来加密这些两个端点之间的任何数据交换。
  2. 服务器证书:该证书将安装在服务器端,向尝试建立连接的客户端提供服务器身份、证书和公钥信息。使用证书和公钥来进行客户端和服务器之间的信息交换和进一步的数据加密。

  不过,PFX并不是惟一使用的证书格式。我们来看看以下几种格式。

  • 增强型私人邮件(Privacy Enhanced Mail,PEM)格式现在更多地用作密钥格式,并且可以包含私钥(RSA和DSA)、公钥(RSA和DSA)和x509证书。它存储ASCII头部包装 的Base64编码DER格式的数据,所以它适用于系统之间的文本模式传输。
  • 分布式编码规则(Distinguished Encoding Rules,DER)格式也可以包含私钥、公钥和证书。它是大多数浏览器的默认格式,并且按照ASN1 DER格式进行存储。它没有头部——PEM是文本头部包装的DER。

  WebLogic Server除了证书库之外,不需要特定的证书格式。在WebLogic Server上安装SSL需要Java密钥库(Java Key Store,JKS)文件中存储的服务器证书。JKS文件仅用于存储服务器证书、私钥、公钥和身份证书。

   以下是我们需要从PFX证书格式转换时的两种情况:

  1. 将服务器证书(私钥、公钥、身份证书等)从PFX文件导入到JKS文件,以便在Java密钥库(Java Key Store,JKS)中使用它来安装WebLogic Server SSL。有时服务器证书是PFX格式的,要在WebLogic Server中利用相同的证书,我们需要将其证书导出到JKS文件库。
  2. 通过Java客户端调用双向SSL认证的web服务,需要PEM格式的客户端证书。同样地,通过Java客户端调用双向SSL认证的servlet也需要PEM格式的客户端证书。

  现在,让我们来看看如何执行这些转换。

要求

  要执行以上任务,我们必须先设置以下项目:

  • 经过域配置的WebLogic Server版本8.1或9.1。
  • 安装的OpenSSL(www.openssl.org)。
  • 可用的Java keytool(JDK中随附)。
  • PFX格式的源证书。
  • 文本编辑器。

将PFX私钥和证书导入到JKS

  在本节中,我们将会看到如何从PFX文件导出服务器的私钥、公钥、身份证书和CA证书,并将这些组件导入到JKS文件,以便在WebLogic Server中使用它来安装SSL。要在WebLogic Server中安装SSL,需要两个JKS文件库:一个称为信任密钥库(Trust Key Store),另一个称为身份密钥库(Identity Key Store)。您需要执行以下三个步骤来完成该任务:

1. 将不同证书从PFX导出到PEM

  运行<OpenSSL>/bin文件夹的openssl二进制文件。它将启动OpenSSL命令提示符。执行以下命令:

    pkcs12 -in MYCERTS.pfx -out MYCERTS.pem -nodes

  这会将MYCERTS.pfx文件中的数据转换为PEM格式,并将转换结果放置在MYCERTS.pem文件中。得到的文件将具有按以下顺序排列的所有证书:

  • 私钥
  • 身份证书
  • 根证书
  • 中间证书

  注意,所有证书(私钥、身份证书、根证书和中间证书)都包装在某些头部中,这些头部是证书的一部分。

2. 创建信任Java密钥库(Trust Java Key Store,Trust JKS)

  现在您需要从得到的PEM文件中抽取根证书并使用它创建Trust JKS:

  1. 在文本编辑器中打开MYCERTS.pem文件,将根证书复制并粘贴到一个新文件中,该文件名为my_key_root.pem。由于根文件的issuer和subject头部必须相同,所以您可以容易地找到根文件。
  2. 使用Java密钥工具实用程序将以上my_key_root.pem文件导入到JKS文件:
keytool -import -trustcacerts -file 
my_key_root.pem -alias my_key_root
-keystore my_key_trust.jks -storepass
<trust key store password>

  得到的JKS在WebLogic Server中可以用作信任密钥库(Trust Key Store)。

3. 创建身份Java密钥库(Identity Java Key Store)
  1. MYCERTS.pem文件中,复制私钥并将其粘贴到一个不同的文件中,该文件名为my_key_pk.pem。由于私钥包装在以下两个头部中,所以很容易识别私钥:
    -----BEGIN RSA PRIVATE KEY-----
    -----END RSA PRIVATE KEY-----
  2. MYCERTS.pem文件中,复制以下证书并将其粘贴到一个新的文件中,该文件名为my_key_crt.pem
    • 身份证书
    • 中间证书
    • 根证书

      注意,证书必须按照以上所列顺序排列。由于文件中必须具有显示身份信息的头部,如个人或组织的名称、地址等,所以可以容易地在MYCERTS.pem文件中查找身份证书。中间证书是MYCERTS.pem文件中的最后一个证书。

  3. 现在设置WebLogic环境并运行以下命令:
    java utils.ImportPrivateKey -keystore <new JKS file> -storepass
    <new storepass> -storetype JKS -keypass <new key pass> -alias
    <new alias name> -certfile my_key_crt.pem -keyfile my_key_pk.pem
    -keyfilepass <PFX key password>

      这将创建一个可在WebLogic Server中使用的JKS文件。注意,您可以使用上面提及的utils.ImportPrivateKey命令将许多私钥导入到一个密钥库中。有关utils.ImportPrivateKey的详细信息,请参阅术语词汇表

  4. 注意,此处可能会有无法找到 utils.ImportPrivateKey 的异常,主要可能有两方面的原因:
    1.weblogic license 不对,需要正版
    2.需要运行如下文件:bea/weblogic81/server/bin/setWLSEnv.cmd

    将PFX转换到双向SSL认证的PEM证书格式

      通过Java客户端调用双向SSL认证的web服务,需要Java客户端具有PEM格式的证书——并且它必须包含正在调用的用户的私钥。下面,我们将假设用户浏览器中已经安装了客户端证书。在这种情况下,用户可以按照以下详细步骤导出证书。

    1. 将客户端证书从浏览器中导出并保存在MYCERTS.pfx文件中。请按照以下给出的步骤执行操作,该步骤适用于Internet Explorer浏览器(在其他浏览器上也执行类似步骤):
      1. 转到Internet Explorer -> Tools -> Internet Options -> Content选项卡。

        使用带密钥库的PFX和PEM证书格式图-1

      2. 按Certificates按钮并转到Personal选项卡。

        使用带密钥库的PFX和PEM证书格式图-2

      3. 选 择要导出的证书并按export按钮。点击“next”,然后选择“Yes, export the private key”单选按钮。按“next”并勾选“Include all certificates in the certificate path if possible”。

        使用带密钥库的PFX和PEM证书格式图-3

      4. 下一页面将询问您提供保护私钥的密码。输入密码之后,就可以将证书保存到文件中。
    2. 现在打开OpenSSL命令提示符并执行以下命令:
    openssl pkcs12 -in MYCERTS.pfx -out MYCERTS.pem -nodes

      这会将PFX格式转换到PEM格式。MYCERTS.pem将具有以下按以下顺序排列的所有证书:

    • 私钥
    • 身份证书
    • 根证书
    • 中间证书

        从MYCERTS.pem文件中,使用重新排序的证书(仅仅通过复制和粘贴)创建一个新文件(名为my_key_crt.pem)。顺序很重要,否则宿主服务器将无法识别证书:

    • 身份证书
    • 中间证书
    • 根证书
    • 私钥

      现在,Java客户端可以直接使用my_key_crt.pem来调用SSL认证的web服务。

    结束语

      本教程对如何执行以下两个任务进行了讲解:

    • 从PFX服务器证书文件导出私钥、身份证书、中间证书和根证书,然后将它们导入到可以在单向SSL配置的WebLogic Server中使用的JKS文件。如果用户想要利用WebLogic Server中现有的PFX格式证书,这非常有用。
    • 将现有的客户端证书从PFX格式转换到可以在双向SSL通信中被Java客户端使用的PEM格式。

    参考资料

      以下产品文档链接提供了有关在WebLogic Server上配置SSL的其他信息:

    • 说明如何为WebLogic Server配置密钥库的演示文稿

    术语词汇表

      OpenSSL:该工具包提供全球范围全强度加密技术的SSL和TLS协议的实现。它还提供了转换不同格式(即从PFX到PEM)证书的功能。

       Java keytool: 这是密钥和证书管理工具。它还管理一个存储了私钥和验证相应公钥的与它们相关联的X.509证书链的密钥库(数据库)。它能够使用户使用数字签名来管理他 们自己的公/私钥对,管理用来作自我验证的相关联的证书(用户对其他用户/或服务进行自我验证),或管理数据完整性和验证服务。

       根证书:在密码技术和计算机安全中,根证书是未经签署的公钥证书或自我签署的证书,它是公钥基础设施方案的一部分。

       身份证书:在加密技术中,公钥证书(或身份证书)是使用数字签名来约束带有身份信息(如个人或组织的名称、地址等)的公钥的证书。该证书可以用于验证属于个人的公钥。

       中间证书:中间证书是由受信根证书发布的从属证书,更确切地说是发布终端实体服务器证书。证书链从受信的根CA开始,通过中间证书,到发布给用户的SSL证书结束。这样的证书称为链接的根证书。

       私钥/公钥:使 用私钥/公钥对编码可确保数据由一个密钥加密且只能由另一个密钥对解密。这两个密钥实质上是类似的,可以相互交换使用:一个密钥用于加密,另一个密钥对用 于解密。密钥对基于素数和它们的位的长度,可确保在没有密钥对时无法解密消息。密钥对的窍门是保持一个密钥是秘密的(私钥),同时将另一个密钥(公钥)分 发给其他人。然后任何人可以发送给您一个只有您可以解密的加密消息。

       WebLogic ImportPrivateKey:ImportPrivateKey实用程序用于将私钥加载到私钥库文件中。该实用程序与WebLogic服务器安装捆绑在一起,您需要设置执行该实用程序的域环境(Domain_Dir/setEnv)。有关更多信息,请访问文档

     作者简介
     Arvind Tiwari 在BEA Backline Support for WebLogic Server团队中任职DRE(开发人员关系工程师)。
     
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值