我的SSL证书链缺少主题

时间:2016-10-28 20:11:10

标签: ssl openssl

我正在尝试在客户端设置LDAP身份验证(我将其称为Example,Inc。)。我使用openssl s_client来获取证书链,但我仍然遇到问题。当我验证链时,我得到了这个(忽略了希望无用的位):

Certificate chain
0 s:
  i:/C=US/DC=com/DC=example/DC=rl/DC=example/O=Example Inc./OU=EXAMPLE/CN=XMPL L3 Low Iss E4 CA
[...]
1 s:/C=US/DC=com/DC=example/DC=rl/DC=example/O=Example Inc./OU=EXAMPLE/CN=XMPL L3 Low Iss E4 CA
  i:/C=US/O=Example Inc./OU=EXAMPLE/CN=XMPL L3 INT Low CA
[...]
2 s:/C=US/O=Example Inc./OU=EXAMPLE/CN=XMPL L3 INT Low CA
  i:/C=US/O=Example Inc./OU=EXAMPLE/CN=Example L3 Root CA
[...]

在我查看某人发布证书链的每个网页上,第一个(深度0)有一个主题(s:行)。事实并非如此。这可能是我问题的根源吗?

根据@ ChadSikorra在下面的回答,我使用openssl x509检查所有三个证书并查找“critical”一词。我在以下地方找到了它。

第一个证书,空白主题,(XMPL L3 Low Iss E4 CA)说,

X509v3 Basic Constraints: critical
    CA:TRUE, pathlen:0

第二个,非空白主题,(XMPL L3 INT低CA)说,

X509v3 Key Usage: critical
    Digital Signature, Key Encipherment
X509v3 Subject Alternative Name: critical
    DNS:host.example.rl.example.com, DNS:host, DNS:EXAMPLE, DNS:example.rl.example.com, DNS:ldap, DNS:ldap.example.com

第三个证书(示例L3根CA)说,

X509v3 Basic Constraints: critical
    CA:TRUE

1 个答案:

答案 0 :(得分:1)

这是您从 Third Party Application Fails Using LDAP over SSL看到的问题的一个非常好的解释:

  

以下问题是我不时提出的问题   并且对于试图使用它的IT管理员来说可能是一个挑战   内置版本2域控制器身份验证模板   环境。当人们使用版本1时可能会出现问题   过去的证书,但较新的(版本2)似乎给   一些意想不到的结果。

     

那么问题是什么?好吧,如果你有第三方申请   它使用LDAP over SSL连接到它可能的域控制器   最初使用新版本2域控制器不起作用   认证证书。

     

让我们详细讨论这个问题。第三方申请是   作为一部分,使LDAP通过SSL连接到域控制器   故意做了什么。这是在域名时工作   控制器有一个基于“旧式”版本1域的证书   控制器模板。企业证书颁发机构已发布   证书。但是,“域控制器”证书具有   已被基于“域控制器”的证书取代   身份验证“可能由于多种原因而发生的证书   我们今天在这篇博文中不会详细介绍。结束   看到的结果是第三方应用程序现在失败了。

     

明显的问题是什么?默认情况下,“域控制器”   身份验证“证书具有空白主题字段和主题   备用名称(SAN)字段在“域”上标记为关键字   控制器认证“证书。简单地说,一些应用程序   如果SAN字段被标记为关键字,则无法使用证书。

     

为什么这个字段很重要?某些应用程序可能有困难   如果SAN字段标记为关键,则使用证书   由于在何时检查这些字段,因此主题字段为空白   决定是否使用证书。

假设这是Active Directory。但它也可能在其他地方也有效。简而言之,LDAP SSL证书的默认DC Auth模板完全忽略了主题名称,有利于填写主题备用名称并将其标记为关键。

但是,我知道在尝试通过TLS / SSL连接时使用OpenLDAP / OpenSSL库时可能会出现问题。如果您正在使用OpenLDAP,则可以将ldap_set_optionLDAP_OPT_DEBUG_LEVEL常量一起使用,并将值设置为7.然后它应该告诉您它与证书有关的确切消息。

您可以让他们重新颁发实际填写主题名称的新证书,或者(如果使用OpenLDAP作为库片段),您可以将TLS_REQCERT选项更改为allow或{{ 1}}(不幸的是会引起一些安全问题......)。