PHP 和 Postman Curl 无选项错误和证书处理



我需要在邮递员中运行这个字符串

curl -i -X POST -H “SOAPAction: urn:nhs-itk:services:201005:getNHSNumber-v1-0” -H “content-type: text/xml” –E pem_filename.pem -d @getNHSNumber.xml -k https://someip/smsp/pds

当我导入邮递员us原始数据时,出现此错误 导入 Curl 时出错:找到 4 个无选项参数。仅支持一个(网址(

我通过 VPN 连接,并具有以下格式的 3 个证书和 1 个密钥端点证书、颁发子 CA 证书的端点、根 CA 证书和端点私钥

您的终端节点私钥:

-----开始 RSA 私钥

-----

我的主要内容

-----结束 RSA 私钥

-----

您的终端节点证书

-----开始证书-----我的证书内容 -----结束证书

-----

颁发子 CA 证书的端点

-----开始证书-----我的证书内容-----结束 证书-----

根 CA 证书

-----开始证书-----我的证书内容-----结束 证书-----

现在,我通过将所有这些键复制到单个文件中,从所有这些键中创建了一个 pem 文件,并尝试在 php 和 postman 中使用。我在上面分享了Postmam错误。PHP 代码错误是 curl 错误:无法加载 PEM 客户端证书,OpenSSL 错误错误:0906D06C:PEM 例程:PEM_read_bio:无起始行,(找不到密钥、密码短语错误或文件格式错误?未返回任何 HTTP 代码

PHP代码

<?php
$url = "https://myip/smsp/pds";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
$pemFile = tmpfile();
fwrite($pemFile, "abc.pem");//the path for the pem file
$tempPemPath = stream_get_meta_data($pemFile);
$tempPemPath = $tempPemPath['uri'];
curl_setopt($ch, CURLOPT_SSLCERT, $tempPemPath); 
//curl_setopt($ch, CURLOPT_SSLCERT, "test.pem" );
curl_setopt($ch,CURLOPT_SSLCERTTYPE,"PEM");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$post = array(
    "file" => "@" .realpath("getNHSNumber.xml")
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
if(!$result)
{
    echo "Curl Error: " . curl_error($ch);
}
else
{
    echo "Success: ". $result;
}
$info = curl_getinfo($ch);
curl_close($ch); // close cURL handler
?>

我的问题是 如何在 php 中运行它?在邮递员?我是否创建了正确的 PEM 文件?

您正在创建一个临时文件(当然,该文件将为空 - 它刚刚创建(,然后尝试将其用作证书。您说您已经创建了 PEM 文件(通过连接根 CA、中间 CA 和终端节点证书( - 因此只需将 CURL 指向此文件:

curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_PORT , 443);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSLVERSION, 1);
curl_setopt($curl, CURLOPT_SSLCERT, "/var/www/project/concatenated.pem");
curl_setopt($curl, CURLOPT_SSLKEY, "/var/www/project/my_key.pem");
curl_setopt($curl, CURLOPT_CAINFO, "/etc/ssl/certs/ca-bundle.pem");
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 2);

如果您的密钥受密码保护,则应添加

curl_setopt($curl, CURLOPT_KEYPASSWD, "password");

相关内容

最新更新