我是CURL世界的新手,来自Windows + .NET域.
尝试访问Rest API以进行基本身份验证,网址为http://www.evercam.io/docs/api/v1/authentication.
curl -X GET https://api.evercam.io/v1/... \ -u {username}
成功完成CURL后,不知道如何在Windows命令提示符下使用此命令.经过测试的CURL如下:
C:\>curl --version curl 7.33.0 (x86_64-pc-win32) libcurl/7.33.0 OpenSSL/0.9.8y zlib/1.2.8 libssh2/1.4.3 Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp s ftp smtp smtps telnet tftp Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz
现在我以此结束
C:\>curl -u myuser:mypassword -X GET https://api.evercam.io/v1/ curl: (51) SSL: no alternative certificate subject name matches target host name 'api.evercam.io'
如何修复此SSL问题51错误?
证书中的通用名称api.evercam.io
是for,*.herokuapp.com
并且证书中没有替代主题名称.这意味着证书api.evercam.io
与主机名不匹配,因此证书验证失败.与true相同www.evercam.io
,例如使用浏览器尝试https://www.evercam.io并收到错误消息,证书中的名称与主机名不匹配.
所以这是一个需要由evercam.io修复的问题.如果您不关心安全性,中间人攻击等,您可能会禁用证书验证(curl --insecure
),但是您应该问自己为什么要使用https而不是http.
我知道这是一个(非常)陈旧的问题而且它是关于命令行的,但是当我搜索Google"SSL:没有替代证书主题名称与目标主机名匹配"时,这是第一次点击.
我花了很长时间才弄清楚答案,所以希望这能节省很多时间!在PHP中将此添加到您的cUrl setopts:
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
ps:这应该是一个临时解决方案.由于这是证书错误,最好的办法是将证书固定好!
如果您想关闭curl对证书的验证,请使用-k
(或--insecure
)选项.
更多信息可以在这里找到:http://curl.haxx.se/docs/sslcerts.html