Eu tenho um servidor Subversion rodando no Ubuntu 11.04 usando o Apache, e estou tentando ligar a autenticação ao LDAPS. Eu tenho o arquivo de configuração do Apache configurado para autenticar contra o LDAP (sem o S) muito bem, mas a versão segura está me dando ... problemas. Aparentemente é um problema de certificado. Infelizmente sou um certificado n00b.
Eu encontrei esta pergunta , que parece ser o mesmo problema que estou tendo. Eu tentei colocar a linha LDAPVerifyServerCert off
no meu httpd.conf, e funcionou - mas eu não acho que eu queira apenas ignorar o certificado se ele tem problemas, não é?
Eu acho que nosso servidor LDAP tem um certificado auto-assinado ... talvez você possa começar confirmando ou negando isso para mim. Aqui está o que eu recebo quando eu corro 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)
Copiei o certificado dessa saída (da linha BEGIN até a linha END), colei em /etc/ssl/certs/myldap.xyz.edu.pem
, executei c_rehash
e tentei openssl s_client -connect myldap.xyz.edu:636 -CAfile /etc/ssl/certs/myldap.xyz.edu.pem -showcerts
. Sem sorte. Isso me deu os mesmos erros exatos.
Aqui está o meu arquivo 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>
O servidor LDAP é o Active Directory em execução no Windows Server 2008, se não me engano. Eu não estou realmente em condições de mexer com isso, e eu não acho que deveria precisar - nós já estamos usando muito bem em vários lugares. Tem que haver algo errado no lado do cliente. Eu tenho olhado em volta do Google por três dias sem sorte. Então, qualquer um que possa 1) resolver o problema, 2) me indicar uma questão diferente com uma solução, ou 3) um link para um tutorial seria extremamente apreciado. : ^)
EDITAR:
Aqui estão os comandos & resultados que eu corri por sugestão do 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
Assim, o hash e o hash do emissor são diferentes, o que significa que não é auto-assinado. Eu acho que estou entendendo um pouco melhor agora. No começo eu não percebi que as entidades /CN=myldap.xyz.edu
e /DC=edu/DC=xyz/CN=myldap
são vistas como duas coisas separadas, mesmo que se refiram à mesma máquina. Então eu tenho o certificado para o primeiro, mas agora preciso do certificado para o último, correto? Vou ver o que meu chefe pode me dizer (ele é o administrador do AD).
EDIT # 2:
Eu obtive o certificado do emissor, coloquei em /etc/ssl/certs/myldap1.pem
e executei c_rehash. Verifiquei os hashes e myldap1.pem
mostrou os hashes de assunto e emissor de 505d0f30
, o mesmo que o emissor do meu myldap.xyz.edu
cert. Então eu tentei o comando openssl s_client
novamente. No começo, ele me deu o mesmo conjunto de erros, mas quando lembrei de adicionar a opção -CAfile
, ela voltou com
Verify return code: 10 (certificate has expired)
Ah, excelente. Acontece que meu certificado tem uma data de expiração em 2009. > _ < Bem, pelo menos chegamos a um problema que sabemos como resolver. Obrigado por toda sua ajuda!