Reputation: 3566
I'm trying to collect some data using Curl
, connecting to service that some external company provided. They, in addition to address itself, sent me p12
certificate file that is required to estabilish connection.
When I'm trying to use it with curl
, I get following error:
#58: not supported file type 'P12' for certificate
So far I've tried updating curl and php-curl. Nothing changed.
My code:
...
curl_setopt($ch, CURLOPT_SSLCERT, 'cert_path');
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'P12');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'my_pass');
...
Funny thing is that this code works on our production environment, while it doesn't work on my local machine (Linux Mint 16).
Upvotes: 17
Views: 30268
Reputation: 3566
Found the solution.
Easiest way to do this is to extract .pem
key and certificate from .p12
file.
For example (tested on linux
):
openssl pkcs12 -in file.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in file.p12 -out file.crt.pem -clcerts -nokeys
Will create key/cert pair in current directory.
Now, to use it:
curl_setopt($ch, CURLOPT_SSLCERT, 'file.crt.pem');
curl_setopt($ch, CURLOPT_SSLKEY, 'file.key.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'pass');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, 'pass');
Where pass
is the password from .p12
file.
Upvotes: 37