verify

摘要

请求时验证SSL证书行为。

  • 设置成 true 启用SSL证书验证,默认使用操作系统提供的CA包。
  • 设置成 false 禁用证书验证(这是不安全的!)。
  • 设置成字符串启用验证,并使用该字符串作为自定义证书CA包的路径。

类型

  • bool
  • string

默认值

true

常量

GuzzleHttp\RequestOptions::VERIFY

  1. // Use the system's CA bundle (this is 默认设置)
  2. $client->request('GET', '/', ['verify' => true]);
  3. // Use a custom SSL certificate on disk.
  4. $client->request('GET', '/', ['verify' => '/path/to/cert.pem']);
  5. // Disable validation entirely (don't do this!).
  6. $client->request('GET', '/', ['verify' => false]);

并非所有的系统磁盘上都存在CA包,比如,Windows和OS X并没有通用的本地CA包。 当设置”verify” 为 true 时,Guzzle将尽力在你的操作系统中找到合适的CA包, 当使用cURL或PHP 5.6以上版本的流时,Guzzle将按以下顺序尝试查找CA包:

  1. 检查php.ini文件中是否设置了 openssl.cafile
  2. 检查php.ini文件中是否设置了 curl.cainfo
  3. 检查 /etc/pki/tls/certs/ca-bundle.crt 是否存在 (Red Hat, CentOS, Fedora; 由ca-certificates包提供)
  4. 检查 /etc/ssl/certs/ca-certificates.crt 是否存在 (Ubuntu, Debian; 由ca-certificates包提供)
  5. 检查 /usr/local/share/certs/ca-root-nss.crt 是否存在 (FreeBSD; 由ca_root_nss包提供)
  6. 检查 /usr/local/etc/openssl/cert.pem 是否存在 (OS X; 由homebrew提供)
  7. 检查 C:\windows\system32\curl-ca-bundle.crt 是否存在 (Windows)
  8. 检查 C:\windows\curl-ca-bundle.crt 是否存在 (Windows)

查询的结果将缓存在内存中,以便同一进程后续快速调用。 然而在有些服务器如Apache中每个请求都在独立的进程中,你应该考虑设置 openssl.cafile 环境变量,指定到磁盘文件,以便整个过程都跳过。

如果你不需要特殊的证书包,可以使用Mozilla提供的通用CA包,你可以在 这里 下载(由cURL的维护者提供)。 一旦磁盘有了CA包,你可以设置PHP ini配置文件,指定该文件的路径到变量 openssl.cafile 中,这样就可以在请求中省略 “verify” 参数。 你可以在 cURL 网站 发现更多关于SSL证书的细节。