Назад | Перейти на главную страницу

Проблемы с сертификатом при доступе к Apache LDAPS

У меня есть сервер Subversion, работающий на Ubuntu 11.04 с использованием Apache, и я пытаюсь подключить аутентификацию с помощью LDAPS. Я установил конфигурационный файл Apache для аутентификации по LDAP (без S) очень хорошо, но защищенная версия вызывает у меня ... проблемы. Видимо проблема с сертификатом. К сожалению у меня сертификат n00b.

я нашел этот вопрос, что похоже на ту же проблему, что и я. Я попробовал поставить 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 "ldap_bind_dn@xyz.edu"
        AuthLDAPBindPassword "[password]"
        AuthLDAPURL "ldaps://myldap.xyz.edu/DC=xyz,DC=edu?sAMAccountName?sub?(objectClass=*)" NONE

        Require ldap-user user1 user2
</Location>

Сервер LDAP - это Active Directory, работающая на Windows Server 2008, если я не ошибаюсь. На самом деле я не в состоянии возиться с этим, и я не думаю, что мне это нужно - мы уже используем его во многих местах. На стороне клиента должно быть что-то не так. Я три дня искал в гугле безуспешно. Итак, любой, кто может 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 году.> _ <Ну, по крайней мере, мы дошли до проблемы, которую знаем, как решить. Спасибо за вашу помощь!

Ваш сертификат не является самоподписанным. Если бы это было так, следующие «Тема» и «Эмитент» были бы идентичны.

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

Это, скорее всего, причина, по которой вы не можете должным образом его проверить - сертификат, который openssl s_client -showcerts показывает на экране не CA сертификат.

Чтобы дважды проверить, попробуйте выполнить следующие команды.

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.