使用SSL证书Shopify PHP:在哪里设置USE_SSL_PEM


Shopify PHP with SSL certificate: where do I set USE_SSL_PEM?

在这里使用 Shopify 的第一步...

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

在我允许应用程序访问商店(https://xxxxxx.myshopify.com)后,我收到"SSL 证书问题,验证 CA 证书是否正常"错误。这个问题在 PHP API FAQ - Q2 (http://wiki.shopify.com/PHP_API_FAQ) 中提到,并提供了可能的解决方案。但是我不明白在哪里"在您的配置中将USE_SSL_PEM设置为 true"。这是什么配置?PHP.ini ?CURLOPT_ ?只是在 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确实正确指向具有绝对路径的文件。

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

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

谢谢

尼尔

更新:已解决!我没有信任我首先使用 Internet Explorer 提取的 .pem 文件作为.cer文件,然后使用 openssl 覆盖到 .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的建议是正确的。

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

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

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

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