繁体   English   中英

在PHP中使用ssl cert时出错

[英]Error using ssl cert with PHP

我是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条目,并且在执行操作时看到“私有”密钥,则一切都应该有效。

作为补充提示,对于任何具有相同问题的人:从Apple的钥匙串访问中导出私钥,并转换为.pem时,指定密码。

出于某种原因,似乎在其中一个导出中留下空白密码会删除私钥,因此最终的.pem不完整。

因此,即使您稍后使用openssl删除它,也要输入一个虚拟密码。

只需将所有者更改为www-data就可以了:)

sudo chown www-data.www-data ck.pem

apache www-data的聋人用户

未来的注意事项(因为所有这一切后头痛):1。如果你得到握手错误 - 你创建的pem文件可能是错误的。

一个。 确保该文件与您尝试运行的php位于同一目录中。 在钥匙串访问实用程序中导出certifcate p12文件及其下的密钥。这些文件中的两个将是相同的大小,但它们是不同的。 C。 在macintosh终端上执行上面的“openssl”命令。

  1. 目前,我所能做的就是将php作为sudo运行,因为ck.pem的chmod为400。 有些东西要给......

顺便说一句,当系统正常运行时,消息“无法启用加密”将消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM