是否有一个OPENSSL api可以解析证书并判断它是客户端证书还是服务器证书?

是否有一个OPENSSL api可以解析证书并判断它是客户端证书还是服务器证书?,openssl,ssl-certificate,x509certificate,Openssl,Ssl Certificate,X509certificate,我有一个要求,在这里我有一个证书,我需要告诉它是客户端证书还是服务器证书。有没有一个开放的sslapi告诉我们同样的道理。 例如,一个类似的用例,如果我们想知道一个证书是否是CA,我们可以使用这个函数 *静态整数检查\u ca(const X509 x)在OpenSSL中找到理论上,证书可用于客户端和服务器身份验证,具体取决于启动或接收SSL/TLS握手时是否使用了证书 但是,您可以通过设置证书的扩展密钥使用字段来改进此行为。 当执行命令opensslx509-in cert-text-noou

我有一个要求,在这里我有一个证书,我需要告诉它是客户端证书还是服务器证书。有没有一个开放的sslapi告诉我们同样的道理。 例如,一个类似的用例,如果我们想知道一个证书是否是CA,我们可以使用这个函数


*静态整数检查\u ca(const X509 x)在OpenSSL中找到

理论上,证书可用于客户端和服务器身份验证,具体取决于启动或接收SSL/TLS握手时是否使用了证书

但是,您可以通过设置证书的扩展密钥使用字段来改进此行为。 当执行命令
opensslx509-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\u config

我有一个要求,在那里我有一个证书,我需要告诉它是客户端证书还是服务器证书

大多数PKI中有两种类型的证书。它们是终端实体证书(如客户端和服务器使用的证书)以及CA和从属CA证书。结束实体证书缺少基本约束。CA和从属证书具有
CA=true
约束,它们认证最终实体证书。另请参阅Apache的

有一些密钥使用位可以帮助您确定密钥的认证用途。然而,它们的关键使用位严重不足,甚至没有涵盖最高级别的用例(如)

有一些扩展可以进一步指定密钥的用途,但它们是特定于PKI的。例如,Microsoft使用扩展来标识最终实体/用户证书中的用户。有关良好的讨论,请参阅Thomas Porin在


是否有一个OPENSSL api可以解析证书并判断它是客户端证书还是服务器证书


否,因为它们都是最终实体证书。无论是个人还是服务器使用它都无关紧要。您可以使用扩展名用信息标记证书,但随后需要添加额外的应用程序层逻辑来识别它。

这对我来说很有用