如何从Certificate(.cer),证书链(.p7b)和key(.key和.pem)生成keystore.p12

时间:2019-10-07 14:29:34

标签: ssl openssl keystore

我有以下文件:

  • filename.key(RSA专用密钥)
  • filename.pem(证书要求)
  • certificate.cer(CERTIFICATE)
  • CertificateChain.p7b

我已经从CA收到了这些文件,包括证书链。 我需要生成“ keystore.p12”以使用以下信息为春季启动应用程序配置SSL。

 server:
    port: 443
    ssl:
        key-store: keystore.p12
        key-store-password: <your-password>
        keyStoreType: PKCS12
        keyAlias: <my alias>

有人可以帮助我生成“ keystore.p12”吗?

1 个答案:

答案 0 :(得分:0)

文件扩展名实际上并不控制文件的格式或内容,尽管通常它们应该应该至少提供 partial 描述。类似地,基名称(在扩展名之前)应该描述文件中的内容,但不一定总是正确。重要的是文件中的内容。

.key通常用于一个单独的私钥,但是请确保使用该私钥,并要确定它的格式,因为它有很多。您应该从不从CA获取您的私钥;它应在本地生成,通常在将使用它的计算机上生成,至少应由该计算机的“所有者”或管理员生成。如果您谈论的是公司,组织,代理机构或办公室内部的CA,则可能会出现某种例外情况-在这种情况下,运行CA的人可能是负责所有计算机安全性的人-或反之亦然,这取决于您的观点-对他们而言,既生成密钥又生成证书可能是有意义的。

.pem用于PEM format中的很多内容,该文件的内容是(或现在)是什么,而不是它是PEM。查看第一行-----BEGIN (somewords)-----,看看什么是字。应该紧跟在base64中的数据(由字母,数字和特殊字符+/-组成的实心块)之后,或者紧跟几行标题行之后,然后是匹配的-----END (somewords)-----行。如果在END行后接另一个或多个类似的块,请查看所有这些块。

.cer通常用于“ DER”(二进制)或“ PEM”(如上所述)格式的证书。 .p7b类似地用于包含证书(特别是链中使用的证书)的DER或PEM中的“虚拟” PKCS7消息。更重要的是,p7b有时用于整个链包括终端实体(服务器)证书,有时用于链的其余部分 EE证书,这很重要哪一个。如果您拥有OpenSSL(或者可以通过OpenSSL获得(例如,通过安装软件包或对于Windows,我建议从http://www.slproweb.com/products/Win32OpenSSL.html下载安装程序)),或者可以将数据移动到具有它的计算机上,则可以:

 # if the p7b file is in PEM format (you can see ----BEGIN PKCS7----- line)
 openssl pkcs7 -in file.p7b -print_certs 
 # if the p7b file is in DER format (looks like garbage in a text editor or display)
 openssl pkcs7 -in file.p7b -inform der -print_certs
 # for now look only at the subject= and issuer= lines to see
 # for each cert in the file who it is for, and if/how they chain

然后:

  • 如果.key文件是OpenSSL支持的PEM格式之一的私钥,则可以使用它;否则,如果.key是某种其他格式的私钥,或者.pem是或包含某种格式的私钥,则需要转换和/或提取它:向我们详细说明这些文件的外观喜欢。

  • 如果.p7b文件为PEM或DER格式,则将其扩展输出(从上方)放入文件中。如果其中包括EE证书,请跳过下一步。

  • 如果.p7b文件不包含EE证书,但是.cer文件就是该证书,如果采用PEM格式,只需将其附加到包含.p7b的文件中输出;如果为DER格式,请用openssl x509 -in file.cer -inform der进行转换,然后附加 that

  • 如果您现在拥有OpenSSL支持的一种PEM格式的私钥,以及包含PEM格式的EE证书的证书链,请

    openssl pkcs12 -export -in chain.pem -inkey key.pem -out newfile.p12 [-name x]
    # the -name option provides the 'alias' used by Java
    # if not specified it defaults to the numeral 1 (one)