[.pem/.crt]为什么证书和私钥的扩展名不同?

大家好。
我在系统解决方案部门工作,休息日每天睡大约12个小时。
我很佩服那些睡眠时间短的人。

本文是前一篇文章“使用 openssl 命令检查 SSL 证书”的衍生文章。

在下文“◯ 本文使用的扩展名”部分,我们已明确列出了所使用的扩展名。
之所以写这篇前言,是因为“证书和密钥的扩展名可能因环境和用户而异”。

如何使用 openssl 命令/选项解释检查证书完整性和验证结果

有些人可能会疑惑为什么证书和私钥的扩展名有时不同,所以我们想解释一下它们不同的原因,
包括类型和数据格式。

如何回应的问题。

执行环境

  • Linux 环境
    :操作系统:AlmaLinux 8.5 版(WSL2 环境);
    Shell:Bash;
    OpenSSL 1.1.1k;FIPS 版本:2021 年 3 月 25 日
  • Windows 环境
    :操作系统:Windows 11 专业版(版本:22H2)
    将语言设置更改为日语

“指示编码格式的扩展名”和“指示内容的扩展名”

如果网站或环境发生变化,所使用的 SSL 证书和私钥的扩展名也可能会发生变化。

它们可能统一为“.pem”或“.der”,也可能分为“.crt”和“.key”等等——
或许它们都混杂在一起。

这是因为,正如标题中所述,有些扩展名表示编码格式(.pem、.der),有些扩展名表示内容(.crt、.key)。

“指示编码格式的扩展名”(.pem)(.der)

这是一个用于指示编码(编码/转换)格式的扩展名。

因此,如果它通常用于证书和私钥,则需要根据其文件名和内容来确定它。

“.pem”扩展名表示文件采用PEM格式编码,“.der”扩展名表示文件采用DER格式编码。

我们将解释这些常见的编码格式。

德尔

ASN.1 是一种用于在网络通信中定义数据结构的标准表示法。

DER 格式是将遵循此表示法的数据转换为二进制数据的格式之一。

似乎有些老旧软件只支持 DER 格式的证书。

它通常用于Windows(操作系统方面)。

质子交换膜

常用的 PEM 格式是上述 DER 格式的 Base64 编码。

Base64 格式是一种数据表示方法,它使用大写和小写字母和数字,
本质上是将数据转换为字符串(文本)。

PEM 格式以字符串“-----BEGIN(内容名称)-----”
开头,以字符串“-----END(内容名称)-----”结尾,
内容的二进制数据以 Base64 编码的形式写入两者之间。

使用 Base64 编码具有以下优点:

易于编辑

由于它是文本数据,因此可以使用文本编辑器轻松显示和编辑。

对于 DER 来说,需要二进制编辑器,这使得编辑和检查变得困难。

・可连接

这种分隔符格式的显著特点是可以在一个文件中存储多条数据。

上一篇文章,我们解释了从 Apache 2.4.8 开始,证书和中间证书被集成在一起

PEM格式的优势在于它允许将证书、中间证书和私钥合并到一个文件中。
*但是,它们的合并顺序是固定的。

PEM 格式是“openssl”(Linux 上常用的 SSL 软件)的默认设置。

因此,它是一种容器格式,可以以 Linux 环境中常见的格式存储多种数据。

提示:证书标准

证书基本上基于名为 X.509 的公钥基础设施标准。

ANS.1 表示法是用于定义本标准中规定的数据结构的格式。

X.509 最初是由 ITU 制定的数字证书标准,但
现在指的是 IETF 制定的 RFC5280 标准。

“表示内容的扩展名”(.crt)(.key)等。

这是一个用于指示内容(角色)的扩展名。

*扩展程序方面有相当大的自由度,因此有多种类型。

.crt /.cer

用于表示证书的扩展名。

.crt 通常用于 Linux 环境中,
当证书颁发机构(例如 digicert)为 Apache + OpenSSL 配置颁发证书时,会使用此扩展名。

.cer 通常用于 Windows 环境,
有时也用于由 Digicert 等证书颁发机构颁发的 Microsoft IIS 配置证书。

通常情况下,文件扩展名会根据环境而有所不同,
但无论扩展名是什么,其中的数据都可以是 DER(二进制)或 PEM(文本)格式。

。钥匙

这是私钥常用的扩展程序。

更新过程中通常不会修改这一点,但
通常会使用“.pub”来表示公钥,以区别于私钥。

.ca

这是中级证书常用的扩展名。

然而,作者的印象是,有些情况下 .crt 用于证书,而 .cer 用于中间证书,因此它
不像证书扩展名那样常用。

+α:表示证书的扩展名(.p7b)(.p12)

