Usando o Guzzle para interagir com um serviço da web que requer certificados SSL do cliente, eu recebia consistentemente um erro informando que o certificado não podia ser carregado:
$httpClient->send($request, [
'curl' => [
CURLOPT_SSLCERT => 'path/to/cert.pem'
]
]);
Erro cURL 58: SSL: Não é possível carregar o certificado e sua chave privada: OSStatus -61
O problema era que o cURL integrado do OSX usa a própria biblioteca de transporte seguro da Apple em vez de OpenSSL e, portanto, apenas os certificados de formato P12 são suportados.
A opção óbvia é converter seu certificado no formato esperado:
$ openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.p12
Se estiver usando o Homebrew, há outra opção.
Por padrão, quando o cURL é instalado via Homebrew, ele usa a biblioteca Secure Transport do sistema. Para reinstalá-lo com OpenSSL:
$ brew rm curl && brew install curl --with-openssl
Então, por padrão, o PHP faz uso da versão do sistema do cURL. Para usar a versão Homebrew de cURL:
$ brew uninstall php56 && brew install php56 --with-homebrew-curl
Reinicie seu servidor da web para carregar a biblioteca PHP atualizada e agora deve suportar o certificado de formato PEM.