У меня есть сервер 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.