PHP和cURL-CURLOPT_SSL_VERIFYHOST没有效果。为什么?
我试图编写PHP代码,通过IP地址向HTTPS端点发出cURL请求。现在,问题是我有端点的公共证书,但是端点的IP地址可能会改变,DNS在这里不是一个选项 ,似乎如果我将PHP和cURL-CURLOPT_SSL_VERIFYHOST没有效果。为什么?,php,curl,Php,Curl,我试图编写PHP代码,通过IP地址向HTTPS端点发出cURL请求。现在,问题是我有端点的公共证书,但是端点的IP地址可能会改变,DNS在这里不是一个选项 ,似乎如果我将CURLOPT\u SSL\u VERIFYHOST设置为0,应该就可以了。不过,为了安全起见,我想保持CURLOPT\u SSL\u VERIFYPEER处于打开状态 下面是设置cURL调用的相关PHP代码: curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt(
CURLOPT\u SSL\u VERIFYHOST
设置为0
,应该就可以了。不过,为了安全起见,我想保持CURLOPT\u SSL\u VERIFYPEER
处于打开状态
下面是设置cURL调用的相关PHP代码:
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_CAINFO, $remoteCertificate);
理论上,这应该验证证书是否与我通过CURLOPT_CAINFO
传入的证书匹配,但是,当代码实际运行时,似乎会忽略VERIFYHOST
选项,我得到:
* Trying 127.0.0.1:4343...
* Connected to 127.0.0.1 (127.0.0.1) port 4343 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /projects/scratchpad/certs/selfsigned.crt
CApath: none
* SSL certificate problem: self signed certificate
* Closing connection 0
这是该证书的外观(它是一个简单的自签名证书):
我做错什么了吗?cURL似乎仍在尝试验证服务器的主机名,但显然失败了。(如果我创建了另一个自签名证书,但其CN与IP匹配,这是可行的,但这不是我想要的)
在任何人评论禁用这是一个坏主意之前,我的具体用例是,我不在乎谁实际持有证书。我只关心它是否是有效的证书,因为有其他机制可以选择性地选择正确的公共证书并将其提供给CAINFO
,将一台服务器与单个证书匹配(尽管这有点超出了本文的范围)
TLDR:有没有办法使cURL不验证证书的公共名称,但仍然验证证书在其他方面是否有效?谢谢
Certificate:
Data:
Version: 3 (0x2)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = XX, L = Default City, O = Default Company Ltd, CN = testcertificate
Subject: C = XX, L = Default City, O = Default Company Ltd, CN = testcertificate
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)