[.pem/.crt]为什么证书和私钥的扩展名不同?
目录
大家好。
我在系统解决方案部门工作,休息日大约睡 12 个小时。
我欣赏睡眠时间短的人。
这次是我之前写的《用openssl命令检查SSL证书》文章的衍生。
在下面的文章中,我们指定了描述中使用的扩展“◯本文中使用的扩展。”
这是我写的序言,因为“证书和密钥扩展可能会因环境和个人而异。”
,您可能会想,
“为什么证书和私钥有不同的扩展 ”我想解释一下为什么有不同的扩展,包括扩展的类型和数据格式。给你。
我也尝试针对自己所担心的问题思考个人对策, “我应该如何应对?
执行环境
- Linux 环境
操作系统:AlmaLinux release 8.5(WSL2 环境)
Shell:Bash
OpenSSL 1.1.1k FIPS 2021 年 3 月 25 日 - Windows 环境
操作系统:Windows 11 Pro(版本: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(内容名称)-----”
end.之间写入以Base64表示的二进制数据。
Base64 具有以下优点。
・易于编辑
由于它是文本数据,因此可以使用文本编辑器轻松显示和编辑。
就DER而言,需要二进制编辑器,并且编辑和检查并不容易。
・可以连接
这种定界格式的一个特点是可以在一个文件中存储多条数据。
我在上一篇文章,从Apache 2.4.8开始,有集成的证书和中间证书
PEM 格式的优点是您可以将证书、中间证书和私钥合并在一个文件中。
*但是,加入顺序是固定的。
PEM 格式是 Linux 上常用的 SSL 软件“openssl”的默认设置。
因此,它是一种容器格式,可以以 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。
P.K.C.S.
有一组称为 PKCS(公钥加密标准)的公钥加密标准。
PKCS#7和PKCS#12是与证书相关的标准,
这些标准的扩展名是.p7b和.p12。
*严格来说,PKCS#12 有 .pfx 等扩展名,但我们将省略它们以进行解释。
它不是定义证书的标准,而是存储(容器)证书的数据格式。
格式通常在 Windows Server 环境中使用,因为它们受到 Microsoft IIS(Windows Web 服务器)的支持
还可以使用 OpenSSL 命令转换为 PEM 格式等。
.p7b
该证书是使用加密标准 PKCS#7 创建的。
可以将证书和中间证书(+根证书)合二为一。
.p12
该证书是使用加密标准 PKCS#12 创建的。
现在可以将私钥存储在一个文件的证书中。
但是,规定在使用之前需要设置密码。
混合扩展问题
由于工作人员与平时不同而无意中使用了不同性质的扩展,或者
由于认证机构发生变化而导致默认颁发的扩展发生变化,因此会发生扩展拥塞。
问题不大,但是分机混用的时候对于运营商来说就有点麻烦了。
这是因为,虽然环境搭建的负责人与运营商不同是很常见的,但
负责颁发证书的人和负责更新证书的人也可能不同。
因此,如果扩展名混合,可能会出现以下情况。
- 如果环境中的扩展名不同,则每次都需要检查conf中指定的文件名。
- 您可能认为相关软件存在意图,并与负责发布该问题的人员核实。
- 看起来很糟糕(主观)
我们应该如何应对?
通过规定“使用代表内容的扩展”来统一规则
最好在“操作规则”或“环境文档”中明确说明要使用的扩展。
根据操作的不同,签发SSL证书的负责人可能是办公室职员,
无法首先看到conf ,所以我个人认为最好建立一个通用规则并将其记录下来。思考。
旁注:为什么首先要有多个扩展?
首先,扩展名是软件用来识别文件格式的名称,并不是绝对名称。
这是一个软件概念,而不是数据标准或规范。
当然,即使你把图像数据(.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 节提到了文件扩展名,但
“澄清了广泛使用的事实上的替代方案。”(日语翻译)”
写于end,标准中似乎没有严格规定。