[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

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

大家好。
我在系统解决方案部门工作,早上醒来就像世界末日一样痛苦。

这是继下面的文章之后关于如何使用 openssl 命令检查 SSL 证书的第二篇文章。
在上一篇文章中,我们重点检查了“到期日期”,这是有关证书最重要的信息。

如何使用 openssl 命令/选项说明检查证书的过期日期

 

颁发证书时,无论是新证书还是续订证书,检查其完整性都很重要。
关于如何使用 openssl 命令检查“一致性”的 1 点

申请完证书后,最好到证书颁发机构检查证书是否已经“验证”成功,所以
1分讲解如何使用openssl命令检查“验证”是否有问题

本文主要围绕以上两点,
《讲解使用openssl命令检查证书完整性和验证结果的方法和选项》以及
《为什么可以检查这个方法?》
我们将在“解释”的风格

这篇文章的立场是为那些不熟悉详细确认的人提供一个简单的解释。

执行环境

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

前言:证书安装流程

  1. 创建证书时,首先创建RSA私钥。
  2. 创建包含私钥中相应公钥的证书签名请求 (CSR)。
  3. 通过将 CSR 发送到证书颁发机构(中间证书的所有者)并
    使用证书颁发机构的私钥对其进行数字签名来获得的。

  4. 通过在目标环境(LB、服务器等)中总共安装三项来完成: “证书”、“证书颁发机构证书(中间证书)”和带有数字签名有效的“私钥” *1

 

*1. 在 Apache 2.4.8 及更高版本的环境中,指定中间 CA 的 SSLCertificateChainFile 指令已被废除。
因此,在申请证书时,基本要申请一种将“证书”和“证书颁发机构证书(中间CA)”合而为一的格式。

 

关于“期限”、“一致性”和“验证结果”的确认

  1. 在安装和加载证书,
    有必要检查“到期日期” (证书)和“完整性” (所有三个文件共有)
  2. 另外,安装后还
    需要检查“验证结果”,看看证书是否已经被正确验证和认证(本文所谓的证书链已建立

检查的原因是,如果安装错了,自然就不能起到证书的作用了。
发生这种情况时,现代浏览器将显示警告并导致用户可能离开该网站。

 

● 关于扩展

◯本文中使用的扩展

・证书(.crt)
・中间 CA 证书(=中间证书)(.ca)
・私钥(.key)

使用 openssl 命令检查“完整性”

抱歉让您久等了,以下是检查主要问题的方法。
我们使用 openssl 命令来检查完整性。

“证书和中间证书”和“证书和私钥”的确认方法不同,但
都是在安装过程中执行的,因此都是在生产环境中执行的。

如何检查证书和中间证书(=中间 CA 证书)的“完整性”

使用 Issuer_hash 选项显示证书的“颁发者”(= 颁发者)信息的哈希值

openssl x509 -issuer_hash -noout -in example.com.crt

使用 subject_hash 选项显示中间证书的“主题”信息的哈希值

openssl x509 -subject_hash -noout -in example.com.ca

这时,就可以确认它们是一致的

 

x509

处理 SSL 证书时,请使用“openssl”命令中的子命令“x509”。

*“X.509”是公钥证书标准格式的名称,因此关联起来会更容易记住。

-在

使用此选项是因为您需要指定要加载的证书的名称。

-issuer_hash

显示证书中写入的散列颁发者信息。

-主题哈希值

显示证书中列出的主题信息的哈希版本。

 

●为什么不同的“issuer_hash”和“subject_hash”项之间可以进行一致性检查?

这是因为这些信息指向同一事物,只是项目名称不同。

证书的“颁发者”是证书颁发机构。

中间证书的“主体”……主体是认证机构。

这是正确的。换句话说,
检查“颁发证书的证书颁发机构”和“拥有中间证书的证书颁发机构”是否相同。

如果这两个哈希值匹配,则可以说“证书和中间证书的完整性”已经得到确认,没有任何问题。

 

●适用于Apache2.4.8或更高版本

SSLCertificateChainFile 指令已在 Apache 2.4.8 及更高版本环境中弃用。

因此,在 Apache conf 中,
指定了单个证书,该证书是“证书”和“证书颁发机构证书(中间 CA)”的组合。

申请证书时,
会颁发Apache 2.4.8以上版本的组合证书,所以基本不需要确认。

 

*例外:如果您的环境是 Apache 2.4.8 或更高版本,但证书是以不同的常规格式颁发的,您
将必须手动组合证书,但在此之前,请运行此操作作为预防性检查。

如何检查证书和私钥的“完整性”

证书和私钥的“完整性”是
通过检查两者所持有的信息模数

使用 openssl x509 命令。

使用 modulus 选项显示证书模数
此时,使用 md5sum 将其转换为短哈希值更容易进行比较。

openssl x509 -noout -modulus -in example.com.crt | openssl x509 -noout -modulus -in example.com.crt |

使用 openssl rsa 命令的 modulus 选项显示私钥的模数,并
类似地使用 md5sum 将其转换为短哈希值。

openssl rsa -noout -modulus -in example.com.key | md5sum

这时,就可以确认它们是一致的

 

x509-模数

证书中包含的模值作为子命令“x509”的选项输出。

RSA

处理 RSA 密钥时,请使用“openssl”命令的子命令“rsa”。

rsa 模数

子命令“rsa”的此选项输出密钥中包含的模值。

| md5 总和

这是一个使用哈希函数“MD5”进行计算的命令,这次我们将对通过管道传递的模数信息进行哈希处理。

 

●为什么“模”值相同就能保证一致性?

此模数选项显示“RSA 模块”,它是 RSA 加密格式中使用的数字之一。

由于解释会很大,我会给出一个粗略的解释,但是在RSA加密方法中,

  • 仅由私钥方持有的数值
  • 还包含公钥的数字(此处包含 RSA 模块)

有两种类型的数字,
这些数字用于执行计算(HTTPS 情况下的数字签名和签名验证)。

 

私钥也具有公钥的数值

换句话说,如果两个密钥持有的RSA模块相同,则可以确认公钥和私钥是一对(=一致)。

 

●既然证书不是公钥,为什么可以输出模数呢?

这是因为证书具有内置的公钥。

使用此证书中包含的公钥,我们将开始使用 HTTPS 执行加密通信的步骤。

由于CSR是通过单个命令从私钥创建的,因此在操作过程中很难注意到,但其机制是CSR(&证书)包含公钥。

*本文只是一种确认方法,因此我们省略了基本解释。

使用 openssl 命令向证书颁发机构检查“验证结果”

这是为了检查根证书、中间证书和证书是否正常运行(证书链是否建立)。

在上一篇文章中,我们使用openssl s_client进行连接并检查当时获得的证书的内容(过期日期)。

 

这次,我们将使用“建立连接并输出通信状态日志”的正常使用方法来诊断状态。

$ openssl s_client -connect Beyondjapan.com:443 -showcerts < /dev/null CONNECTED(00000003) 深度=2 C = IE,O = 巴尔的摩,OU = Cyber​​Trust,CN = 巴尔的摩 Cyber​​Trust 根验证返回:1 深度=1 C = US、O =“Cloudflare, Inc.”、CN = Cloudflare Inc ECC CA-3 验证返回:1 深度=0 C = US、ST = 加利福尼亚州、L = 旧金山、O =“Cloudflare, Inc.”、CN = sni.cloudflaressl.com 验证返回:1 --- 证书链 0 s:C = US、ST = 加利福尼亚州、L = 旧金山、O =“Cloudflare, Inc.”、CN = sni.cloudflaressl.com i:C = US、O =“Cloudflare, Inc.”、CN = Cloudflare Inc ECC CA-3 -----BEGIN CERTIFICATE----- 省略 -----END CERTIFICATE----- 1 s:C = US , O =“Cloudflare, Inc.”,CN = Cloudflare Inc ECC CA-3 i:C = IE,O = 巴尔的摩,OU = Cyber​​Trust,CN = 巴尔的摩 Cyber​​Trust 根 -----BEGIN CERTIFICATE---- 省略 - ----END CERTIFICATE---- 主要遗漏 验证返回码:0 (ok) --- DONE

-表演证书

显示使用 openssl 命令的子命令“s_client”选项从服务器发送的证书列表,以通过 SSL/TLS 进行通信。

即使您不使用此选项,也会显示下面的“验证返回代码”检查,但我使用它是因为它增加了有关证书的信息量。

检查要点

您应该在这里检查的底部的“验证返回代码”和“深度”

验证返回码

状态码表示验证状态。

- 如果“验证返回”为“0(ok)”,则没有问题。

其他情况下,会根据问题中的代码号显示验证内容。

例如,“21(无法验证第一个证书)”(翻译:无法验证第一个证书)
表示问题可能出在中间证书,即从服务器证书跟踪的第一个证书。

还有其他选项例如“10(证书已过期)”(翻译:证书已过期),这
在查找问题时非常有用,因为它根据代码显示验证详细信息。

深度

它显示了证书的层次结构,
0 是服务器证书,1 是中间证书,2 是根证书。

・如果“深度”是“2”、“1”、“0”的正确序号,则证书的流程没有问题。

然而,如果全部为“0”,就有问题了。

这意味着没有创建层次结构(=没有建立证书链),
可以推断中间证书很可能存在问题。

在这种情况下,验证返回码很可能是 21。

 

谨防“中级证书误用”

我认为如果在应用之前检查证书和中间证书的“完整性”,一般不会有问题,但
在 Apache 2.4.8或更高版本中,由于已经统一,中间证书丢失的可能性越来越大。它将被应用。

●这会成为一个你没有立即注意到的麻烦情况。

这种“缺少中级证书”的情况是极其麻烦的。

在PC浏览器的情况下,“补充中间证书的功能”通常可以工作并且“可以查看该站点

另一方面,智能手机浏览器由于没有中间证书补充功能,经常会出现错误,很难查出原因。

即使检查证书中主要检查的“到期日期”和“域名”也没有问题,但
由于可以在 PC 上查看该网站,因此这是一个非常麻烦的情况,无法立即注意到问题。

 

事实上,了解这个案例的存在是我决定写这篇文章的主要原因。

如果出现“证书没有问题,但智能手机有问题”或“证书本身没有问题,但有错误”
,请使用上述命令检查根证书和中间证书是否正确如果没有任何问题,最好先检查一下。

最后

证书确认方法在业务中经常使用,所以记住它是非常有用的。

不过,我认为如果你不知道证书和SSL/TLS如何工作,有些部分很难理解,所以
我认为你可以通过单独学习系统来加深理解。

我希望这篇文章能为阅读它的人提供一些有用的知识。

参考资料

openssl-x509 的 OpenSSL 官方手册页
https://www.openssl.org/docs/manmaster/man1/openssl-x509.html

OpenSSL (ArchWiki)
https://wiki.archlinux.jp/index.php/OpenSSL

如果您觉得这篇文章有帮助,请点赞!
9
加载中...
9 票,平均:1.00 / 19
15,456
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

写这篇文章的人

关于作者

里面

2022 年加入 Beyond 职业生涯 属于
系统解决方案部门
LPIC-3 我有 304 和 AWS SAA 我的
常规饮料只有三种选择:牛奶、可乐和红茶。