如何将自签名证书与 XAMPP 一起用于使用 cURL 的 HTTPS 请求?

Posted

技术标签:

【中文标题】如何将自签名证书与 XAMPP 一起用于使用 cURL 的 HTTPS 请求?【英文标题】:How to use a self signed certificate with XAMPP for HTTPS requests using cURL? 【发布时间】:2013-01-05 05:01:51 【问题描述】:

我安装了 XAMPP,我需要测试一些 HTTPS 请求。首先,我尝试配置 XAMPP,以便可以使用 HTTPS 请求。

这就是我所做的:

1) 在 php.ini 文件中,我取消了 openssl module 的注释。

2) 在 httpd.conf 文件中,我取消了 LoadModule ssl_module modules/mod_ssl.so 的注释

3) 在 httpd-ssl.conf 文件中,我重定向了

SSLCertificateFile "conf/ssl.crt/ipm.crt"

SSLCertificateKeyFile "conf/ssl.key/ipm.key" 到我的 .crt 和 .key 文件。

4) 我将 ipm.crt 和 ipm.key 文件放在 XAMPP 内的 apache 文件夹 ssl.crtssl.key 中。

5) 我通过以下方式创建了我的自签名证书:

openssl req -config openssl.cnf -new -out ipm.csr -keyout ipm.pem

openssl rsa -in ipm.pem -out ipm.key

openssl x509 -in ipm.csr -out ipm.crt -req -signkey ipm.key -days 365

现在我正在使用一个脚本来发送一个 XML 文件。我正在使用 cURL,我的代码是:

<?php
  /*
   * XML Sender/Client.
   */
  // Get our XML. You can declare it here or even load a file.


  $xml = file_get_contents("data.xml");


  // We send XML via CURL using POST with a http header of text/xml.
  $ch = curl_init();

  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

  curl_setopt($ch, CURLOPT_CAINFO,  getcwd().'/cert/ipm.crt');
  curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'/cert/ipm.pem');
  curl_setopt($ch, CURLOPT_SSLCERTPASSWD,'password');


  //I use this line only for debugging through fiddler. Must delete after done with debugging.
  curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888');

  // set URL and other appropriate options
  curl_setopt($ch, CURLOPT_URL, "https://ipv4.fiddler/iPM/receiver.php");
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
  curl_setopt($ch, CURLOPT_REFERER, 'https://ipv4.fiddler/iPM/receiver.php');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $ch_result = curl_exec($ch);
  echo "Result = ".$ch_result;

  echo 'Curl error: ' . curl_error($ch);

  curl_close($ch);
  // Print CURL result.
?>

但我得到了这个错误:Curl error: unable to use client certificate (no key found or wrong pass phrase?)

但是,当我创建证书时,我确实将以下短语作为密码:password

对此事有什么想法吗?

【问题讨论】:

【参考方案1】:

相信你还需要指定CURLOPT_SSLKEYPASSWD

curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'password');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, 'password');

【讨论】:

您确定密码正确吗?试试这个:openssl rsa -in ipm.key。它会提示您输入密码。 它给了我: -----BEGIN RSA PRIVATE KEY----- 许多字符,如编码 -----END RSA PRIVATE KEY--- -- 它没有提示我做某事 如果从脚本中删除 CURLOPT_SSLCERTPASSWD 和 CURLOPT_SSLKEYPASSWD 会发生什么? 我再次遇到同样的错误,但我想我知道问题出在哪里。当我使用它时: curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/cert/ipm.crt'); curl_setopt($ch, CURLOPT_SSLCERT, getcwd().'/cert/ipm.pem');首先这些是正确的吗?我不记得我在哪里读到这样写的。其次,他们到底指向哪里?我将我的证书放在我的项目工作区中一个名为 cert 的文件夹中。可能路径错了? 因为在 CURLOPT_CAINFO 我使用 .crt 而在 CURLOPT_SSLCERT 我使用 pem。这似乎有点奇怪?

以上是关于如何将自签名证书与 XAMPP 一起用于使用 cURL 的 HTTPS 请求?的主要内容,如果未能解决你的问题,请参考以下文章

仅将自签名 SSL 证书用于 Web 服务

如何将自签名证书正确导入默认情况下可供所有 Java 应用程序使用的 Java 密钥库?

如何将自签名证书分配给 AWS 弹性 beantalk 应用程序

如何编辑使用 openssl xampp 创建的自签名证书?

将自签名证书添加到iphone Simulator?

如何将自签名 SSL 证书上传到 Elastic Beanstalk