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

大家好,
我是系统解决方案部门的中野,休息日我一般睡12个小时左右。
我真羡慕那些睡眠时间短的人。

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

在下文中,我在题为“本文使用的文件扩展名”的部分中列出了所使用的文件扩展名。
之所以写这篇前言,是因为“证书和密钥的文件扩展名会因环境和个人而异”。

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

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

如何我应该我也思考了一些个人应对策略,这些问题让我不禁思考:

执行环境

  • Linux 环境
    :操作系统:AlmaLinux 8.5 版(WSL2 环境);
    Shell:Bash
    ;OpenSSL 1.1.1k;FIPS 25 2021 年 3 月
  • 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 之类的扩展名,但本文将省略这些扩展名。)

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

因为它们受到 Windows 的 Web 服务器 Microsoft IIS 的支持
格式经常用于 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
15,629
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

里面

以中级员工的身份加入 Beyond 公司,
目前在系统解决方案部门工作。
我持有 LPIC-3 304 和 AWS SAA 认证。