在SOAPUI中,我仅以SSL设置导入.pfx文件,然后测试API方法,并且该方法可以正常工作。现在,我想在SOAPUI中为我的PHP应用程序实现相同的工作示例。所以,我用CURL PHP来管理它。我所做的基本上是,将与SOAP UI中使用的证书相同的证书导入到PHP文件中。我想使用我的私钥使用我的公钥访问受保护的服务器。
更新:2018年6月29日
PFX文件:test-cert.pfx
$url = 'https://domain.com.ph/api/id_num';
$headers = array(
"Content-Type: application/json",
"token really_long_numbers",
);
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url );
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_PORT , 443);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 2);
curl_setopt($curl, CURLOPT_SSLVERSION, 1);
curl_setopt($curl, CURLOPT_SSLCERT, "/Applications/XAMPP/xamppfiles/htdocs/d/client.pem");
curl_setopt($curl, CURLOPT_SSLKEY, "/Applications/XAMPP/xamppfiles/htdocs/d/key.pem");
curl_setopt($curl, CURLOPT_SSLKEYPASSWD, "******");
curl_setopt($curl, CURLOPT_CAINFO, "/Applications/XAMPP/xamppfiles/htdocs/d/cacert.pem");
我尝试使用以下命令从PFX生成CA
openssl pkcs12 -in test-cert.pfx -out test-cert.pem -clcerts
AND / OR
openssl pkcs12 -in test-cert.pfx -out test-cert.pem -clcerts -nodes
现在是新错误
cURL错误#:SSL证书问题:无法获取本地发行者 证书
更新:2018年7月2日
我已经在php.ini文件中添加了以下行,当然,还从http://curl.haxx.se/ca/cacert.pem
下载了cacert.pem文件。[卷曲] ; CURLOPT_CAINFO选项的默认值。这必须是 ;绝对路径。
curl.cainfo="/Applications/XAMPP/xamppfiles/etc/openssl/certs/cacert.pem"
openssl.cafile="/Applications/XAMPP/xamppfiles/etc/openssl/certs/cacert.pem"
我的php.ini配置文件位于
Configuration File (php.ini) Path: /etc
Loaded Configuration File: /etc/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
并在curl中添加以下行
CURLOPT_CAINFO =>'/path/to/my/exported/cacert.pem'
CURLOPT_CAPATH =>'/path/to/my/exported/cacert.pem'
我还启用了Apache配置和php.ini中的以下行php_openssl.dll
和mod_ssl
最后,我也在cacert.pem
位置下载了ca-bundle.crt。
仍然无法正常运行。
答案 0 :(得分:1)
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_SSL_VERIFYPEER, 2);
curl_setopt($curl, CURLOPT_SSLVERSION, 1);
curl_setopt($curl, CURLOPT_SSLCERT, getcwd() . "/my_cert.pem");
curl_setopt($curl, CURLOPT_SSLKEY, getcwd() . "/my_key.pem");
curl_setopt($curl, CURLOPT_CAINFO, getcwd() . "/cacert.pem");
您需要指定全部3个-私钥(SSLKEY),公共证书(SSLCERT)和证书颁发机构链(CAINFO),直至根CA。 密钥和证书应为纯文本PEM格式,而不是PFX
openssl pkcs12 -in test-cert.pfx -out test-cert.pem -nodes
将http://curl.haxx.se/ca/cacert.pem(或也包含RSA-1024证书的https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt)下载到/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem
中
然后更新php.ini
并重新启动Apache
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
openssl.cafile="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"