Problemas de certificado com acesso Apache LDAPS

3

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!

    
por DLosc 25.04.2012 / 01:40

1 resposta

1

O seu não é um certificado autoassinado. Se fosse, os seguintes "Assunto" e "Emissor" teriam sido idênticos.

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

Este é provavelmente o motivo pelo qual você não pode verificá-lo corretamente - o certificado que openssl s_client -showcerts mostra na tela não é o certificado CA .

Apenas para verificar novamente, tente executar os seguintes comandos.

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

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

Se os dois hashes forem diferentes, então não é um certificado autoassinado. Se for esse o caso (como eu suspeito), sua única opção seria obter o certificado da CA de emissão de alguma forma. Tente perguntar aos administradores do Active Directory sobre isso e faça o que você já fez quando o conseguiu - despeje-o em / etc / ssl / certs e execute c_rehash.

E quando você obtiver o certificado, execute openssl x509 -noout -hash e verifique se ele corresponde ao -issuer_hash do certificado LDAP.

    
por 26.04.2012 / 04:38