【发布时间】:2025-12-27 18:50:11
【问题描述】:
我有一个要求,我有一个证书,我需要知道它是客户端证书还是服务器证书。是否有一个开放的 ssl api 说明相同。 例如一个类似的用例,如果我们想判断一个证书是否是一个 CA,我们可以使用这个函数
*static int check_ca(const X509 x) 在 OpenSSL 中找到
【问题讨论】:
标签: openssl ssl-certificate x509certificate
我有一个要求,我有一个证书,我需要知道它是客户端证书还是服务器证书。是否有一个开放的 ssl api 说明相同。 例如一个类似的用例,如果我们想判断一个证书是否是一个 CA,我们可以使用这个函数
*static int check_ca(const X509 x) 在 OpenSSL 中找到
【问题讨论】:
标签: openssl ssl-certificate x509certificate
理论上,证书可用于客户端和服务器身份验证,具体取决于它是否在启动或接收 SSL/TLS 握手时使用
但是,您可以通过设置证书的 Extended Key Usage 字段来优化此行为。
你可以在执行命令openssl x509 -in cert -text -noout时看到这个字段,你可能会得到类似的东西
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment, Data Encipherment, Key Agreement
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
该字段使用 openssl 配置文件(位于/etc/ssl/openssl.cnf)进行配置。
手册页的更多信息:man x509v3_config
【讨论】:
我有一个要求,我有一个证书,我需要判断它是客户端证书还是服务器证书....
大多数 PKI 中有两种类型的证书。它们是最终实体证书(如客户端和服务器使用的证书)以及 CA 和从属 CA 证书。最终实体证书缺乏 CA=true 基本约束。 CA 和从属证书具有 CA=true 约束,它们验证最终实体证书。另请参阅 Apache 的 Glossary of PKI Terms。
有一些密钥使用位可以帮助您确定密钥经过认证的用途。然而,它们的关键使用位严重不足,甚至没有涵盖*别的用例(如server authentication versus proxying/interception)。
有一些扩展可以进一步指定密钥的用途,但它们是特定于 PKI 的。例如,Microsoft 使用扩展来识别最终实体/用户证书中的用户。要进行良好的讨论,请参阅 Thomas Porin 在 How to encode a username in PKIX certificate?
的回答是否有可以解析证书并判断它是客户端证书还是服务器证书的 OPENSSL api?
不,因为它们都是最终实体证书。无论是使用它的人还是服务器都无关紧要。您可以使用扩展来标记带有信息的证书,但是您需要添加额外的应用层逻辑来识别它。
【讨论】: