O OpenSSL pelo menos até a versão atual (1.0.2a) tem um bug em que s_client
com NO -CA{path,file}
argumento não usa o armazenamento de confiança padrão deve, e assim falha ao verificar certificados que são válidos de acordo com esse armazenamento confiável. (Também s_server
e s_time
, mas se preocupando com a verificação naqueles é raro.) Veja link . Uma correção é anunciada no dev, mas pode levar algum tempo para ser liberada e distribuída. Enquanto isso, você precisa especificar explicitamente o -CA*
argumento (s). Observe que openssl verify
não possui esse bug e, portanto, relatou corretamente o certificado / cadeia como válido.
ATUALIZAÇÕES 2015/08/26: correção foi lançada 2015/06/12 em 1.0.1o e 1.0.2c. Além disso, enquanto investigava outra coisa, descobri que os pacotes RedHat podem ter sido bons . Mais especificamente, o RPM de origem do CentOS para openssl-1.0.1e-30.el6.11
que eu entendo é uma cópia do RedHat (mas não pode confirmar facilmente) contém openssl-1.0.1c-default-paths.patch
que contém alterações para s_client.c s_server.c s_time.c
de 2012/12/06 que parecem equivalentes a ( embora não seja textualmente o mesmo que) as correções upstream de 2015/06/12. Assumindo que esse patch foi aplicado nos pacotes RedHat e CentOS, que não posso facilmente voltar e verificar, eles (teriam) funcionado (ed) como esperado.