我需要开发一个 PHP 类来与 Apple 服务器通信,以便进行推送通知 (APNS)。我有证书 (.pem),我尝试按照在 Internet 上找到的各种教程进行操作,但尝试使用流套接字连接到 ssl://gateway.sandbox.push.apple.com:2195 时仍然遇到错误:
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'apns-dev.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://'.$apnsHost.':'.$apnsPort, $error, $errorString, 2,
STREAM_CLIENT_CONNECT, $streamContext);
此 URL 上的 telnet 有效,因此端口 2195 已打开。 Openssl 在 PHP 上被激活,因为我得到了带有 phpinfo() 的“注册流套接字传输:tcp、udp、ssl、sslv3、sslv2、tls”。 我的证书很好读(PHP is_readable(certif.pem) 在文件上返回 true)
是否需要在 Apache 或 PHP 中激活其他任何东西才能使其正常工作?
最佳答案
不完全是主题,但值得一提:
为了使 SSL 与 PHP 一起工作,有两件事很重要(如果您从源代码编译 PHP)
1) 确保安装了 openssl base 和 devel 包 例如yum 安装 openssl openssl-devel
2) 编译支持 openssl 的 PHP: 即在运行配置时使用 --with-openssl 选项。
然后,ssl会出现在phpinfo()中的“Registered Stream Socket Transports”
关于php - 如何与 PHP 建立 SSL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2997829/