AWS SSL 安全错误:\[curl\] 60:SSL 证书问题...:无法获取本地颁发者证书

新手上路,请多包涵

I am trying to connect Amazon’s S3 files from my (localhost) Windows 8 machine running AppServ 2.5.10 (which includes Apache 2.2.8 , php 5.2.6 , mysql 5.0.51bphpMyAdmin 2.10.3 )使用 Amazon SDK 用于 php。

为了与 Amazon SDK's 命名空间功能兼容,我将 php 替换为版本 5.3.28 通过下载其压缩文件并解压缩。

我的 php 代码可以正常访问 S3 文件 Amazon EC2 但它在我的 Windows 本地主机中失败。

但是,当我运行 php srcipt 以读取 Amazon S3 Windows 本地主机中的存储桶文件时,出现如下 SSL 错误:

致命错误:未捕获异常“Guzzle\Http\Exception\CurlException”,消息为“[curl] 60:SSL 证书问题:无法获取本地颁发者证书 [url] https://images-st.s3.amazonaws.com/us /123977_sale_red_car.png ‘ 在 C:\AppServ\www\ecity\vendor\guzzle\guzzle\src\Guzzle\Http\Curl\CurlMulti.php:342 堆栈跟踪:

#0 C:\AppServ\www\ecity\供应商\guzzle\guzzle\src\Guzzle\Http\Curl\CurlMulti.php(283): Guzzle\Http\Curl\CurlMulti->isCurlException(对象(Guzzle\Http\Message \Request), 对象(Guzzle\Http\Curl\CurlHandle), 数组)

#1 C:\AppServ\www\ecity\vendor\guzzle\guzzle\src\Guzzle\Http\Curl\CurlMulti.php(248): Guzzle\Http\Curl\CurlMulti->processResponse(对象(Guzzle\Http\Message \Request), 对象(Guzzle\Http\Curl\CurlHandle), 数组)

#2 C:\AppServ\www\ecity\vendor\guzzle\guzzle\src\Guzzle\Http\Curl\CurlMulti.php(231): Guzzle\Http\Curl\CurlMulti->processMessages() 目录

#3 C:\AppServ\www\ecity\vendor\guzzle\guzzle\src\Guzzle\Http\Curl\CurlMulti.php(215): Guzzle\Http\Curl\CurlMulti->executeHandles() 目录

#4 C:\AppServ\www\ecity\ven 在 C:\AppServ\www\ecity\vendor\aws\aws-sdk-php\src\Aws\Common\Client\AbstractClient.php 第 288 行

我从 http://curl.haxx.se/ca/cacert.pem 下载证书并在 php.ini 中定义如下:

 curl.cainfo = "C:\AppServ\cacert.pem"

但我仍然遇到同样的错误。似乎 php 不遵守 curl.cainfo 中定义的 php.ini

我的 php 版本是 5.3.28 根据 localhost/phpinfo.php

我还检查了 cainfo 参数是否正确 C:\AppServ\cacert.pem 使用

echo ini_get( "curl.cainfo" ) ;

在 php 脚本中。

高于 5.3 的 Php 版本应支持 curl.cainfophp.ini 中。

在 Windows 的命令行中,我检查了 curl 行为,它似乎工作正常。

 C:\Users\Jordan>curl  https://s3-us-west-2.amazonaws.com/images-st/aaa.txt
   curl: (60) SSL certificate problem: unable to get local issuer certificate
   ......

C:\Users\Jordan>curl --cacert C:\AppServ\cacert.crt  https://s3-us-west-2.amazonaws.com/images-st/aaa.txt
  This is aaa.txt file.
  Stored in Amazon S3 bucket.

是因为我在 Windows 中使用的 Apache 不匹配 php 5.3.28 zip 文件我从 http://windows.php.net/download/ VC9 x86 Thread Safe (2014-Jun-11 01: 09:56) 压缩版。

在我的 apache 的 httpd-ssl.conf 文件中,即使我在 Windows 8 中从本地主机使用,我也有以下设置。

 <VirtualHost _default_:443>

DocumentRoot "C:/AppServ/www"
ServerName localhost:443
ServerAdmin webmaster@localhost.com
ErrorLog "C:/AppServ/Apache2.2/logs/error.log"
TransferLog "C:/AppServ/Apache2.2/logs/access.log"

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "C:/AppServ/Apache2.2/conf/mydomain.cert"
SSLCertificateKeyFile "C:/AppServ/Apache2.2/conf/mydomain.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "C:/Apache2.2/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch ".*MSIE.*" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0

CustomLog "C:/AppServ/Apache2.2/logs/ssl_request.log" \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

现在我想知道问题是什么以及如何连接到 Amazon S3 存储桶文件和 RDS 数据库而不生成这些 curl 无法从我的本地颁发者证书获取问题8 本地主机。

有什么建议吗?

原文由 user2818066 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 585
1 个回答

正如 Jeremy Lindblom 在评论中提到的, AWS SDK v2 的解决方案是在实例化 SDK 时设置 ssl.certificate_authority 选项:

 $aws = Aws\Common\Aws::factory(array(
    'region' => 'us-west-2',
    'ssl.certificate_authority' => '/path/to/updated/cacert.pem'
));

http://docs.aws.amazon.com/aws-sdk-php/guide/latest/faq.html#what-do-i-do-about-a-curl-ssl-certificate-error


我要补充一点,这是在 AWS SDK v3 中更改的,这是新方法:

 $client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'version' => 'latest',
    'http'    => [
        'verify' => '/path/to/my/cert.pem'
    ]
]);

http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html#verify

原文由 BenMorel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