【发布时间】:2016-01-07 17:14:15
【问题描述】:
我正在使用 haxe 的 Http 类(编译为 php)通过 https 向 AWS 发送 request()。这是使用 haxe-aws 库 (https://github.com/Blank101/haxe-aws) 的最小示例:
var iamconf = new IAMConfig('newbucket.s3-eu-central-1.amazonaws.com', accessKey, secretKey, 'eu-central-1', 's3');
var sig4 = new Sig4Http('https://newbucket.s3-eu-central-1.amazonaws.com/', iamconf);
sig4.applySigning(true);
sig4.setPostData('<CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>eu-central-1</LocationConstraint></CreateBucketConfiguration>');
sig4.request(true);
无论我使用哪个服务/端点,响应总是:
stream_socket_client(): Peer certificate CN=`*.s3.eu-central-1.amazonaws.com' did not match expected CN=`54.231.192.50' (errno: 2) in [...]lib\sys\net\Socket.class.php at line #34
通过 http 工作的请求。有什么想法吗?
编辑: 为什么使用IP地址而不是名称进行连接的代码的负责部分:
if(!php_Boot::$skip_constructor) {
if(_hx_deref(new EReg("^(\\d{1,3}\\.){3}\\d{1,3}\$", ""))->match($name)) {
$this->_ip = $name;
} else {
$this->_ip = gethostbyname($name);
if($this->_ip === $name) {
$this->ip = 0;
return;
}
}
}
【问题讨论】:
-
无论端点如何,您是否绝对确定消息是逐字节 相同 的?错误消息表明您尝试连接到
https://54.231.192.50/...,这可能会失败。但是,如果这不是您正在做的事情,那么其中一个基础组件肯定有问题。请确认,bucket.s3.eu-central-1.amazonaws.com的失败与bucket.s3-eu-central-1.amazonaws.com完全相同(s3 选项后的点与破折号是该地区的一个怪癖,在大多数其他地区都没有,但两者都应该有效)。 -
好点,但是是的,相同的响应,只是不同的 IP 地址 (54.231.193.38)
-
嗯,您正在使用的代码中的 something 从根本上破坏了某些东西。 SSL (TLS) 连接根据服务器提供的证书中的公用名 (CN) 或主题备用名称 (SAN) 验证您尝试连接的 主机名...而不是 IP地址。从来没有IP地址......所以错误消息的内容似乎背叛了代码中的一些废话。我无法开始猜测在哪里,但这就是解释。
-
我完全同意,Michael,我不明白为什么底层类使用 IP 地址。我刚刚修改了 Http 类以在连接时使用主机名,而不是 IP 地址,它现在正在工作。但这不是改变标准 haxe 类的解决方案。也不应该是一个错误,因为我肯定不是第一个尝试在 haxe 中发送 https 请求的人。我的环境/代码一定有什么问题。
标签: php amazon-web-services https haxe