1

所以我被MintChip Challenge录取了,但不幸的是我没有支持的移动设备(Android、iPhone 或 Windows Phone),所以我必须使用Hosted API。我打算使用 JavaScript/PHP 与 API 进行交互。唯一的问题是,当我尝试请求数据时,我收到403 错误,这意味着 API 理解了我的请求但选择拒绝它。

我知道所有请求都需要 SSL 并使用您提供的证书进行签名。我也知道我的证书有效并正确导入到我的浏览器,因为我可以通过点击任何 URL 进入托管 API 并直接查看请求,即: https ://remote.mintchipchallenge.com/mintchip/info/ json

所以最大的问题是,Apache Web 服务器本身是否可以像我的浏览器一样为所​​有请求签名,以启用服务器-服务器签名请求。除此之外,PHP 是否有任何库或实用程序可用于导入 x.509 证书并用它签署您的请求?

我通常使用 JSONp 向 JSON API 发出客户端-服务器请求,这可以解决这个需求,但可以理解的是,JSONp 被视为安全风险,因此不受 MintChip 支持。我也想不出任何其他 API 对每个请求都需要这种级别的安全性,通常只是 BASIC Auth 或 ws-security 或其他东西,这是否矫枉过正,甚至会让事情变得更安全吗?一般信息问题通常不被看好,因为我什至在发布之前就已经对这个问题发出警告,但也许一些安全专家有更多关于如何签署 Apache Web 服务器、对来自特定目录的所有请求强制 SSL、保护密钥同时的信息将它们存储在服务器上,通过 PHP 使用 x.509 等?谢谢你的帮助。

(更新:2012-05-04,更改标题以反映您使用私钥签署请求的事实,并且它们当然会使用您的公钥解密)

4

2 回答 2

1

通常,您使用私钥签名......而不是使用 X.509 证书将包含的公钥。

至于通过 PHP 使用 X.509...查看phpseclib,一个纯 PHP X.509 实现

于 2012-05-04T19:01:57.210 回答
1

不。Apache 服务器不会向 MintChip 本身生成 API 请求,因此无法让它开始签署它不知道的请求。

直接通过客户端 Web 浏览器创建对 MintChip API 的请求很可能是不合适的。无论如何,没有什么好方法可以保证客户拥有适当的证书。

如果您使用curl扩展通过 PHP 发出 API 请求,您可以CURLOPT_SSLCERT在发出请求时使用该选项来指定要使用的客户端证书。理想情况下,您应该将所有执行 API 请求的代码都放在一个位置(例如,一个mintchip_api函数),因此无需将其应用于“源自目录的所有请求”。

于 2012-05-04T21:58:20.470 回答