1

在此处使用 Shopify 的第一步...

我在带有 cURL 7.24 的 Windows 7 机器上运行 PHP 5.4 和 apache 2.2。我正在尝试使用使用 ohShopify PHP 适配器的示例应用程序(https://github.com/cmcdonaldca/ohShopify-Sample-App),但是...

在我允许应用程序访问商店(位于https://xxxxxx.myshopify.com上)后,我收到“SSL 证书问题,验证 CA 证书是否正常”错误。PHP API FAQ - Q2 ( http://wiki.shopify.com/PHP_API_FAQ )中提到了这个问题,并提供了一个可能的解决方案。但我不明白在哪里“在您的配置中将 USE_SSL_PEM 设置为 true”。这是什么配置?PHP.ini ?卷曲_?只是在php代码中定义它?我已经在 config_lib.php 文件中的 php 代码中进行了尝试,该文件是示例应用程序的一部分,如下所示:

define('USE_SSL_PEM',true);

但这不起作用..搜索示例应用程序文件显示没有使用它...所以我必须在错误的地方。

FAQ 的第二部分是在 .php 代码中定义“CA_FILE”。我认为我可以接受,因为我已经导出了 myshopify.com 证书并且它似乎是有效的。我使用以下方法将其从 .cer 转换为 .pem:

openssl x509 -inform DES -in ie_shopify.cer -out shopify.pem -text

然后在 config_lib.php 文件中:

define('CA_FILE', getcwd() . '\\shopify.pem');

我已经确认 CA_FILE 确实正确指向具有绝对路径的文件。

我还通过设置 CURLOPT_CAINFO 尝试了这里的建议(http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/)在被调用但结果相同的 ohShopify curlSetopts() 函数中。

并且(如前所述)我发现了如何从这里(http://curl.haxx.se/docs/sslcerts.html)将 .cer 转换为 .pem

谢谢,

尼尔

更新:解决了!我没有信任我首先使用 Internet Explorer 作为 .cer 文件提取然后使用 openssl 转换为 .pem 文件的 .pem 文件,而是转到:

curl.haxx.se/docs/caextract.html 

...并获取了 Mozilla CA 证书包 - 这已经是 .pem 格式。我将 cacert.pem 文件放在与另一个文件相同的目录中,并更新了 curlSetopts() 函数中的 CURLOPT_CAINFO 行(我之前在 shopify.php 中添加了这一行)。和以前一样,我直接指向文件:

curl_setopt($ch, CURLOPT_CAINFO, 'D:/apache/htdocs/cacert.pem');

它有效。继续。

更新 2:只是为了澄清,因为我最初在 Shopify 的 PHP API 常见问题解答中寻找解决方案(如上所述)......我不需要设置 USE_SSL_PEM 值(无论它属于哪里)或添加定义 CA_FILE 代码。unitstep.net 博客中关于 CURLOPT_CAINFO 的建议是正确的。

4

1 回答 1

0

我找到了解决问题的方法:不出所料,.pem 文件正确 - 正如错误消息所示。我用 Mozilla CA 证书包完全替换了它

http://curl.haxx.se/docs/caextract.html 

然后在 shopify.php 文件中,我在 curlSetopts() 函数中添加了以下行,使用绝对路径直接指向下载的 .pem 文件:

curl_setopt($ch, CURLOPT_CAINFO, 'D:/apache/htdocs/cacert.pem');
于 2012-07-04T01:27:48.107 回答