是否有OPENSSL api可以解析证书并告知它是客户端证书还是服务器证书?

时间:2016-03-16 06:19:05

标签: openssl ssl-certificate x509certificate

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

在OpenSSL中找到

* static int check_ca(const X509 x)

2 个答案:

答案 0 :(得分:2)

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

但是,您可以通过设置证书的扩展密钥用法字段来优化此行为。 您可以在执行命令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

答案 1 :(得分:0)

  

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

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

有一些关键用法位可以帮助您确定密钥被认证的内容。但是,它们的关键用法比例严重不足,甚至不能涵盖最高级别的用例(如server authentication versus proxying/interception)。

有一些扩展可以进一步指定密钥的用途,但它们特定于PKI。例如,Microsoft使用扩展来标识最终实体/用户证书中的用户。有关讨论,请参阅Thomas How to encode a username in PKIX certificate?

的答案
  

是否有OPENSSL api可以解析证书并告知它是客户端证书还是服务器证书?

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