我需要在邮递员中运行此字符串
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
当我以原始数据导入Postman时,出现此错误 导入Curl时出错:找到4个无选项的参数。仅支持一个(URL)
通过VPN连接的服务器具有3个证书和1个密钥端点证书,端点颁发subCA证书,根CA证书以及以下格式的端点私钥
您的端点私钥:
-----开始使用RSA私钥-----
我的关键内容
-----结束RSA私钥-----
您的端点证书
----- BEGIN证书-----我的证书内容 -----结束证书-----
颁发subCA证书的端点
----- BEGIN证书-----我的证书内容----- END 证书-----
根CA证书
----- BEGIN证书-----我的证书内容----- END 证书-----
现在,我通过将所有这些键复制到单个文件中来创建一个pem文件,并尝试在php和postman中使用。我分享了上面的Postmam错误。 PHP代码错误为Curl错误:无法加载PEM客户端证书,OpenSSL错误错误:0906D06C:PEM例程:PEM_read_bio:没有起始行,(找不到密钥,错误的密码短语或错误的文件格式?)没有返回HTTP代码< / p>
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文件?
答案 0 :(得分:1)
您正在创建一个临时文件(当然,它是空的-它是刚刚创建的),然后尝试将其用作证书。您说您已经创建了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");