Apache CURL error SSL:设置了CA证书,但未启用证书验证


Apache CURL error SSL: CA certificate set, but certificate verification is disabled

问题:每当我提交一个使用CURL的登录表单时,我的开发环境就会产生这个错误。CURL正在产生这个错误,我认为这与为SSL连接生成的证书有关。

我的开发环境是

  • Mac OS X Capitan 10.11
  • Apache 2.4/PHP 7.0.12

phpinfo ():

  • cURL: enabled/7.50.3/SSL: Yes/协议:dict、file、ftp、ftps、gopher、http、https、imap、imaps、ldap、ldaps、pop3、pop3s、rtsp、scp、sftp、smb、smb、smtp、smtps、telnet、tftp/SSL版本:SecureTransport/ZLib版本:1.2.5/libSSH版本:libssh2/1.4.3
  • OpenSSL: enabled/Library版本:OpenSSL 1.0.2h 3 May 2016/header版本:OpenSSL 1.0.2h 3 May 2016/OpenSSL . enabled(本地)/usr/local/php5/ssl/certs/cacert./usr/local/php5/ssl/certs/cacert.pem

为了创建SSL设置,我遵循了在Apache (OSX)中启用SSL的文章,它消除了浏览器请求,并允许我为涉及到Twitter等需要SSL连接的项目拉请求,即使在开发环境中也是如此。

然而,PHP 5.6。我最初用来开发这个特定的项目,最近我升级到7,现在已经造成了这个错误。

在测试证书方面,在终端中显示如下错误:

echo | openssl s_client -connect localhost:443

上面的命令产生:

CONNECTED(00000003)
depth=0 C = AU, ST = New South Wales, L = Sydney, O = localhost, CN = localhost
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = AU, ST = New South Wales, L = Sydney, O = localhost, CN = localhost
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/C=AU/ST=New South Wales/L=Sydney/O=localhost/CN=localhost
   i:/C=AU/ST=New South Wales/L=Sydney/O=localhost/CN=localhost
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDgDCCAmigAwIBAgIJAIqaBKmBWQOqMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV
BAYTAkFVMRgwFgYDVQQIDA9OZXcgU291dGggV2FsZXMxDzANBgNVBAcMBlN5ZG5l
eTESMBAGA1UECgwJbG9jYWxob3N0MRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMTYx
MTAyMjEzODQ3WhcNMTcxMTAyMjEzODQ3WjBgMQswCQYDVQQGEwJBVTEYMBYGA1UE
CAwPTmV3IFNvdXRoIFdhbGVzMQ8wDQYDVQQHDAZTeWRuZXkxEjAQBgNVBAoMCWxv
Y2FsaG9zdDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAmD67Hq/iOUL+b+cjgeO/xwfjmkAu2QI4ZbOV4w/pH66T+U9a
KN3snz504u8xo1DUDKyUp+eX40q2jbWghzOoPVrhIRWwhY4woyX6FYILzvNDym59
Hqc9CzGZ6lkuApelsSAFyC2Q0K7VeOFwEepNZ6ou7WhqfoS9N/CPptut/+NkByxt
m8sEvFbLS4dtVKHB8QoPsVJ8w7f+4zKk3NjVLQPlw8xxzLMStzlwsOSLJYEaiU1a
fdzOoe/l0DroMpTZmDPth6/Fc9loCC3AcgIrzOG7q9eaR5ANNA1+Ca/4/3+qdQOU
CVYjFwwTsTZdcd73nHVjJCe/3bX30T3s9dTD/QIDAQABoz0wOzAJBgNVHRMEAjAA
MAsGA1UdDwQEAwIF4DAhBgNVHREEGjAYgglsb2NhbGhvc3SCCyoubG9jYWxob3N0
MA0GCSqGSIb3DQEBCwUAA4IBAQB9Z5cbIq6gGQ7xg22AxUUQ2GUQ+/u2heHogphP
S/k2OmPg2mmtZ6UPS2B8m8TRx6roHZhO6pWGuDh0BuwRMHC0kYMB7p+XFiOl9Xo+
EVpiM4oXHJ7f1JgF0k/77MGIcyWBHfkvEzNcmhdmabyV5cdyXJs4IaJqnnczwjgC
jh2kvPL4mYQ6Tq26j+vWU2BklFTeMEjr3MgEL+prBTCx6DJ+vKDW3h9USm2yHMGa
EWiP+tJ+6vXKzHdpAVjTNYsoR9stfduZylG9m5pZSISOlaZnDDEwyiQ33U15FAM4
ZnfDOJX1Tbb0MpdbjH36QS2uBhUebxEM361BVGXPZQUaCqp2
-----END CERTIFICATE-----
subject=/C=AU/ST=New South Wales/L=Sydney/O=localhost/CN=localhost
issuer=/C=AU/ST=New South Wales/L=Sydney/O=localhost/CN=localhost
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, B-571, 570 bits
---
SSL handshake has read 1666 bytes and written 513 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 8B39BE1C255BDD6ED6E42E85612AB24C9CD1CB2195676A2CAEA7E3FAE0E65D68
    Session-ID-ctx: 
    Master-Key: 86DCCE7468DE39C619A64AC7C08E6F3AA55B02DC025564D4E67C7BCDDE90415D518D780FB4EEB98A69DF785ED62FFB09
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - e0 da 63 c7 3d b0 eb 5c-0b 30 c8 0f 8f 43 b2 5e   ..c.=..'.0...C.^
    0010 - 93 49 cb 87 c5 f8 a5 f4-42 bf 19 e1 16 3d 24 73   .I......B....=$s
    0020 - ab 0a 76 b9 a7 84 1b 1b-ad 3f 4b 2d 60 c7 0c 8a   ..v......?K-`...
    0030 - 3d e8 0d b2 29 db 95 b0-a6 e6 49 f6 60 3c fe 1d   =...).....I.`<..
    0040 - c2 f5 51 8f 40 ae 93 ac-f2 eb b9 99 2c c5 f0 45   ..Q.@.......,..E
    0050 - bb d7 16 a7 0f a5 52 c7-c4 b8 e4 6a 05 ab a0 25   ......R....j...%
    0060 - 9c 44 dc 15 8c 0e cf 69-18 f8 dd 8d f1 ad 21 32   .D.....i......!2
    0070 - f5 f9 d6 54 37 87 46 6d-9e 4f d2 8a 3e 16 e2 1a   ...T7.Fm.O..>...
    0080 - 41 1a 26 27 31 83 f1 ad-31 26 ab 22 17 84 50 ae   A.&'1...1&."..P.
    0090 - 06 ef 51 9e f4 40 0f 48-8b a9 66 26 1f d8 32 88   ..Q..@.H..f&..2.
    00a0 - 46 19 a2 97 44 26 9c b1-b0 15 5c 0b 02 d7 23 ea   F...D&....'...#.
    00b0 - 07 b6 72 57 b7 47 ee 9a-85 fe 16 d4 59 8d b8 34   ..rW.G......Y..4
    Start Time: 1478128414
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---
DONE

