Eu tenho tentado obter uma conexão SSL com um servidor LDAPS (Active Directory) para funcionar, mas continuo tendo problemas. Eu tentei usar isso:
openssl s_client -connect the.server.edu:3269
Com o seguinte resultado:
verify error:num=20:unable to get local issuer certificate
Eu pensei, OK, bem, servidor é um servidor de produção antigo há alguns anos. Talvez o CA não esteja presente. Em seguida, puxei o certificado da saída para um arquivo pem e tentei:
openssl s_client -CAfile mycert.pem -connect the.server.edu:3269
E isso também não funcionou.
o que estou perdendo? Isso não deveria SEMPRE funcionar?
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'./ca_issuer_cert.pem')
Depois disso, pude usar STARTTLS (na porta LDAP 389) conforme o esperado.Respostas:
Portanto, é isso que eu vejo como o nome do certificado da CA:
Esse era o nome do certificado que eu havia importado depois de fazer os showshows na minha segunda tentativa acima. Listei os certificados no keystore fazendo o seguinte:
Eu vejo o certificado da CA lá.
Para garantir que o openssl esteja usando o keystore que estou usando com o servidor, estou usando o argumento -CAfile:
Sabendo que o keystore java para CA's tem uma senha, tentei usar a opção -pass pass: password como esta:
mas isso também não funcionou.
O engraçado é que o arquivo cacerts tem uma senha e o openssl não está reclamando que não pode ler o arquivo cacerts. Isso parece suspeito para mim. Isso ou qualquer outra coisa toca uma campainha?
fonte
Esse erro é a maneira do openssl de dizer: "Não consigo seguir a cadeia de certificados até uma raiz confiável". Acabei de executar o mesmo comando em meus próprios servidores AD e recebo uma cadeia de certificados completa, mas o certificado superior tem esse erro exato. Se você tiver a chave de pub da CA que assinou o certificado, poderá especificá-la com as opções
-CAfile
ou-CApath
fonte
Se você estiver usando o OpenLDAP, poderá definir:
no seu
openldap.conf
arquivo, que instrui o OpenLDAP a não tentar a verificação do certificado. Existe uma opção semelhante se você estiver fazendo autenticação LDAP com o Apache.Se você realmente deseja executar a verificação de certificado, o seguinte pode ajudar:
Acho que não. Embora o seguinte possa parecer definitivo, é realmente apenas o meu melhor convidado:
O que você tentou funcionaria apenas para um certificado autoassinado. Como o certificado foi realmente emitido pela CA do Windows, tentar usar o certificado do servidor como argumento para
-CAfile
não obter nada.Não necessariamente não. Não há garantia de que o servidor remoto apresente o certificado CA em sua saída. Você precisa primeiro olhar para o emissor do certificado do servidor:
... e veja se um dos outros certificados que você possui corresponde a esse emissor.
fonte