我是php的新手,我在尝试加载证书时遇到此错误
jameys-macbookpro41:~ user$ php -f ~/Sites/providerService.php
警告:stream_socket_client():无法设置本地证书链文件`cert.pem'; 在第27行的/Users/jamey/Sites/providerService.php中检查您的cafile/capath设置是否包含证书及其颁发者的详细信息
cert.pem与php文件位于同一文件夹中.文件cert.pem是在Apple钥匙串工具中创建的
class pushNotifications { ... private $sslPem = 'cert.pem'; ... function connectToAPNS(){ $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', $this->sslPem);
谢谢你的帮助!
您收到错误是因为它试图在您运行脚本的目录中找到cert.pem文件,而不是脚本所在的目录.在您的示例中,它是您的用户目录"〜".
尝试将您的课程更改为此类或类似内容:
class pushNotifications { ... private $sslPem = 'cert.pem'; ... function connectToAPNS(){ $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', dirname(__FILE__) . '/' . $this->sslPem);
我也有这个问题,事实证明,由于某些原因,我的私钥与aps_developer_identity.cer关联的私钥不匹配我...
我最终从我的"登录"钥匙串项目中清除了所有公钥和私钥,然后我重新开始整个过程(生成请求)...我在程序门户上提交了新请求文件并生成了新证书双击它(developer_identity.cer),下载并安装它.然后,我重置配置文件以使用新的Push SSL证书,下载这些证书,然后通过双击(aps_developer_identity.cer)安装它们.最后,我重置了配置文件并下载了新配置文件.我在Xcode Organizer中清除了旧的,并安装了新的.最后,我将'private'键作为key.p12导出,将我的aps_developer_identity.cer导出为apsdi.p12,并对它们运行以下命令:
openssl pkcs12 -clcerts -nokeys -out apsdi.pem -in apsdi.p12 openssl pkcs12 -nocerts -out key.pem -in key.p12
如果你可以使用密码短语(推荐用于制作):
cat apsdi.pem key.pem > cert.pem
如果您希望使用"空白"密码短语,则需要首先使用在将其转换为pem格式时指定的密码来解密您的私钥:
openssl rsa -in key.pem -out key.unencrypted.pem
然后将证书和未加密密钥插入apns.pem(或您选择的任何文件名):
cat apsdi.pem key.unencrypted.pem > apns.pem
导出aps_developer_identity证书非常重要,而不是像apsdi.pem那样导出developer_identity证书.
如果您可以在Keychain Access中扩展developer_identity.cer和aps_developer_identity.cer条目,并且在执行操作时看到"私有"密钥,则一切都应该有效.