我正在尝试使用CURL对服务器进行SOAP调用,如下所示。
要求是
我们需要传递ssl证书并传递用户名和密码
$ssl = "ssl_file_relative_address.pem";
$pub_ssl_password = 'mynameiskhan';
//Get the data
$data = the_data_xml.xml;
//Get the WSDL Address
$wsdl = "address/to/wsdl?parameter=value";
$soapUser = "Username"; // username
$soapPassword = "password"; // password
$options = [
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_URL => $wsdl,
CURLOPT_SSLCERT => $ssl,
//CURLOPT_SSLCERTPASSWD => $pub_ssl_password,
CURLOPT_USERPWD => $soapUser.":".$soapPassword,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC
];
$ch = curl_init();
curl_setopt_array($ch , $options);
$response = curl_exec($ch);
//curl_close($ch);
if (curl_errno($ch)) {
print curl_error($ch);
}
我从CURL收到以下错误:无法使用客户端证书(找不到密钥或错误的密码短语?)
我做错了什么......
答案 0 :(得分:1)
找到解决方案。它需要一个中级CA证书 解决方案是
{{1}}
不要忘记将CURLOPT_HTTPHEADER提及其内容类型,这很重要 同时从https://curl.haxx.se/ca/cacert.pem下载中间证书。它包含所有有效的CA.
感谢@ drew010寻求帮助。
答案 1 :(得分:0)
使用CURLOPT_SSLCERT
指定客户端身份验证证书时,PEM文件应包含-----BEGIN CERTIFICATE-----
行,后跟证书。
您还需要使用CURLOPT_SSLKEY
来提供cURL以及证书的相应私钥,-----BEGIN PRIVATE KEY-----
是以ssl_file_relative_address.pem
开头的文件。
如果私钥位于CURLOPT_SSLKEYPASSWD
,请尝试将私钥复制到单独的文件中。
如果私钥已加密,您可以使用public static MvcHtmlString Test<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
var someCondition = false;
if (someCondition)
{
// Return some domain specific html.
return new MvcHtmlString("<div></div>");
}
else
{
var result = expression.Compile();
TModel model = html.ViewData.Model;
var value = result(model);
var r = new MvcHtmlString(value.ToString());
return r;
}
}
指定密码。