De fato, o RHEL não fornece nada que possa ser usado como um 'diretório de certificados' para fins de confiança da CA. Para o OpenSSL, um diretório de certificado - um 'CApath' - é um diretório que contém arquivos de certificado individuais (no formato PEM ou no formato 'certificado confiável' estendido do OpenSSL), com nomes em um formato específico com base em um hash do nome do sujeito do certificado. Geralmente, isso é alcançado colocando arquivos com nomes e .pem
extensões legíveis por humanos em um diretório e executando c_rehash
nele (consulteman c_rehash
) Para o GnuTLS desde a versão 3.3.6 (antes disso, o GnuTLS não tinha suporte a diretórios), é apenas um diretório com arquivos PEM; O GnuTLS tentará carregar todos os arquivos no diretório e obter êxito em qualquer coisa PEM-ish (ele não pode lidar com o formato 'certificado confiável' do OpenSSL). Não tenho certeza absoluta de que o NSS possa realmente usar um diretório cheio de arquivos de certificado individuais como raiz de confiança, mas a documentação do OpenLDAP parece sugerir que sim (mas se o diretório também contiver um banco de dados do NSS, isso dará prioridade). Independentemente disso, o RHEL não possui nada como um diretório cheio de arquivos de certificado de CA individuais.
O Debian e derivativos fornecem /etc/ssl/certs
neste formato; /etc/ssl/certs
é o local canônico de armazenamento confiável no Debian, e na IMO qualquer coisa que o forneça deve ser basicamente o mesmo do Debian, pois o Debian tinha esse diretório organizado mais ou menos da mesma maneira desde 1999. RHEL tem um /etc/ssl/certs
diretório, mas está em não neste formato - ele não contém nenhum arquivo de certificado individual. Você não pode usá-lo como um CApath. Honestamente, no RHEL (e no Fedora e derivados) esse diretório é basicamente uma armadilha. Não use. (Consulte https://bugzilla.redhat.com/show_bug.cgi?id=572725 e https://bugzilla.redhat.com/show_bug.cgi?id=1053882para obter algumas informações sobre por que existe em primeiro lugar e como estou tentando corrigi-lo). Então eu acho que você está certo sobre o que está acontecendo, mas errado sobre o motivo. O OpenLDAP não está fazendo nada de errado e não está falhando porque "ca-bundle.trust.crt ... é um banco de dados de chaves / certificados Mozilla NSS" (são chamados cert8/9.db
e key3/4.db
, e os do RHEL em todo o sistema /etc/pki/nssdb
) , está apenas falhando porque /etc/ssl/certs
não pode ser usado como um 'diretório de certificado'.
O RHEL também não fornece nada utilizável como um armazenamento confiável no estilo CApath em qualquer outro lugar. O armazenamento confiável do sistema do RHEL é fornecido como um único arquivo de pacote configurável PEM (um 'CAfile' nos termos do OpenSSL), que pode ser encontrado em /etc/pki/tls/certs/ca-bundle.crt
e /etc/pki/tls/cert.pem
. Ele também pode ser encontrado em /etc/ssl/certs/ca-bundle.crt
como /etc/ssl/certs
é na verdade apenas um link simbólico /etc/pki/tls/certs
, mas esse local não é canônico e realmente não deve ser usado por nada. O RHEL também fornece um pacote no formato 'certificado confiável' do OpenSSL como /etc/pki/tls/certs/ca-bundle.trust.crt
.
O correto, como você descobriu, é usar o arquivo do pacote que o sistema fornece. Sua resposta funcionará, mas pelas razões mencionadas acima, eu recomendo fortemente TLS_CACERT=/etc/pki/tls/certs/ca-bundle.crt
ou TLS_CACERT=/etc/pki/tls/cert.pem
mais TLS_CACERT=/etc/ssl/certs/ca-bundle.crt
.
(Não há nada de novo remotamente nisto, aliás, mas a confusão nas interwebs é generalizada. RH e derivados nunca forneceram um diretório cheio de certificados, nunca. Eles forneceram um arquivo de pacote desde o ano 2000. Era mudou de / usr / share / ssl para / etc / pki / tls em 2005. O Debian teve tanto /etc/ssl/certs
um diretório no estilo CApath /etc/ssl/certs/ca-certificates.crt
quanto um arquivo de pacote mais ou menos desde a idade da pedra.)
/etc/ssl/certs/
contém/etc/ssl/certs/ca-bundle.trust.crt
como parte deca-certificates-2010.63-3.el6_1.5.noarch
, que é um banco de dados de chaves / certificados Mozilla NSS. A inclusão desse arquivo dentroTLS_CACERTDIR
faz com que todos os outros arquivos sejam ignorados.No entanto,
openldap-2.4.23-26.el6_3.2.i686
parece não lidar com isso corretamente.Resposta curta
Use
LDAPTLS_CACERT=/etc/ssl/certs/ca-bundle.crt
(arquivo de configuração
TLS_CACERT=/etc/ssl/certs/ca-bundle.crt
)Este arquivo também está incluído no arquivo
ca-certificates-2010.63-3.el6_1.5.noarch
.fonte
Alguém mais se depara com isso; isto é o que funcionou para mim no centos 6 openldap e sssd:
notas: a. Alguns "espertos" decidiram fazer o sssd exigir TLS / SSL; mudança de comportamento de centos5; isso é ótimo para sistemas externos; mas quando você tiver mais de 300 nós no dispositivo interno com uma rede interna inacessível para o cluster da máquina; esse é um recurso de segurança extremamente inútil.
b. Além disso, certificados auto-chamuscados parecem não funcionar mais; vai continuar tentando
c. Evite o NSLCD a todo custo; foi atormentado com problemas ininterruptos quando defini o sinalizador legado e usei em vez de sssd (netgroups; syslog de deadlocking, etc.).
Para começar a funcionar usando sssd;
sssd.conf
slapd.conf
ldap.conf
fonte
sssd
por exemplo.Este é um problema muito comum, não se preocupe, eu tenho uma resposta para você.
Os primeiros clones do RHEL têm dois
ldap.conf
arquivos,/etc/ldap.conf
ou no RHEL6 está obsoleto, mas você pode usar/etc/nslcd.conf
para autenticação agora/etc/openldap/ldap.conf
e apenas para consultas , por issoldapsearch
,ldapmodify
,ldapremove
, é realmente o seu perfil para que você não tem que ter uma cadeia longa desagradável cada vez que quiser para executar um comando ldap.Agora, com isso fora do caminho, você tem dois parâmetros,
tls_cacertfile
- defina explicitamente o ca cert e você deve estar prontotls_cacertdir
- solte o ca cert no diretório, mas ele não funcionará, porque precisa ser hash ...usar
openssl x509 -hash -noout -in $file , ln -s $file $file.0
, seu certificado CA funcionará.Além disso Observe , se o arquivo de configuração estiver no CAPS, você estiver trabalhando em /etc/openldap/ldap.conf, eles são arquivos muito diferentes.
Espero que isso esclareça as coisas.
fonte
De acordo com todas as páginas de manual que eu já vi (mas não sou um usuário do CentOS), não existe
LDAPTLS_CACERTDIR
. A variável correta a ser definida éTLS_CACERTDIR
. Você deve configurá-lo permanentemente no/etc/openldap/ldap.conf
CentOS ou onde ele mantém o arquivo de configuração da biblioteca LDAP. Além disso, pode ser necessário configurar o próprio pam-ldap para procurar os certificados da CA./etc/pam_ldap.conf
Acho que no CentOS isso é , e a variável a ser configurada étls_cacertdir
.fonte
Environmental variables may also be used to augment the file based defaults. The name of the variable is the option name with an added prefix of LDAP. For example, to define BASE via the environment, set the variable LDAPBASE to the desired value.
LDAPTLS_CACERTDIR
e não encontrei nenhuma, então presumi que você misturasse suas variáveis. Desculpe.