这些被归类为“指示内容的扩展”,但
许多软件程序不支持它们,而且它们在 Linux 环境中通常不经常使用。

我们将它们分开解释,因为我们觉得如果用同一个标题来解释它们,会很难理解。

*它也适用于macOS。

蛋白激酶

有一套公钥密码学标准,称为 PKCS(公钥密码学标准)。

PKCS#7 和 PKCS#12 是与证书相关的标准,
它们的扩展名分别是 .p7b 和 .p12。
*严格来说,PKCS#12 还有 .pfx 等扩展名,但我们在这里不做解释。

它不是定义证书的标准,而是定义存储(容器)证书的数据格式。

这些格式受 Microsoft IIS(Windows Web 服务器)支持,
因此经常用于 Windows Server 环境中。

也可以使用 OpenSSL 命令将其转换为 PEM 格式。

.p7b

这是使用 PKCS#7 加密标准创建的证书。

可以将证书和中间证书(加上根证书)合并为一个证书。

.p12

这是使用 PKCS#12 加密标准创建的证书。

这样就可以将证书和私钥存储在同一个文件中。

但是,您需要设置密码才能使用它。

混合文件扩展名问题

:工作进程与往常不同,无意中使用了性质不同的扩展程序,或者
证书颁发机构更改了默认颁发的扩展程序。

虽然这不是什么大问题,但当文件扩展名混杂在一起时,可能会给工作人员带来一些麻烦。

这是因为,虽然负责搭建环境的人和操作环境的人通常是不同的人,但
颁发证书的人和更新证书的人也可能是不同的人。

因此,如果文件扩展名混用,可能会出现以下情况:

  • 如果不同环境中的文件扩展名不同,则每次都需要检查配置文件中指定的文件名。
  • 我认为这款软件背后可能存在某种意图,所以我会向负责发布该软件的人员核实一下。
  • 看起来很糟糕(主观感受)

我们应该如何应对?

该规则的制定是为了规范代表文件内容的扩展名的使用。

建议您在“操作规则”或“环境文档”中明确说明您将使用的扩展程序。

根据具体操作情况,颁发 SSL 证书的人员可能是办公室工作人员,
甚至可能无法查看配置文件,因此我个人认为最好将其设定为一般规则并以书面形式记录下来。

题外话:为什么会存在多种文件扩展名呢?

首先,文件扩展名是软件用来识别文件格式的名称,并不是绝对的。

它仅仅是一种软件概念,而不是数据标准或规范。

显然,即使你将图像数据(.jpg)的扩展名更改为“.txt”,
软件也只会将其解释为文本数据并打开它,但
其中的 JPEG 数据不会转换为文本数据。

扩展名可以任意设置,以便可以随意重写

简而言之,证书和其他文档的数据结构只是简单地定义为一个标准,
文件扩展名没有严格规定。

提示:Linux 中不存在文件扩展名的概念。

在 Linux 系统中,文件格式首先不是通过扩展名来识别的;换句话说,扩展名的概念并不存在。

在 Linux 系统中,用户(人)会为文件名添加扩展名,以便于管理识别和使用。

这说明“扩展”的概念并非绝对,具体规范会因操作系统而异。

*在 Linux 上安装创建 GUI 环境的软件时,
该软件可能会添加识别和区分文件扩展名的功能。

最后

我最初写这篇文章时,只是想随意地深入挖掘一下我上一篇文章中的一些技巧,但
没想到解释起来比我想象的要困难得多,而且需要很多预备知识。

这段解释已经很长了,但为了减少该领域的混乱,
我认为最好理解为“我们应该确保扩展程序保持一致”。

我希望这篇文章对读者有所帮助。

参考资料

Let's Encrypt 官方文档 / 欢迎使用 ASN.1 和 DER
https://letsencrypt.org/ja/docs/a-warm-welcome-to-asn1-and-der/

Digicert 官方网站 / [CertCental] 服务器证书安装说明
https://knowledge.digicert.com/ja/jp/solution/SOT0002.html

RFC 5280
https://www.rfc-editor.org/rfc/rfc5280

国际电信联盟电信标准化部门(ITU-T)建议书
https://www.itu.int/ITU-T/recommendations/rec.aspx?rec=X.509

RFC 7468
https://www.rfc-editor.org/rfc/rfc7468#section-5.3
*文件扩展名在 5.3 节中被提及,但
“它们只是阐明了广泛使用的事实上的替代方案。” 这
似乎并非标准中的严格规定。

如果您觉得这篇文章有帮助,请点赞!
10
加载中...
10 票,平均:1.00 / 110
13,747
X Facebook 哈特纳书签 口袋

写这篇文章的人

关于作者

里面

我在职业生涯中期加入了Beyond,
在系统解决方案部门工作。
我拥有LPIC-3 304和AWS SAA认证。