【问题标题】:Identifying a connection with HTTPS in rails在 Rails 中识别与 HTTPS 的连接
【发布时间】:2014-05-23 22:01:13
【问题描述】:

我希望通过 HTTPS 连接到使用先前同意的证书颁发机构自签名的证书的 rails 应用程序。

API 规范规定用户应该通过他们的证书来识别。我将如何根据他们的 ssl 证书来识别此用户?

我假设 nginx 将处理连接 - 除了request#ssl? 之外,我似乎在任何 Rails 文档中都找不到任何关于 ssl 状态的信息

【问题讨论】:

  • 由先前同意的证书颁发机构自签名的证书”。这似乎自相矛盾:要么是自签名的,要么是由先前同意的 CA 签名的(您不会直接使用根 CA 证书)。
  • @bruno - 是的,抱歉,不清楚。我的意思是 - 我已经获得了证书和该证书的授权 - 这不是一般的 Verisign(或合作)证书。

标签: ruby-on-rails ruby ssl nginx


【解决方案1】:

听起来您打算使用 SSL 客户端证书。您应该可以使用 ssl_verify_client 配置在 nginx 中完成所有这些操作。

这是一个贯穿整个事情的博文:http://rynop.wordpress.com/2012/11/26/howto-client-side-certificate-auth-with-nginx/

这将设置 nginx 为您的应用程序处理 身份验证。如果您需要进行额外的授权(例如检查用户的角色),您需要配置 nginx 以将一些用户身份信息传递给您的应用程序。将类似这样的内容添加到您的 nginx 配置中:

proxy_set_header USER_DN $ssl_client_s_dn;

然后在您的应用中,使用类似这样的方法从证书访问 DN 并在您的用户存储中查找它:

user_dn = request.headers["HTTP_USER_DN"]
user = User.where(dn: user_dn).first

【讨论】:

  • 理想情况下,识别将是数据库驱动的,我认为这在 nginx 中不可行?
  • 我添加了一个示例,说明您应该如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多