通过代理实现SSL

时间:2012-10-07 14:53:43

标签: security rest ssl proxy

我们正在编写一个提供RESTful API的应用程序。应用程序需要保护,但我不希望我的身份验证/加密机制污染接口程序和API。

我想知道代理是否可以在我们的案例中提供帮助,但由于我不是网络开发的专家,我需要知道我的图片是否有意义。系统的结构应如下:

  1. 服务器程序只是在TCP端口上导出API,但只能从本地进程访问(绑定到127.0.0.1);

  2. 代理服务器管理SSL和身份验证:

    • URI和方法按原样导出,但是......
    • 只有具有必需功能经过身份验证的用户才能实际呼叫他们,并且......
    • 通讯必须在加密频道上运行
  3. 所以,我的问题是:

    1. 这是一个合理的情况吗?

    2. 我可以为这份工作运行什么样的代理服务器?

    3. 这样做有什么缺点吗?

    4. 感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

似乎您可以通过使用HTTPS 反向代理来实现您的一般方案。那里有多种实现方式。

一个流行的是Apache Httpd:它可以处理传入的HTTPS连接,身份验证(使用各种机制)和反向代理。

localhost上监听“普通”HTTP应用程序的典型场景是在其前面安装Apache Httpd并处理外部连接,其中:

  • mod_ssl处理服务器的SSL / TLS配置。
  • 其中一个mod_auth*模块处理身份验证(取决于您希望如何执行身份验证);这些应该能够将经过身份验证的用户名(例如REMOTE_USER)导出到后端进行授权。
  • mod_proxy处理与后端应用程序的连接(例如,当应用程序服务器使用HTTP本身时,通过mod_proxy_http)。

只允许具有执行某些操作所需功能的用户才是授权部分。这个很难与主API分离,因为前端无法猜测你如何定义“具有所需的功能”。这并不是说你必须将它与其他逻辑纠缠在一起,但是授权系统需要知道你的API是如何工作的(即可能的动作是什么),因此它通常最好在主应用程序中实现。