首页 > 其他分享 >WAMP安装curl扩展并发起https请求

WAMP安装curl扩展并发起https请求

时间:2023-01-09 14:00:28浏览次数:63  
标签:certificate CA server SSL https WAMP curl CURLOPT


wamp安装curl扩展的方法:

 

 

安装出现 PHP Extension "curl" must be loaded 错误。
解决方法如下:
1> 在 WAMP或XAMPP 目录下“搜索”功能查找到 httpd.conf:

 

                   把

 

#LoadModule rewrite_module modules/mod_rewrite.so

 

                   改

 

LoadModule rewrite_module modules/mod_rewrite.so

 

         (只是去除 # 号)

 

         2> 用上面同样的方法查找到 php.ini( 这里可能有两个 php.ini 文件,两个都要改 )

 

 

;extension=php_mcrypt.dll

 

 

                    extension=php_mcrypt.dll

 

 

 

 

;extension=php_curl.dll

 

 

                    extension=php_curl.dll

 

 

                     ;extension=php_pdo_mysql.dll

 

 

                    extension=php_pdo_mysql.dll

 

( 只是去除 ; )

 

​​http 使用curl发起https请求​​



今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed”

很明显,验证证书的时候出现了问题。

使用curl如果想发起的https请求正常的话有2种做法:

方法一、设定为不验证证书和host。

在执行curl_exec()之前。设置option

$ch = curl_init();

......

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

 

方法二、设定一个正确的证书。



本地ssl判别证书太旧,导致链接报错ssl证书不正确。

我们需要下载新的ssl 本地判别文件

​http://curl.haxx.se/ca/cacert.pem​

放到 程序文件目录

curl 增加下面的配置

   curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); ;
   curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem');

大功告成

(本人验证未通过。。。报错信息为:SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed)

如果对此感兴趣的话可以参看国外一大神文章。​​http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/​

为了防止某天该文章被Q今复制过来。内容如下:

Using cURL in PHP to access HTTPS (SSL/TLS) protected sites

From PHP, you can access the useful ​​cURL Library (libcurl)​​​ to make requests to URLs using a variety of protocols such as HTTP, FTP, LDAP and even ​​Gopher​​​. (If you’ve spent time on the *nix command line, most environments also have the ​​curl​​ command available that uses the libcurl library)

In practice, however, the most commonly-used protocol tends to be HTTP, especially when using PHP for server-to-server communication. Typically this involves accessing another web server as part of a web service call, using some method such as ​​XML​​​-RPC or REST to query a resource. For example, ​​Delicious​​​ offers ​​a HTTP-based API​​ to manipulate and read a user’s posts. However, when trying to access a HTTPS resource (such as the delicious API), there’s a little more configuration you have to do before you can get cURL working right in PHP.

 

The problem

If you simply try to access a HTTPS (SSL or TLS-protected resource) in PHP

// Initialize session and set URL. 
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url);
// Set so curl_exec returns the result instead of outputting it.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Get the response and close the channel.
$response = curl_exec($ch);
curl_close($ch);

If ​​$url​​ points toward an HTTPS resource, you’re likely to encounter an error like the one below:

Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

The problem is that cURL has not been configured to trust the server’s HTTPS certificate. The concepts of certificates and PKI revolves around the trust of Certificate Authorities (CAs), and by default, cURL is setup to not trust any CAs, thus it won’t trust any web server’s certificate. So why don’t you have problems visiting HTTPs sites through your web browser? As it happens, the browser developers were nice enough to ​​include a list of default CAs to trust​​, covering most situations, so as long as the website operator purchased a certificate from one of these CAs.

The quick fix

There are two ways to solve this problem. Firstly, we can simply configure cURL to accept any server(peer) certificate. This isn’t optimal from a security point of view, but if you’re not passing sensitive information back and forth, this is probably alright. Simply add the following line before calling ​​curl_exec()​​:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

This basically causes cURL to blindly accept any server certificate, without doing any verification as to which CA signed it, and whether or not that CA is trusted. If you’re at all concerned about the data you’re passing to or receiving from the server, you’ll want to enable this peer verification properly. Doing so is a bit more complicated.

The proper fix

The proper fix involves setting the ​​CURLOPT_CAINFO​​​ parameter. This is used to point towards a CA certificate that cURL should trust. Thus, any server/peer certificates issued by this CA will also be trusted. In order to do this, we first need to get the CA certificate. In this example, I’ll be using the ​​https://api.del.icio.us/​​ server as a reference.

First, you’ll need to visit the URL

WAMP安装curl扩展并发起https请求_ldap

Then click on “View Certificate”:

WAMP安装curl扩展并发起https请求_php_02

