openssl não encontra certificados, a menos que seja especificado com -CAfile

1

Estou lutando com o openssl desde alguns dias.

Eu compilei o openssl em um dispositivo ARM e quando executo openssl s_client -connect google.com:443 , a conexão falhará com error 20: unable to get local issuer certificate .

Se eu executar esse comando especificando -CAfile /etc/ssl/certs/ca-certificates.crt , a conexão funcionará e retornará verify return code: 0 (ok) . Outro teste que eu fiz é executar o comando com -CApath /etc/ssl/certs/ , nesse caso eu ainda tenho erro 20

Como OPENSSLDIR é / usr / lib / ssl eu consegui vinculá-lo a / etc / ssl / certs, agora no sistema de arquivos que o diretório se parece com isto:

ls -l /usr/lib/ssl
certs -> /etc/ssl/certs

Não estou tentando descobrir o que estou perdendo e como definir o diretório no qual o openssl precisa procurar por certificados. Alguém já teve um problema semelhante?

    
por Marco 16.11.2017 / 15:35

1 resposta

1

O diretório especificado no CApath deve ter uma estrutura especial. De documentos do OpenSSL

If CApath is not NULL, it points to a directory containing CA certificates in PEM format. The files each contain one CA certificate. The files are looked up by the CA subject name hash value, which must hence be available. If more than one CA certificate with the same name hash value exist, the extension must be different (e.g. 9d66eef0.0, 9d66eef0.1 etc). The search is performed in the ordering of the extension number, regardless of other properties of the certificates. Use the c_rehash utility to create the necessary links

Se eu não estiver errado, você poderia usar um diretório como caminho de caminho se:

  • Ele contém arquivos no formato pem contendo uma autoridade em cada arquivo.
  • Você executa c_rehash (ou cria manualmente os links simbólicos apropriados) nele.
por 16.11.2017 / 23:35