最近,我决定为我的 php 商店添加 Banklink 支付选项,在阅读了实现规范后,一切似乎都很好,但其中的 1 点。所有公钥(证书)交换均采用X509格式。现在,最后一个是什么意思?它与常规密码保护的 .pem 文件有何不同?另外,对于常规密码保护的 .pem 文件,我无法使用 php 函数,例如 openssl_verify() 被...签名 openssl_sign() 功能。

我可以在这里得到一些建议吗,因为提供这种付款方式的银行对此的信息很少,而且我对此完全陌生。

所以我在这里需要做的例程是为他们生成 request.pem 并将其发送给他们。之后他们会签署它或我不知道的任何东西,我应该能够在我的应用程序中使用它。

请告诉我我的信息是否不够,因为正如我所说,我对证书或 openssl 知之甚少。

有帮助吗?

解决方案

PEM 文件包含加密和 Base64 编码的“原始”证书/私钥值,因此使用 PEM 的函数也应该使用原始证书。OpenSSL 应该能够从一种格式转换为另一种格式。

其他提示

你必须使用 curl 概念。

curl_setopt($ch, CURLOPT_SSLCERT,'CA.pem');

老实说,PHP 中的 OpenSSL 功能很糟糕。你最好的选择是选择一个很棒的套餐,比如 phpseclib.

很久以前我也在做类似的事情。不同的是他们只是给了我 pem 文件,我用它来连接到他们的服务器。

下面我为大家写下我的猜测。:)

  1. 使用 openssl 工具生成 myreq.pem。
  2. 将 myreq.pem 发送给他们并获取签名证书 ca.pem。
  3. 在 PHP 中使用 ca.pem,如下所示。

 

$context = stream_context_create();
stream_context_set_option($context, 'ssl', 'verify_peer', false); //or can be true
stream_context_set_option($context, 'ssl', 'cafile', "ca.pem");
stream_context_set_option($context, 'ssl', 'local_cert', "ca.pem");
stream_context_set_option($context, 'ssl', 'passphrase', 'your pem file password');
//instead tls can be ssl, sslv3, sslv2 depending requirements, 10 is timeout
$sock = stream_socket_client("tls://host:port", $errno, $errstr, 10, STREAM_CLIENT_CONNECT, $context); 
fwrite($sock, "Hi server\r\n");
$strResponse;
while(!feof($sock)) { $strResponse = $strResponse . fgets($sock, 1024); }
fclose($s);
echo $strResponse;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top