Apache LDAPS 访问的证书问题

Apache LDAPS 访问的证书问题

我在 Ubuntu 11.04 上使用 Apache 运行 Subversion 服务器,并尝试使用 LDAPS 进行身份验证。我已将 Apache 配置文件设置为针对 LDAP(无 S)进行身份验证,但安全版本却给我带来了...问题。显然这是证书问题。不幸的是,我是证书新手。

我发现这个问题,这似乎和我遇到的问题相同。我尝试将这一行放入LDAPVerifyServerCert off我的 httpd.conf 中,并且成功了——但如果证书有问题,我想我不会直接忽略它,对吧?

思考我们的 LDAP 服务器有一个自签名证书...也许您可以先帮我确认或拒绝。以下是我运行时得到的结果openssl s_client -connect myldap.xyz.edu:636 -showcerts

CONNECTED(00000003)
depth=0 /CN=myldap.xyz.edu
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /CN=myldap.xyz.edu
verify error:num=27:certificate not trusted
verify return:1
depth=0 /CN=myldap.xyz.edu
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/CN=myldap.xyz.edu
   i:/DC=edu/DC=xyz/CN=myldap
-----BEGIN CERTIFICATE-----
[certificate here]
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=myldap.xyz.edu
issuer=/DC=edu/DC=xyz/CN=myldap
---
Acceptable client certificate CA names
/DC=edu/DC=xyz/CN=myldap
[...]
---
SSL handshake has read 13738 bytes and written 289 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-MD5
    Session-ID: [...]
    Session-ID-ctx:
    Master-Key: [...]
    Key-Arg   : None
    Start Time: 1335300252
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)

我从此输出中复制了证书(从 BEGIN 行到 END 行),将其粘贴到 中/etc/ssl/certs/myldap.xyz.edu.pem,运行c_rehash,然后尝试openssl s_client -connect myldap.xyz.edu:636 -CAfile /etc/ssl/certs/myldap.xyz.edu.pem -showcerts。没有运气。它给了我完全相同的错误。

这是我的 httpd.conf 文件:

ServerName svnserver.xyz.edu

<Location />
        DAV svn
        SVNParentPath /var/svn
        SVNPathAuthz off

        AuthName "Subversion server"
        AuthType Basic
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative off
        AuthLDAPBindDN "[email protected]"
        AuthLDAPBindPassword "[password]"
        AuthLDAPURL "ldaps://myldap.xyz.edu/DC=xyz,DC=edu?sAMAccountName?sub?(objectClass=*)" NONE

        Require ldap-user user1 user2
</Location>

如果我没记错的话,LDAP 服务器是运行在 Windows Server 2008 上的 Active Directory。我真的没法去摆弄它,而且我认为我不需要摆弄它——我们已经在很多地方很好地使用它了。客户端一定出了问题。我在 Google 上搜索了三天,但毫无收获。因此,任何能够 1) 解决问题、2) 指出另一个有解决方案的问题或 3) 提供教程链接的人都将不胜感激。:^)

编辑:

以下是我根据 chutz 的建议运行的命令和结果:

root@svnserver:~# openssl x509 -noout -issuer_hash < /etc/ssl/certs/myldap.xyz.edu.pem
505d0f30
root@svnserver:~# openssl x509 -noout -hash < /etc/ssl/certs/myldap.xyz.edu.pem
1045bba3

因此哈希和颁发者哈希不同,这意味着它不是自签名的。我想我现在理解得更清楚了。起初我没有意识到实体/CN=myldap.xyz.edu/DC=edu/DC=xyz/CN=myldap被视为两个独立的东西,即使它们指的是同一台机器。所以我有前者的证书,但现在我需要后者的证书,对吗?我会看看我的老板能告诉我什么(他是 AD 管理员)。

编辑#2:

我获取了颁发者证书,将其放入/etc/ssl/certs/myldap1.pem,然后运行 ​​c_rehash。我确保检查了哈希值,并myldap1.pem显示的主题和颁发者哈希值505d0f30与我的证书颁发者相同myldap.xyz.edu。所以我openssl s_client再次尝试了该命令。起初,它给了我同样的错误,但一旦我记得添加选项-CAfile,它就会返回

Verify return code: 10 (certificate has expired)

啊,太好了。原来我的证书将于 2009 年到期。>_< 好吧,至少我们找到了一个知道如何解决的问题。感谢您的帮助!

答案1

您的证书不是自签名证书。如果是,下面的“主题”和“颁发者”应该是相同的。

Server certificate
subject=/CN=myldap.xyz.edu
issuer=/DC=edu/DC=xyz/CN=myldap

这很可能是你无法正确验证的原因——openssl s_client -showcerts屏幕上显示的证书不是加州证书。

为了再检查一下,请尝试运行以下命令。

openssl x509 -noout -issuer_hash < /etc/ssl/....pem

openssl x509 -noout -hash < /etc/ssl/....pem

如果两个哈希值不同,则它不是自签名证书。如果是这种情况(我怀疑是这样),您唯一的选择就是以某种方式获取颁发 CA 证书。尝试向 Active Directory 管理员索取证书,并在获取证书后执行您已经做过的操作 - 将其转储到 /etc/ssl/certs 并运行 c_rehash。

当您获得证书后,请运行openssl x509 -noout -hash并确保它-issuer_hash与 LDAP 证书匹配。

相关内容