代码之家  ›  专栏  ›  技术社区  ›  rickharrison

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

  •  10
  • rickharrison  · 技术社区  · 14 年前

    “消息:stream_socket_client()[函数.stream socket client]:无法设置本地证书链文件`/var/www/ninerobot.com/public/mlb/certs/mlbtr-push-dev.pem';请检查cafile/capath设置是否包含证书及其颁发者的详细信息”

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

    我在苹果的文档中看到它说:“注意:要与APNs建立TLS会话,必须在提供者服务器上安装一个委托安全的CA根证书。如果服务器运行的是Mac OS X,则此根证书已在密钥链中。在其他系统上,证书可能不可用。您可以从“委托SSL证书”网站下载此证书。“这意味着我需要做什么吗?”?

    3 回复  |  直到 14 年前
        1
  •  15
  •   kix    8 年前

    我也有更多的挣扎去做同样的事。最终我找到了通过PHP全局url发送推送通知的解决方案。试试下面的步骤。在此之前,我希望你们都知道生成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
    

    ApnsDev.pem公司 ),simplepush.php中的消息使用以下URL下载文件。 http://d1xzuxjlafny7l.cloudfront.net/downloads/SimplePush.zip

    $ php simplepush.php
    

    www.Domainname.com/push/simplepush.php  // Now, url shows 'Connected to APNS Message successfully delivered'.
    

    如果您想发送“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);
    

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

        2
  •  7
  •   Steve N    13 年前

    使用此清单完成以下工作:

    1. 创建合法证书 通过如下指令 these
    2. 是你的吗 .pem文件可读 通过您的web服务器进程(即权限和文件位置是否正确)?许多设置运行apache,例如,在“www data”用户/组下。旁注:确保访问者不能浏览.pem文件。
    3. 你的服务器有 委托安全CA根证书 (2048位)已安装?如果没有,请按照说明下载/安装特定服务器操作系统。
    4. 出站TCP端口2195打开
        3
  •  0
  •   shukshin.ivan    8 年前

    除了史蒂夫的一个很好的回答外,让我补充最后一点。

    1. 包括证书及其颁发者的详细信息 . 你的.pem文件中可能没有块。 issuer= , subject= -----BEGIN CERTIFICATE . 在转换证书文件期间,它可能会被意外删除。