PHP和cURL-CURLOPT_SSL_VERIFYHOST没有效果。为什么?

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(

我试图编写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($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)