在PHP中使用ssl cert时出错

时间:2009-05-01 00:11:35

标签: php sockets ssl

我是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);

感谢您的帮助!

5 个答案:

答案 0 :(得分:15)

您收到错误是因为它试图在您运行脚本的目录中找到cert.pem文件,而不是脚本所在的目录。在您的示例中,它是您的用户目录“〜”。< / p>

尝试将您的课程改为此类或类似内容:

class pushNotifications {
...
     private $sslPem = 'cert.pem';
...
     function connectToAPNS(){
          $streamContext = stream_context_create();
          stream_context_set_option($streamContext, 'ssl', 'local_cert', dirname(__FILE__) . '/' . $this->sslPem);

答案 1 :(得分:10)

我也遇到了这个问题,事实证明,由于某些原因,我的私钥与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证书而非您的developer_identity证书导出为apsdi.pem非常重要。

如果您可以在Keychain Access中扩展您的developer_identity.cer和aps_developer_identity.cer条目,并且当您这样做时看到“私人”密钥,那么一切都应该有效。

答案 2 :(得分:2)

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

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

所以请输入一个虚拟密码,即使您稍后使用openssl删除它。

答案 3 :(得分:0)

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

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

  1. 目前,我所能做的就是将php作为sudo运行,因为ck.pem的chmod为400。有些东西要给......
  2. 顺便说一下,当系统正常运行时,消息“无法启用加密”将消失。

答案 4 :(得分:0)

只需将所有者更改为www-data即可。)

  

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

apache www-data

的聋人用户