php - 为什么在使用 PHP cURL 时不需要避免 SSL 检查但可以请求 HTTPS 资源

标签 php ssl curl https

我在 PHP 中使用 curl 来请求一些 https 站点,例如 https://github.com,我只使用如下代码:

<?php 
   $ch = curl_init(); 
   curl_setopt($ch, CURLOPT_URL, "https://github.com/search?q=react"); 
   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
   $output = curl_exec($ch); 

   echo $output;

   curl_close($ch);      
?>

然后,我就可以获取页面了。

但是,我之前搜索了一下,发现如果请求一个https资源,需要添加这些代码:

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

那为什么不用这两行代码就可以请求https资源来避开SSL检查呢?

谢谢。

最佳答案

两个 Curl 选项定义为:

CURLOPT_SSL_VERIFYPEER - verify the peer's SSL certificate

CURLOPT_SSL_VERIFYHOST - verify the certificate's name against host

它们在 Curl 中都默认为 true,除非您有充分的理由,否则不应将其禁用。通常仅当您向具有无效证书或自签名证书的服务器发送请求时才需要禁用它们,这通常只是开发中的一个问题。任何面向公众的站点都应出示有效证书,如果禁用这些选项,您可能会面临安全问题。

关于php - 为什么在使用 PHP cURL 时不需要避免 SSL 检查但可以请求 HTTPS 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824842/

相关文章:

php - 表单提交后 $_post 仍为空

javascript - json数据值类型

php - 如何在 SQL 中执行多个更新查询

java - 为什么 Java SSL 连接仍然对相同的客户端和服务器套接字使用相同的密码?

ssl - 将新的客户端证书添加到 NSS 数据库

php - 检查我的页面是否嵌入到 iframe 中

ssl - 为 strpi 项目运行 npm i 时证书链中的自签名证书

http - 代理服务器在代理https请求时做了什么

java - 如何将curl代码转换成java

PHP 'curl' 不工作