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

目录
大家好。
我在系统解决方案部门工作,休息日每天睡大约12个小时。
我很佩服那些睡眠时间短的人。
本文是前一篇文章“使用 openssl 命令检查 SSL 证书”的衍生文章。
在下文“◯ 本文使用的扩展名”部分,我们已明确列出了所使用的扩展名。
之所以写这篇前言,是因为“证书和密钥的扩展名可能因环境和用户而异”。
有些人可能会疑惑为什么证书和私钥的扩展名有时不同,所以我们想解释一下它们不同的原因,
包括类型和数据格式。
“如何回应的问题。
执行环境
- 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