Amazon web services 使用sdk for php访问dynamodb

Amazon web services 使用sdk for php访问dynamodb,amazon-web-services,amazon-dynamodb,fatal-error,Amazon Web Services,Amazon Dynamodb,Fatal Error,当我尝试运行此代码时,它会给出一个错误,定义为: 致命错误:未捕获异常“Aws\DynamoDb\exception\dynamodbeexception”,消息“在“”上执行“GetItem”时出错”;AWS HTTP错误:cURL错误60:SSL证书问题:无法获取C:\wamp\www\practice\vendor\AWS\AWS sdk php\src\WrappedHttpHandler.php第159行中的本地颁发者证书(请参阅) require "config.php"; requ

当我尝试运行此代码时,它会给出一个错误,定义为:

致命错误:未捕获异常“Aws\DynamoDb\exception\dynamodbeexception”,消息“在“”上执行“GetItem”时出错”;AWS HTTP错误:cURL错误60:SSL证书问题:无法获取C:\wamp\www\practice\vendor\AWS\AWS sdk php\src\WrappedHttpHandler.php第159行中的本地颁发者证书(请参阅)

require "config.php";
require __DIR__ . '/vendor/autoload.php';
$sdk = new Aws\Sdk([
    'region'   => 'us-east-1',
    'version'  => 'latest',
    'credentials' => array(
        'key' => $global_access_key,
        'secret'  => $global_secret_key,
      ),
]);

$dynamodb = $sdk->createDynamoDb();

$response = $dynamodb->getItem([
    'TableName' => $global_table_name,
'Key' => [
    'userid' => [ 'N' => '1' ]
    ]
]);

var_dump($response);
die;

从读取文档

<>得到了答案,而不是禁用SSL验证,这可能导致中间人攻击。下面的解决方案将更加安全和合适

  • 从下载最新的证书文件
  • 将其保存在代码可访问的路径中。(例如:-C:\nginx\cert\cacert.pem)
  • 根据您使用的aws sdk php的版本,请按如下所示修改代码
  • 版本2.X:-

    $sdk = new Aws\Sdk([
    'region'   => 'us-east-1',
    'version'  => 'latest',
    'credentials' => array(
        'key' => $global_access_key,
        'secret'  => $global_secret_key,
      ),
    'signature_version' => 'v4',
    'http'    => [
        'verify' => false
    ]
    ]);
    
    3.X版:-

    $aws = Aws\Common\Aws::factory(array(
     'region' => 'us-west-2',
     'key' => '****',
     'secret' => '****',
     'ssl.certificate_authority' => 'C:\nginx\cert\cert.pem'
    ));
    
    参考文献:-

    $client = new DynamoDbClient([
        'region'  => 'us-west-2',
        'version' => 'latest',
        'http'    => [
            'verify' => 'C:\nginx\cert\cert.pem'
        ]
    ]);