我是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);
感谢您的帮助!
答案 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”命令。
顺便说一下,当系统正常运行时,消息“无法启用加密”将消失。
答案 4 :(得分:0)
只需将所有者更改为www-data即可。)
sudo chown www-data.www-data ck.pem
apache www-data
的聋人用户