Bring up the “Details” tab of the cerficates page, and select the certificate at the top of the hierarchy. This is the CA certificate.

WAMP安装curl扩展并发起https请求_ldap_03

Then click “Export”, and save the CA certificate to your selected location, making sure to select the X.509 Certificate (PEM) as the save type/format.

WAMP安装curl扩展并发起https请求_php_04

Now we need to modify the cURL setup to use this CA certificate, with ​​CURLOPT_CAINFO​​ set to point to where we saved the CA certificate file to.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/BuiltinObjectToken-EquifaxSecureCA.crt");

The other option I’ve included, ​​CURLOPT_SSL_VERIFYHOST​​ can be set to the following integer values:

  • 0: Don’t check the common name (CN) attribute
  • 1: Check that the common name attribute at least exists
  • 2: Check that the common name exists and that it matches the host name of the server

If you have ​​CURLOPT_SSL_VERIFYPEER​​​ set to false, then from a security perspective, it doesn’t really matter what you’ve set ​​CURLOPT_SSL_VERIFYHOST​​ to, since without peer certificate verification, the server could use any certificate, including a self-signed one that was guaranteed to have a CN that matched the server’s host name. So this setting is really only relevant if you’ve enabled certificate verification.

This ensures that not just any server certificate will be trusted by your cURL session. For example, if an attacker were to somehow redirect traffic from api.delicious.com to their own server, the cURL session here would not properly initialize, since the attacker would not have access to a server certificate (i.e. would not have the private key) trusted by the CA we added. These steps effectively export the trusted CA from the web browser to the cURL configuration.

More information

If you have the CA certificate, but it is not in the PEM format (i.e. it is in a binary or DER format that isn’t Base64-encoded), you’ll need to use something like OpenSSL to convert it to the PEM format. The exact command differs depending on whether you’re converting from PKCS12 or DER format.

There is a ​​CURLOPT_CAPATH​​​ option that allows you to specify a directory that holds multiple CA certificates to trust. But it’s not as simple as dumping every single CA certificate in this directory. Instead, they CA certificates must be named properly, and the ​​OpenSSL c_rehash​​ to properly setup this directory for use by cURL.

 

标签:certificate,CA,server,SSL,https,WAMP,curl,CURLOPT
From: https://blog.51cto.com/kenkao/5997146

相关文章

  • [转载] 把网站免费从HTTP升级为HTTPS,是很简单的
    使用Let'sEncrypt的免费证书让网站升级为HTTPS,那么如何使用Let'sEncrypt的免费证书让网站升级为HTTPS呢?或许你在一个博客上看到右下角,或者时不时的弹出广告,这种就是运......
  • IIS部署https网站使用自签名证书
    转自:http://www.nat123.com/pages_8_751.jsp IIS部署https网站使用自签名证书及绑定域名的参考图文。(内网配置好https网站后可以使用nat123映射将网站映射到外网访问)1,......
  • Jmeter学习:录制http/https 脚本
    1.新建一个HTTPRequestDefaults设置好协议、IP、端口号2.jmeter当中建立http代理服务器3.启动代理服务器4.(仅录制https时)浏览器安装证书,证书路径在$JMETER_H......
  • http转向https
    很多时候我们在地址栏输入的是http,但是会自动转向到https,要实现这个功能,我们需要配置TomcatServletWebServerFactory书上讲的是EmbeddedServletContainerFactory,但是现......
  • curl命令
    打印curl总耗时echo"time_totalis%{time_total}s\n">curl-format.txtcurl-w"@curl-format.txt"-o/dev/null-s-Lhttp://localhost:1000/test-w:从文件中读取......
  • 加解密与HTTPS(6)
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~随着成本的下降,主流网站都已经开始使用HTTPS了。但有了可信机构颁发的证书,网站就真的绝对安全了吗?以之前出现过的上大学被......
  • HTTPS-自签CA证书
    环境:CentOS7httpd ssl安装httpdyuminstall-yhttpd 安装sslyuminstall-ymod_ssl搭建CA服务器1.生成私钥(CA机构)opensslgenrsa-outca.key2048 ......
  • 加解密与HTTPS(6)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~   随着成本的下降,主流网站都已经开始使用HTTPS了。但有了可信机构颁发的证书,网站就真的绝对安全了吗?以之前出现过......
  • wamp下载使用
    下载搜索wamp进官网下载就行,FQ更快下好打开,闪几个黑框后右下角有图标,右击图标->language->Chinese,即可切换中文模式配置php环境变量这个路径复制到path就行配置本地......
  • dart HttpSocket&HttpClient
    HttpSocketvarserver=awaitHttpServer.bind(InternetAddress.loopbackIPv4,4040,);print('Listeningonlocalhost:${server.port}');awaitfor(HttpReq......