如何转换SSL证书格式

0
1749

如何将数字证书从一种文件格式转换成另一种,让我们来看看吧。

今天,我们将讲一些有些技术含量的问题,谈论如何将证书转换成正确的格式。尽管我们之前谈论过SSL证书的文件格式转换事宜,但是还是有很多人在问我们这一问题,而且我想要花一点时间来进行稍微深入一点的探讨。

这也意味着解决这一过程中不可避免的会出现的一些问题,比如我为什么不能使用转换器工具?以及什么是OpenSSL?

一旦我们解开了一切,这一问题就不会感觉那么艰巨了。因此,如果你准备好了学习如何将证书转换成正确的格式……

让我们开始吧。

我为什么需要知道如何转换SSL证书格式?

在我们谈论如何转换SSL证书格式之前,让我们首先从这意味着什么开始。我们经常使用的服务器类型有几十种,然而,不幸的是,并没有一种统一标准的文件类型。如果这让你感到烦恼,而你又是一个美国人的话,现在你就知道了,当必须把文件的公制单位转换成美国常用单位时,世界上其他国家的人是什么感受了,因为我们认为不以10为单位来计算的话更有运动精神。

不管怎样,服务器类型的多样性导致了人们需要使用多种不同格式的数字证书。现在,它们不全都是X.509证书吗?——你可能会这样问。嗯,是的。如果你想要我们这样做,我们可以写一整篇有关这一话题的文章,探讨Abstract Syntax Notatio和字节数组,但是,我有一种感觉,这篇文章的信息量会非常大,比你想象的还要多。因此,让我们概括一下吧:X.509证书是数字证书的一种类型,它使用了PKI(X.509 v3)来验证服务器是相关公有密钥的合法所有人。当你看到如下所示的扩展时:

  • .der
  • .pem
  • .crt .cer
  • .pkcs7
  • .p7b
  • .pkcs8
  • .pkcs12
  • .pfx .p12

这些指代的是证书是如何编码以及呈现的。因为没有一个更有说服力的定义,所以基本上,编码是将数据编程成可以为另一个系统所使用的格式。或者,更简单地来说,对数据进行编码,因此,计算机就可以读取和使用它。最常见的编码标准之一是ASCII或美国信息互换标准代码(一种比我们的测量系统更普遍存在的标准),这是一种用于包含文本的文件的编码方案。

现在,让我们来谈论一下编码样式。

  • .der—代表可区别编码规则,打开看是二进制编码格式。Windows会把这些看作是证书文件,并且实际上会将证书以.der格式文件导出,但是这一过程使用的是像.crt或.cer这样的扩展。
  • .pem—代表保密邮件,考虑到PEM基本上不能是实现本身功能,但却被证明在作为容器格式方面是很有用的,这是很有趣的。PEM文件是Base64编码后的DER文件。

我可以看到你脸上流露出来的困惑的表情,因此让我来进一步解释一下吧。

DER文件是以二进制——1和0——形式编码的X.509数字证书。Base64是一种二进制到文本的编码方案,因此PEM(一种Base64编码后的DER文件)也是这个相同的X.509证书,但是是在文本中编码的,而这个文本(记住!)是用ASCII码表示的。

现在,你弄懂一点了吗?

好的,让我们继续。

DER文件很少在Windows之外使用,因此我们将不再使用它们。还记得我们说过PEM是一个容器吗?这是因为它可以包含任何内容,无论是数字证书本身,还是整个证书链和密钥对。不幸的是,并不是所有的浏览器都会将扩展名为.pem的文件识别为证书,所以很多时候,在PEM文件(也是DER文件)的末尾你会看到一个不同的扩展名:

  • .cert
  • .crt
  • .cer

因此,讨论如何将证书转换为正确的格式,也就是讨论如何对它进行编码或进行表示。现在,除了PEM和DER之外,还有其他一些表示证书的方法。PKCS,或公钥加密标准,通常你可以看到PKCS 7、PKCS8和PKCS12。让我们从PKCS7开始,它最初是由公司RSA定义的,之后被移交给了IETF。它是一种多用途的格式,可以用于加密和签名数据的传播。它最终演变为了加密消息语法标准,但是就像SSL和TLS一样,PKCS7是我们仍旧在口头上所使用的名称。它是一个开放的标准,由Windows支持。但是需要注意的一点是,它不能包含私钥。PKCS7经常与电子邮件证书一起使用,并形成了S/MIME安全电子邮件的基础。

PKCS8是一个类似的标准,用于携带私钥。最后是PKCS12,它通过加密提供了更好的安全性。与PEM文件非常类似,它也可以包含一切事物,无论是单个证书,还是整个证书链和密钥对,但是,与PEM不同的是,它是一个完全加密的、有密码保护的容器。如果在生成SSL证书时,系统提示你输入密码,而且它又是PKCS12格式的,则可以使用它打开该证书。

如何转换SSL证书格式?

终于到了你最关心的一步了——如何转换SSL证书格式。目前我们可以通过两种方式来进行转换:

  • 方式一:使用在线转换工具:

这里我们推荐一款方便好用的在线转换工具:https://www.racent.com/cert-convert ,选择原需要转换的SSL证书原格式以及目标格式后,换要求上传上相关文件即可完成转换。非常简单!

  • 方式二:使用OpenSSL命令在你自己的服务器上进行。这就引出了下一个不可避免的问题……

什么是OpenSSL?

OpenSSL是一个软件库。计算机并不是生来就知道如何做。你必须教它。软件库是代码、脚本、配置和程序的一个集合,它可以帮助利用给定的函数。例如,如果你正在编写一款需要大量数学计算的软件,那么只需要添加一个数学软件库就可以了,这样你就不必自己再编写一大堆复杂的数学函数了。

现在将这个概念应用于SSL。OpenSSL是一个软件库,在几乎所有服务器上都支持SSL/TLS协议。是的,它无处不在。因此,虽然X.509证书可能没有通用的文件格式,但是至少有一种通用语言可以在服务器上操作它们。OpenSSL是用C语言编写的,这使得任何有编程基础知识的人都可以访问它。

因此,现在让我们来看看如何使用OpenSSL将转换证书格式。

将X.509转换成PEM——这决定了你想编码证书的方式(除非有特定的原因,否则不要选择DER)。

openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem

将DER转换成PEM——二进制编码到ASCII

openssl x509 -inform der -in certificatename.der -out certificatename.pem

将PEM转换成DER——ASCII到二进制

openssl x509 -outform der -in certificatename.pem -out certificatename.der

将PEM转换成PKCS7——PKCS7文件可以只包含容器证书和证书链,但永远没有私有密钥。

openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer

将PKCS7转换成PEM——记住,这一文件将不包括密钥对。

openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem

将PKCS12转换成PEM——也称为PFX,PKCS12容器可以包括证书、证书链和私有密钥。它们有密码保护,得到了加密。

openssl pkcs12 -in certificatename.pfx -out certificatename.pem

将PKCS12转换成PKCS8——PKCS8与PKCS7类似,只不过它针对的是私有密钥存储,并且可以用密码加密。

这需要两个步骤:

openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem

openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8

将PKCS7转换成PKCS12——这需要两个步骤,因为你将需要把私有密钥和证书文件结合起来。

openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer

openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile  cacert.cer

此外,不同的证书品牌在合并和转换证书时会有不同的操作要求,必盛云也为您整理了相关文章和介绍,您可以轻松了解:

LEAVE A REPLY

Please enter your comment!
Please enter your name here