Passing .PEM and .KEY as string in Curl using PHP

前端 未结 4 2013
星月不相逢
星月不相逢 2021-02-12 20:56

I\'ve a CERT and private key files. I\'m using cUrl and PHP to connect to another service. At the moment, I\'ve cert and key in files and it works perfectly fine with following

相关标签:
4条回答
  • 2021-02-12 21:19

    You could create temporary files, write the strings into the files and then point to the temp files...

    0 讨论(0)
  • 2021-02-12 21:25

    I'm not SSL Expert but CURLOPT_SSLKEY is private.pem file of the CURLOPT_SSLCERT public.pem file?

    My parameters

    CURLOPT_CAINFO => /path/cacert.pem
    CURLOPT_SSLKEY => /path/private.pem
    CURLOPT_SSLCERT => /path/public.pem
    

    Try my suggested answer and let me know if it is helpful or not.

    0 讨论(0)
  • 2021-02-12 21:26

    Using tmpfile() might suffice as a workaround.

    $tempPemFile = tmpfile();
    fwrite($tempPemFile, $pemfile);
    $tempPemPath = stream_get_meta_data($tempPemFile);
    $tempPemPath = $tempPemPath['uri'];
    

    and then:

    curl_setopt($ch, CURLOPT_SSLCERT, $tempPemPath); 
    

    but make sure you close it after so the tmp file is delete

    fclose($tempPemFile);
    
    0 讨论(0)
  • 2021-02-12 21:41

    The answer is unfortunately as easy as it is simple: No, it is not possible.

    The underlying libcurl has no API for providing keys as strings, only as files!

    Bonus material:

    If you're sure that your libcurl is built with OpenSSL, you can actually use the CURLOPT_SSL_CTX_FUNCTION option to do it. However:

    1. that makes it an libcurl+OpenSSL specific solution

    2. I don't think PHP/CURL exposes that function (enough) to allow this. You would probably need to extend the binding code first...

    (I should add that I am the main author and maintainer of libcurl.)

    0 讨论(0)
提交回复
热议问题