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

目录
大家好,
我是系统解决方案部门的中野,休息日我一般睡12个小时左右。
我真羡慕那些睡眠时间短的人。
本文是前一篇文章“使用 openssl 命令检查 SSL 证书”的衍生文章。
在下文中,我在题为“本文使用的文件扩展名”的部分中列出了所使用的文件扩展名。
之所以写这篇前言,是因为“证书和密钥的文件扩展名会因环境和个人而异”。
“为什么证书和私钥的文件扩展名有时会不同可能会让一些人疑惑:
我想解释一下它们可能不同的原因,包括文件扩展名的类型和数据格式。
“如何我应该我也思考了一些个人应对策略,这些问题让我不禁思考:
执行环境
- 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
