php - 带有密码的 JKS 文件,用于访问金融学院的 API

标签 php ssl keytool pkcs#12 jks

我从一家金融机构收到了一个用密码加密的 JKS 文件。 API 使用端口 444。当我将 JKS 文件和密码与 SoapUI(首选项 -> SSL 设置 -> KeyStore [文件] + KeyStore 密码)一起使用时,我能够发送和接收 XML 请求和响应。没有 JSK 文件和密码,如果我尝试访问 URL,则浏览器不会加载 API 页面。

安装文件并向浏览器提供密码后(Firefox -> 选项 -> 高级 -> 查看证书 -> 导入);页面结果显示Not proper request' [XML format](即能够访问带有证书的页面)。

我将文件转换为 P12/PEM(使用:keytool -importkeystore -srckeystore keystore.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore keystore.p12)——它的工作方式与上面相同(对于 SoupUI 和浏览器)。

现在我喜欢在 IIS 开发服务器和 Apache 生产服务器上的 PHP 代码中使用这个文件 (JKS/PEM)。在执行过程中,我得到:错误:SSL 证书问题:无法获取本地颁发者证书

注意:具有相同密码的相同 JKS 文件被另一个具有 Python 环境的供应商使用正常。

请提出解决方案。

谢谢。

最佳答案

首先需要将 JKS 文件转换为您的 PHP 代码可以使用的 PEM。

那么应该这样做:

$options = array(
  CURLOPT_RETURNTRANSFER  => true,          // return web page
  CURLOPT_PORT            => <Port#>,           //Post
  CURLOPT_CAPATH          => $ca_path,      //CA Path ***and not filename
  CURLOPT_CAINFO          => $cert_file,    //Certificate File
  CURLOPT_SSLCERT         => $key_file,     //SSL file
  CURLOPT_SSLKEYPASSWD    => $key_password, //Public Key
  CURLOPT_HTTPHEADER      => $aHeaders,     //Header
  CURLOPT_POST            => 1,            //Send POST
  CURLOPT_POSTFIELDS      => $xml,         //To Fetch Data
  CURLINFO_HEADER_OUT     => $properties,  //Application's Username and password
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
$err = curl_errno($ch);
$errmsg = curl_error($ch);
$header = curl_getinfo($ch);
curl_close($ch);

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;

关于php - 带有密码的 JKS 文件,用于访问金融学院的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471112/

相关文章:

windows - cURL 访问 SSL 时无法使用curl-ca-bundle.crt

php - 通过未加密的 JSON 发送人名的足够安全的方法

tomcat - 如何使用更新的 SSL 证书更新 Tomcat keystore ?

php - Wordpress 标题中的双标题 - 没有 seo 插件

php - 将大数据文件导入 MysQL 的最佳方式

ssl - AWS 负载均衡器始终将 443 路由到 8443

ssl - Keytool - 将证书导入 keystore

java - 无法使用 java/keytool 签署挖掘签名

php - SQLSTATE[23000] : Integrity constraint violation: 1062

php - 通过 php 将数据插入 MySQL,并指定过期日期