我需要连接到一个公司的API使用PFX文件和密码使用oauth2。
我不太熟悉使用PFX文件,也不知道如何使用PFX文件和密码连接到API。我在SO上看了看,但没有找到很多帮助我开始的东西。我搜索了谷歌,但找到了一些文档和示例代码,没有一个工作。我找到了下面的代码,但它不适合我。有人能帮助我让它工作吗?
我发现并正在尝试使用的代码如下:
<?php
$url = "https://myaccounts.domain.com/auth/oauth/v2/token";
$cert_file = 'my_auth.pfx';
$cert_password = '1234567890';
$ch = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => true,
//CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
//CURLOPT_VERBOSE => true,
CURLOPT_URL => $url ,
CURLOPT_SSLCERT => $cert_file ,
CURLOPT_SSLCERTPASSWD => $cert_password ,
);
curl_setopt_array($ch , $options);
$output = curl_exec($ch);
if(!$output)
{
echo "Curl Error : " . curl_error($ch);
}
else
{
echo htmlentities($output);
}
?>
字符串
上面的代码给了我以下错误:
Curl Error: could not load PEM client certificate, OpenSSL error error:02001002:system library:fopen:No such file or directory, (no key found, wrong pass phrase, or wrong file format?)
型
密钥也在同一个目录中,所以我不知道为什么找不到它。也许我对PFX文件的使用方法是错误的。
3条答案
按热度按时间7d7tgy0s1#
我的做法完全错误。从我所读到的和我收集的信息来看,最好将PFX文件转换为PEM文件。我使用cygwin和所有必要的包和openssl完成了这一点。一旦PFX文件转换为PEM,我就使用具有必要凭据的curl命令连接到我需要从中提取数据的API。我从bash shell运行的命令如下:
字符串
我收到了以下回复:
型
我还可以使用postman验证这个连接,并且我始终得到相同的响应。
我根据我所做的研究进一步开发了我的需求的解决方案。下面是使用cURL的PHP解决方案。下面是两个函数和一个if条件。if条件根据访问令牌是否已经添加到会话中来触发适当的函数。如果没有添加到会话中,它将根据需要添加的凭据来获取它。如果已经添加到会话中,然后继续获取所需的数据。
我使用php curl文档来扩展我的OP:http://php.net/manual/en/book.curl.php
型
tktrz96b2#
实际上,我有一个
.pfx
文件,我将其转换为pem
使用openssl pkcs12 -in cert_file.pfx -out cert_file.pem
个然后我在Linux中使用
pwd
命令找到了确切的路径,路径变成了类似于/home/user/cert_file.pem
的样子。但是我面临的问题是没有文件权限。所以只是为了测试我给了
777
文件权限。你当然可以给予一个适当的权限。然后我的响应开始工作。我用过这种 curl 设置
字符串
现在一切都在工作,我得到了回应。
对于 curl ,我使用了以下设置
1.打开终端ctrl+alt+t
1./etc/ssl/certs/
1.检查.curlrc文件是否在您的主文件夹中可用。
1.现在将下面的行粘贴到打开的文件中
型
1.现在保存文件并使用curl命令做你的事情。
1.重启Apache服务器
qyyhg6bp3#
只需在选项数组中添加以下curl选项:
字符串
还是这样
型
这对我很有效