如何对 Apache 服务器进行签名,以便来自目录的所有请求都通过 HTTPS 并包含您的私钥


How to sign Apache server so all requests originating from a directory are via HTTPS and contain your Private Key?

所以我被MintChip挑战赛录取了,但不幸的是我没有支持的移动设备(Android,iPhone或Windows Phone(,所以我必须使用托管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 身份验证或 ws-security 或其他东西,这是否矫枉过正,它甚至会让事情更安全吗?一般信息问题通常不会被看好,因为我甚至在发布之前就已经对这个问题发出警告,但也许一些安全专业人员有关于如何签署 Apache Web 服务器的更多信息,对来自特定目录的所有请求强制 SSL,保护密钥同时将它们存储在服务器上,使用 x.509 通过 PHP , 等?感谢您的帮助。

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

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

直接

通过客户端 Web 浏览器创建对 MintChip API 的请求很可能是不合适的。无论如何,您都无法保证客户端具有证书。

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

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

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