1

这是我的服务 php

$r = curl_init();
curl_setopt($r, CURLOPT_URL, $uri);
curl_setopt($r, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($r, CURLOPT_POST, true);
curl_setopt($r, CURLOPT_HEADER, true); 

curl_setopt($r, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($r, CURLOPT_TIMEOUT, 120);
curl_setopt($r, CURLOPT_MAXREDIRS, 20);
curl_setopt($r, CURLOPT_AUTOREFERER, true);
curl_setopt($r, CURLOPT_FOLLOWLOCATION, true);

//curl_setopt($r, CURLOPT_SSLKEY, 'ssl.key'); 
//curl_setopt($r, CURLOPT_CAINFO, 'ssl2.crt'); 
curl_setopt($r, CURLOPT_SSLCERT, 'ssl3.pem');  
//curl_setopt($r, CURLOPT_SSLCERTTYPE, 'PEM');
//curl_setopt($r, CURLOPT_SSLCERTPASSWD, 'mypassword');
//curl_setopt($r, CURLOPT_SSLVERSION, 3);
//curl_setopt($r, CURLOPT_SSLENGINE, 'x509');
//curl_setopt($r, CURLOPT_SSLKEYTYPE, 'PEM'); 
curl_setopt($r, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($r, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($r, CURLOPT_HTTPHEADER, $httpHeadersToast);
curl_setopt($r, CURLOPT_POSTFIELDS, $toastMessage);
$output = curl_exec($r);
curl_close($r);

我已经尝试了上述代码的各种组合,$output大多数都是空的,或者我得到一个 403“禁止”,具体取决于我使用的命令。

我通过 Dreamhost 拥有我的服务器...使用签名的 comodo 证书...当我去查看证书时,有“证书”,然后是“密钥”,然后是“中间证书”。“证书”是我已上传到我的 Windows Phone 开发人员帐户且“指纹”匹配的证书。

我知道我的手机的推送 URI 是合法的,因为它具有“https....unthrottled...”

我之前曾以“未经身份验证”的方式工作,但我想使用我的安全服务器。

4

1 回答 1

1

我在 curl/php 上遇到了同样的 403 问题。我通过使用我的 crt 和密钥以及包含 GoDaddy CA 包(我们的 crt 来自 GoDaddy)和“完整”CA 包(Fedora 上的 /etc/pki/tls/certs/ca-bundle.crt ) 附加。

还要确保您的脚本具有对所有证书文件的读取权限。通常私钥只能由 root 读取。

编辑:添加了与身份验证相关的确切 CURL 选项:

    curl_setopt($req, CURLOPT_SSL_VERIFYHOST, '2');
    curl_setopt($req, CURLOPT_SSL_VERIFYPEER, '1');
    curl_setopt($req, CURLOPT_CAINFO,  $ca_file);
    curl_setopt($req, CURLOPT_SSLCERT, $cert_file);
    curl_setopt($req, CURLOPT_SSLKEY, $key_file);

$ca_file 包含上面提到的 CA 包。

于 2013-07-31T09:52:30.680 回答