Permintaan SSL Curl 400 Permintaan Buruk

Saya mencoba membuat permintaan menggunakan php dan curl. Inilah contoh kerja yang saya gunakan dari baris perintah

curl -k --cacert c:/cert/server_ca.pem  --cert c:/cert/signed_client_cert.pem --key c:/cert/cert_req_rsa_private_key.pem 

inilah yang saya miliki sejauh ini, Ini mengembalikan 400 permintaan buruk, adakah yang tahu bagaimana saya bisa mendapatkan kesalahan yang lebih berguna atau kesalahan apa yang saya lakukan?

ini_set('display_errors',1);
//phpinfo();

$cert = "C:/cert/signed_client_cert.pem";
$key = "C:/cert/cert_req_rsa_private_key.pem";
$pass = "key1123";
$caInfo = "C:/cert/server_ca.pem";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.apitest.com/v/2/products/04003274058");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_CAINFO, $caInfo);
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
curl_setopt($ch, CURLOPT_SSLKEY, $key);
curl_setopt($ch, CURLOPT_VERBOSE, true);
//curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $pass);
//curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
//curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $pass);
//curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');


$response = curl_exec($ch);
echo curl_error($ch);
echo var_dump($response);

person kevinn2065    schedule 21.08.2014    source sumber


Jawaban (2)


Perintah curl tidak lengkap, jadi sulit untuk mengatakan apa yang mungkin (atau mungkin tidak) berbeda. Namun dari baris perintah, Curl menggunakan Accept: */*; dan tidak menggunakan Content-Type (lihat tangkapan Wireshark di bawah untuk curl www.google.com)).

Untuk membaca perbedaan antara Accept dan Content-Type, lihat https://webmasters.stackexchange.com/questions/31212/difference-between-accept-and-content-type-http-headers di Webmasters Stack Exchange.

masukkan deskripsi gambar di sini


Hanya pelepasan sepeda, namun masih ada ruang untuk perbaikan:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

Jika Anda merasa harus menggunakannya seperti itu, pilihlah protokol anonim. Ini akan menyelamatkan server dari pengiriman sertifikatnya karena tidak ada yang diverifikasi.

person jww    schedule 22.08.2014

Anehnya masalahnya sepertinya adalah bug di curl Php, saya beralih ke httprequest dan berhasil

person kevinn2065    schedule 29.08.2014