web-dev-qa-db-ja.com

AWS SSLセキュリティエラー:[カール] 60:SSL証明書問題...:ローカル発行者証明書を取得できません

AppServ 2.5.10Apache 2.2.8php 5.2.6mysql 5.0.51bおよびphpMyAdmin 2.10.3を含む)を実行している(localhost)Windows 8マシンからAmazonのS3ファイルを接続しようとしています。 Amazon SDK for php。

Amazon SDK's名前空間機能と互換性を持たせるため、zipファイルをダウンロードして解凍することにより、phpをバージョン5.3.28に置き換えました。

私のphpコードはS3Amazon EC2ファイルにアクセスするには正常に機能しますが、Windowsローカルホストでは失敗しました。

ただし、WindowsローカルホストマシンでAmazon S3バケットファイルを読み取るためにphp srciptを実行すると、次のように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\vendor\guzzle\guzzle\src\Guzzle\Http\Curl\CurlMulti.php(283):Guzzle\Http\Curl\CurlMulti-> isCurlException(Object(Guzzle\Http\Message\Request)、Object(Guzzle\Http\Curl\CurlHandle)、Array)

#1 C:\ AppServ\www\ecity\vendor\guzzle\guzzle\src\Guzzle\Http\Curl\CurlMulti.php(248):Guzzle\Http\Curl\CurlMulti-> processResponse(Object(Guzzle\Http\Message\Request)、Object(Guzzle\Http\Curl\CurlHandle)、Array)

#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 in C:\ AppServ\www\ecity\vendor\aws\aws-sdk-php\src\Aws\Common\Client\AbstractClient.php on line 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.

Php 5.3.28 Zipファイルと一致しないWindowsでApacheを使用したためです http://windows.php.net/download/ VC9 x86 Thread Safe(2014- Jun-11 01:09:56)Zipバージョン。

Apacheのhttpd-ssl.confファイルには、Windows 8のローカルホストから使用する場合でも、次の設定があります。

<VirtualHost _default_:443>

DocumentRoot "C:/AppServ/www"
ServerName localhost:443
ServerAdmin [email protected]
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>                                  

今、私はこれらのRDSを生成せずにAmazon S3バケットファイルとcurlデータベースに接続し、Windows 8ローカルホストからローカル発行者証明書の問題を取得できない問題とは何かを疑問に思っています。

何かアドバイス?

25
user2818066

コメントの Jeremy Lindblom で述べたように、AWS SDK v2の解決策はssl.certificate_authority SDKのインスタンス化時のオプション:

$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

33
Benjamin

WampServerを使用している場合は、php.iniファイルを開き、下にスクロールして次を追加します。

curl.cainfo = "C:\wamp\bin\php\php7.2.3\cacert.pem"

使用している現在のphpバージョンのフォルダーにcacert.pemファイルがあることを確認してください。私の場合、php7.2.3フォルダーにあります。

9
BlackPearl

Httpを使用したい場合は同じエラーが発生していましたが、以下のソリューションを使用できます:

 Error executing "PutObject" on "https://s3-ap-southeast-2.amazonaws.com/mybucketname/TestBanner1_e1d8d74e41"; AWS HTTP error: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

私はhttpメソッドを使用して解決しましたが、これは安全な方法を使用するのは安全ではありませんphp.iniファイルに_ curl.cainfo = "/path/to/file.cacert.pem"_を入力してください:

ソリューション

'options' => [
'scheme' => 'http',
],

完全なサンプルコード:

 // ...
's3bucket' => [
'class' => \frostealth\yii2\aws\s3\Storage::className(),
'region' => 'ap-southeast-2',
'credentials' => [ // Aws\Credentials\CredentialsInterface|array|callable
'key' => 'JGUTEHCDE.............OSHS',
'secret' => 'SJEUC-----------jzy1-----rrT',
],
'bucket' => 'yours3bucket',
//'cdnHostname' => 'http://example.cloudfront.net',
'defaultAcl' => \frostealth\yii2\aws\s3\Storage::ACL_PUBLIC_READ,
'debug' => false, // bool|array
'options' => [
'scheme' => 'http',
],

],
// ...
6
Ramesh Chand

この問題の非常に簡単な解決策があります。証明書ファイルなしでこれを行うことができます。

進むLaravel Root Folder-> Vender-> guzzlehttp-> guzzle-> src

open Client.php

find $ defaults Array。このように見える..

$defaults = [
    'allow_redirects' => RedirectMiddleware::$defaultSettings,
    'http_errors'     => true,
    'decode_content'  => true,
    'verify'          => true,
    'cookies'         => false
];

今、主な仕事はverify key ..の値を変更することです.

'verify'          => false,

したがって、この後、CURLリクエストのSSL証明書はチェックされません...このソリューションは私のために働いています。私は多くの研究の後にこの解決策を見つけます...

0
pankaj