Como obter o certificado * trusted * para um host?

1

Background: No PHP, ativar CURLOPT_SSL_VERIFYPEER e fazer muitas solicitações acaba deixando muitas cópias do pacote da CA na memória ( curl_close não ajuda). Uma solução alternativa é usar um pacote mínimo da autoridade de certificação, retirando o certificado de autoridade de certificação relevante de /etc/pki/tls/certs/ca-bundle.crt e especificando o caminho resultante em CURLOPT_CAINFO .

Problema: A parte que falta é como integrar isso automaticamente no processo de lançamento, para que

  1. verifica se o certificado do host é confiável e
  2. extrai o certificado da CA que foi usado para verificar o certificado do host em um arquivo separado.

Isso é necessário para garantir que, se o host alterar o provedor de certificados (raro e improvável), ainda possamos alterar facilmente nosso pacote.

Como posso fazer o último ponto de forma confiável? openssl s_client -connect example.com:443 -showcerts não mostra nem a série do certificado de verificação nem seu conteúdo completo. As propriedades C / O / CN devem obviamente ser exclusivas no pacote CA, mas parece difícil confiar na análise disso e não sei como consultar confiavelmente (em vez de adicionar fragilidade por grep ping) o pacote CA para uma combinação de C / O / CN.

Versões relevantes:

# php --version | head -n1
PHP 5.4.16 (cli) (built: Nov  6 2016 00:29:02)
# rpm -qi libcurl | grep ^Version
Version     : 7.29.0
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
# uname --kernel-name --kernel-release --kernel-version --processor
Linux 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64
    
por l0b0 17.05.2017 / 17:46

0 respostas