我一直在尝试从我在服务器上创建的PHP页面访问这个特定的REST服务.我将问题缩小到这两行.所以我的PHP页面如下所示:
<?php
$response = file_get_contents("https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json");
echo $response; ?>
Run Code Online (Sandbox Code Playgroud)
该页面在第2行死亡,并出现以下错误:
- 警告:file_get_contents():SSL操作失败,代码为1. OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败...第2行的php
- 警告:file_get_contents():无法在第2行的... php中启用加密
- 警告:file_get_contents(
https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json):无法打开流:第2行的... php操作失败
我们正在使用Gentoo服务器.我们最近升级到PHP 5.6版.升级后出现此问题.
我发现,当我一个地址替换REST服务一样https://www.google.com; 我的页面工作正常.
在我之前的一次尝试中,我将“verify_peer”=>false其作为参数传递给file_get_contents,如下所述: file_get_contents忽略verify_peer => false? 但就像作者所指出的那样; 它没有任何区别.
我问过我们的服务器管理员是否存在php.ini文件中的这些行:
他告诉我,因为我们在Gentoo上,openssl是在我们构建时编译的; 并且它没有在php.ini文件中设置.
我也证实这allow_url_fopen是有效的.由于这个问题的专业性; 我没有找到很多帮助信息.有没有人遇到过这样的事情?谢谢.
我一直在使用Ray Wenderlich的使用PHP脚本推送通知的教程.
参考:http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1
http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2
我已经做了大量的研究,但我在第2部分遇到了一个问题,你使用ck.pem文件运行push.php文件.
/Applications/XAMPP/bin/php push.php development
我唯一的区别是我使用XAMPP而不是MAMP.
我已确认已安装所有扩展程序.
我可以通过以下方式测试终端中的证书:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
它要求我输入我的密码并且我这样做.一切都在终端成功运作.
但是,当我运行push.php文件时,我收到以下错误:
PHP警告:stream_socket_client():SSL操作失败,代码为1. OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败PHP警告:stream_socket_client():无法启用加密
PHP警告:stream_socket_client():无法连接到第140行的ssl://gateway.sandbox.push.apple.com:2195(未知错误)
php文件中的第140行是:
$this->fp = stream_socket_client('ssl://' . $this->server, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
我找到了这些:
https://devforums.apple.com/message/1054840#1054840
我确实重复了一切.我知道我的密码是正确的.我重新创建了我的证书,pem文件和密钥.什么都行不通.每次我这样做都会出现同样的错误.
我太困惑了.
有没有人有任何建议或知道发生了什么?
谢谢!
更新1:
我也尝试设置ck.pem文件的完整路径,该文件也没有修复错误.
我正在使用key,ca,cert in options测试对本地节点服务器的SSL访问(自签名w OpenSSL)
var server_options = {
key: fs.readFileSync('/etc/ssl/self-signed/server.key'),
ca: fs.readFileSync('/etc/ssl/self-signed/server.csr'),
cert: fs.readFileSync('/etc/ssl/self-signed/server.crt')
};
Run Code Online (Sandbox Code Playgroud)
试图访问它:
curl -v --user 1234567890:abcdefghijklmnopqrstuvwxyz --data "grant_type=password&username=yves&password=123456789" https://macMini.local:8000/oauth/token
Run Code Online (Sandbox Code Playgroud)
使用curl我收到以下错误:
curl:(60)SSL证书问题,验证CA证书是否正常.详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
我从http://curl.haxx.se/ca/cacert.pem下载了ca证书并将它们添加到我的curl-ca-bundle-new.crt文件中,正如一些与curl相关的帖子中所建议的那样...但是没有办法
这是日志
- 即将connect()连接到macMini.local端口8000(#0)
- 试试192.168.1.14 ......
- 连接的
- 连接到macMini.local(192.168.1.14)端口8000(#0)
- SSLv3,TLS握手,客户端问候(1):
- SSLv3,TLS握手,服务器问候(2):
- SSLv3,TLS握手,CERT(11):
- SSLv3,TLS警报,服务器问候(2):
- SSL证书问题,验证CA证书是否正常.详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
- 关闭连接#0 curl:(60)SSL证书问题,验证CA证书是否正常.详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败更多详细信息,请访问:http://curl.haxx.se/docs/sslcerts.html
我知道我可以绕过Curl CA检查,使用:
curl -k -v --user 1234567890:abcdefghijklmnopqrstuvwxyz --data "grant_type=password&username=yves&password=123456789" https://macMini.local:8000/oauth/token
Run Code Online (Sandbox Code Playgroud)
在这种情况下运行正常,我可以看到:
SSL证书验证结果:自签名证书(18),无论如何都要继续.
但我想知道是否有办法解决这个问题......
Mysql服务器正在运行php5.3.新的webserver正在运行php7.1(从php5.3迁移).当我尝试连接mysql服务器与ssl时,它无法正常工作.
try {
$dbh = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_SSL_KEY => '/etc/mysql/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT => '/etc/mysql/client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA => '/etc/mysql/ca-cert.pem')
);
echo "Connestion established";
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
连接失败:SQLSTATE [HY000] [2002]
PDO :: __ construct():SSL操作失败,代码为1. OpenSSL错误消息:错误:1416F086:SSL例程:tls_process_server_certificate:证书验证失败
但是,当我从连接中删除SSL块时,它的工作正常.我不知道发生了什么事.可能是服务器和客户端的版本不匹配.Becasue我使用旧的公钥和私钥.
是因为mysql客户端和服务器版本不匹配?
PS:我只在网络服务器上升级了php7.