您将如何保护对 Web 应用程序管理区域的访问?
我们的 Rails CMS 公开提供页面。我想使用 webserver(apache) 或防火墙(netfilter) 使后端 (/admin) 无法访问。
这可以使用 SSL 证书来完成吗?我想将对后端的访问限制为只有那些拥有“密钥”的人,类似于对服务器的 SSH 访问。
提前致谢。
您绝对正确,SSL 证书是要走的路。设置起来并不是那么棘手,尽管很少这样做。
重要的是要记住这个问题有两个组成部分。第一个是,“我如何让这该死的东西完全正常工作”,这是一个安全系统,第二个是,“我如何设置它,这样我就不会意外地做一些让我感到厌烦的事情安全?”
我建议的第一件事是为管理内容编写一个单独的 Rails 应用程序,并在不同端口上使用不同的 Web 服务器运行它。(如果您真的想避免在管理站点的 URL 中放置端口号,请在两个 Web 服务器前面使用代理,该代理使用Host:
标头将请求重定向foo.com
到一个服务器,然后重定向到另一个服务器admin.foo.com
。)这种分离将帮助确保您不会意外地让普通用户访问管理功能,并使 SSL 设置更容易。
对于管理服务器,将其设置为仅用于 SSL 访问。创建一个新的签名证书,并只允许由该签名证书签名的证书连接。(这取决于网络服务器;如果您确实需要有关如何执行此操作的详细信息,您可能需要发布一个新问题,说明您正在使用的服务器和配置的详细信息。)您可以设置一个页面(在非 SSL 站点,或 SSL 站点上未经身份验证的用户可访问的页面),这将使您的管理员的 Web 浏览器自动生成并上传您可以签署的证书,该证书将授予他们访问权限。
保留您签署的所有证书的副本,以便在您需要撤销访问权限时,可以将该证书放入撤销列表中。
不要使用防火墙,你只会使你的实现复杂化。“正确”的方法是使用 .htaccess 或在 Apache Directory 配置中设置授权。
听起来你想要 SSLRequire
SSLVerifyClient none
<Directory /usr/local/apache/htdocs/secure/area>
SSLVerifyClient require
SSLVerifyDepth 5
SSLCACertificateFile conf/ssl.crt/ca.crt
SSLCACertificatePath conf/ssl.crt
SSLOptions +FakeBasicAuth
SSLRequireSSL
AuthName "Snake Oil Authentication"
AuthType Basic
AuthUserFile /usr/local/apache/conf/httpd.passwd
require valid-user
</Directory>
操作方法:http : //eregie.premier-ministre.gouv.fr/manual/mod/mod_ssl/ssl_howto.html