服务器和SSL API安全性

时间:2012-12-09 03:59:07

标签: php security api rest ssl

目前我正在开发REST API

我的API访问权限仅在我的服务器和客户端服务器之间(B2B,企业对企业)。示例:myserverapi.com(我的REST API服务器)和myclientserver.com(访问My API的我的客户端服务器)*没有第三个连接/应用程序

我们正在实施api_key(当然是必须的)和域名(所以客户端特定的域名,他将访问api,所以我的服务器api只会接受)

对于myserverapi.com,如何只接收来自myclientserver.com的连接?仅使用$_SERVER['REMOTE_ADDR']?够了吗 ?但是从几个地方读完后,我不能使用它,因为如果它在代理或负载均衡器农场下,IP可能是错误的。解决方案是什么?

以及我如何安装SSL证书?我必须改变我的代码吗?或者只是在服务器端购买并安装,我的api会自动安全吗?

是openssl-verify函数,只是确保访问来自特定服务器的安全方式吗? http://php.net/manual/en/function.openssl-verify.php这是否意味着我必须更改我的代码以加密和解密数据,例如此链接http://3stepsbeyond.co.uk/2010/12/openssl-and-php-tutorial-part-two/

所以基本上我只想确保myserverapi.com只能从myclientserver.com获取访问权限。并且myclientserver.com只接受来自myserverapi.com的数据。怎么做?

我希望有人给我一个很好的解释。

谢谢

3 个答案:

答案 0 :(得分:1)

你可以做一系列事情。代码最不相关的是HTTPS客户端证书。如果你不关心用户究竟是谁,但只是想确保允许的那个让apache处理它。它只是配置文件中的几行,您不必触摸您的代码。

您的第二个选项是ACL,即使在路径级别,您也可以在Apache中再次处理。当然,在操作系统级别,您也可以将它们应用于IP和端口。这同样适用于服务器/服务器内部或前面的防火墙。

如果您不想处理管理证书或IP /端口防火墙和ACL,您可以实现2脚Oauth。客户端可以使用库,因为它们几乎已经存在于任何语言中,并且服务器的代码也不会太复杂。

答案 1 :(得分:0)

对于SSL证书,您不必更改代码。但是,如果不是SSL,您可能需要检查服务器端口并抛出异常:

if ($_SERVER['SERVER_PORT'] != 443) {
    header('405 Method Not Allowed');
    exit();
}

当然,您可以使用Apache实现类似的限制,只需在端口80上提供服务即可。

对于IP限制,$_SERVER['REMOTE_ADDR']应该在大多数情况下都有效。不幸的是,我认为代理人没有办法解决问题。但是,API密钥应该足以满足大多数安全要求。

答案 2 :(得分:0)

回答有点迟,但是对于检查remote_addr可能来自代理的请求,您可以检查是否 设置了X-forwarded-for标头,如果存在则使用它。

http://en.wikipedia.org/wiki/X-Forwarded-For