推送通知错误:"无法设置本地证书链文件"

ric*_*son 12 iphone push push-notification apple-push-notifications

我写了一个测试php页面,它只发送一个通用推送通知,它间歇性地工作.有时它会传递消息,有时我会收到此错误:

"消息:stream_socket_client()[function.stream-socket-client]:无法设置本地证书链文件`/var/www/ninerobot.com/public/mlb/certs/mlbtr-push-dev.pem';检查一下您的cafile/capath设置包括您的证书及其发行人的详细信息"

你知道我怎么解决这个问题吗?

我在Apple的文档中看到它说:"注意:要与APN建立TLS会话,必须在提供商的服务器上安装Entrust Secure CA根证书.如果服务器运行的是Mac OS X,则此根证书已在密钥链中在其他系统上,证书可能不可用.您可以从Entrust SSL证书网站下载此证书." 这是否意味着我需要做的事情?

小智 15

我也有更多努力去做同样的事情.最终我找到了通过PHP全局网址发送推送通知的解决方案.请尝试以下步骤.在此之前,我希望你们都知道生成3个证书,即PushChat.certSigningRequest,pushkey.p12和aps_development.cer(csr,p12,cer)

打开终端并一步一步运行以下命令:

# Make sure terminal refers your correct certificate path.
$ cd ~/Desktop/

# Ask system administrator to open if its not connected 
$ telnet gateway.sandbox.push.apple.com 2195

Trying 17.110.227.35...
Connected to gateway.sandbox.push-apple.com.akadns.net.

Escape character is '^]'.

# Convert .cer to .pem
$ openssl x509 -in aps_development.cer -inform der -out PushCert.pem

# Convert .p12 to .pem. Enter your pass pharse which is the same pwd that you have given while creating the .p12 certificate. PEM pass phrase also same as .p12 cert.  
$ openssl pkcs12 -nocerts -out PushKey1.pem -in pushkey.p12

Enter Import Password:

MAC verified OK

Enter PEM pass phrase:

Verifying - Enter PEM pass phrase:

# To remove passpharse for the key to access globally. This only solved my stream_socket_client() & certificate capath warnings.
$ openssl rsa -in PushKey1.pem -out PushKey1_Rmv.pem

Enter pass phrase for PushChatKey1.pem:

writing RSA key

# To join the two .pem file into one file:
$ cat PushCert.pem PushKey1_Rmv.pem > ApnsDev.pem
Run Code Online (Sandbox Code Playgroud)

然后最后将SimplePush.php移动到ApnsDev.pem文件位置.两个文件都在同一个文件夹中.并更改设备令牌,密码短语,证书名称(ApnsDev.pem),消息...在simplepush.php中使用以下URL下载文件. http://d1xzuxjlafny7l.cloudfront.net/downloads/SimplePush.zip 然后在终端或域服务器中执行文件

$ php simplepush.php
Run Code Online (Sandbox Code Playgroud)

要么

www.Domainname.com/push/simplepush.php  // Now, url shows 'Connected to APNS Message successfully delivered'.
Run Code Online (Sandbox Code Playgroud)

多数民众赞成,推送通知将飞行并到达特定的IOS设备.

如果你想发送'Badge'然后在simplepush.php中更改有效负载代码,如下所示,

// Construct the notification payload body:

$badge = 1;

$sound = 'default';

$body = array();

$body['aps'] = array('alert' => $message);

if ($badge)

    $body['aps']['badge'] = $badge;

if ($sound)

    $body['aps']['sound'] = $sound;


// End of Configurable 

// Encode the payload as JSON:

$payload = json_encode($body);
Run Code Online (Sandbox Code Playgroud)

现在再次运行php文件,应用程序图标出现,徽章编号为红色圆圈.


Ste*_*e N 7

使用此清单可以解决此问题:

  1. 您是否通过这些说明创建了合法证书
  2. 您的.pem文件是否可以被您的Web服务器进程读取(即权限和文件位置是否良好)?许多设置运行apache,例如,在"www-data"用户/组下运行.附注:确保访问者无法通过浏览来查看.pem文件.
  3. 您的服务器是否安装了Entrust Secure CA根证书(2048位)?如果没有,请按照特定服务器操作系统的下载/安装说明进行操作.
  4. 站TCP端口2195打开?默认情况下,许多托管服务提供商都没有打开此出站端口.