对于产生此错误的登录页面,我使用Auth0.com,并且我拒绝更改CURL请求verifypeer = false来抑制此错误,因为错误清楚地识别泄漏。作为开发人员,我们希望尽可能多地复制我们的开发环境,以确保在迁移到生产环境时不会留下任何东西。

谢谢你,希望我已经涵盖了所有必要的内容。我不使用外部包,如MAMP或XAMPP等,只是将PHP7安装为升级到Capitan附带的现有PHP 5.5。

干杯!

找到一种方法来切换您的curl代码,以便如果您在开发($_SERVER['HTTP_HOST']=='localhost')中,那么您设置verifypeer = false,但这不会被设置并保持为生产

经过数小时的测试、配置、重新安装和绞尽脑汁,我终于找到了答案。

对于遇到此错误的每个人,我发现最终结果是PHP安装。一开始我以为是Auth0不符合苹果SecureTransport的SSL版本,但事实并非如此。

我使用cURL将我的PHP升级到本地目录,更改配置文件中的$PATH变量和LaunchAgents等phpinfo(),以显示我正在使用更新的PHP版本,但是模块实际上与以前的版本相关,并发现安装的PHP正在查看自己的目录导致此错误(它与证书无关)。

我将PHP版本回滚到5.5,它也保留了SecureTransport SSL版本和cURL请求完全正常工作。我现在终于解决了这个问题,这个问题在我的本地主机环境中被隔离,我很高兴在这里分享我所做的事情,为其他有类似问题的人提供帮助。

macOS 10.12 Sierra Apache Setup:多个PHP版本Homebrew允许你在主操作系统目录之外安装一个完整的web环境等应用程序,因此不会对其标准安装造成影响。

我正在使用Capitan和这个指南仍然工作没有错误。现在我使用PHP 7.1.0RC5,使用OpenSSL作为默认SSL版本,我不再收到此错误。我已经在其他PHP安装5.5、5.6、70和71上测试了Auth0,没有出现错误。

干杯,再一次,如果你遇到这个问题,看看你的安装,清理它并重新安装为默认安装,当正确完成将防止这个特定的错误显示。

为上面提到的指南找到了新的链接:macOS 10.12 Sierra Apache Setup:多个PHP版本

请注意,我不是上面页面的所有者,我只使用它作为一个指导。