首页 / 知识

关于 ruby?? on rails:如何支持 SSL 客户端证书认证?

2023-04-13 06:28:00

关于 ruby?? on rails:如何支持 SSL 客户端证书认证?

How do I support SSL Client Certificate authentication?

我想做 myopenid 做的事情——一旦你登录了,你可以点击一个按钮来为你生成一个 SSL 证书;浏览器然后下载此证书并存储它。当您稍后返回 yourid.myopenid.com 时,您的浏览器可以使用其存储的证书进行身份验证,因此您不需要密码。

所以我的问题是需要什么才能使其正常工作?如何生成证书?将它们呈现给我后如何验证它们?

我的堆栈是使用 Passenger 的 Rails on Apache,但我并不太特别。


这些通常被称为客户端证书。

我实际上并没有使用过它,但是可以在此处找到一个修改后的 restful-authentication 版本,看起来就像你所追求的那样。

我通过 Nic 博士的帖子找到了这个


取决于服务器,但我知道的最简单的解决方案是使用 Apache:

FakeBasicAuth

"When this option is enabled, the Subject Distinguished Name (DN) of the Client X509 Certificate is translated into a HTTP Basic Authorization username. This means that the standard Apache authentication methods can be used for access control. The user name is just the Subject of the Client's X509 Certificate (can be determined by running OpenSSL's openssl x509 command: openssl x509 -noout -subject -in certificate.crt). Note that no password is obtained from the user..."

不确定 Rails,但通常的 REMOTE_USER 环境变量应该可以通过某种方式访问??。


您可以使用特定于浏览器的代码在客户端浏览器中生成证书。看到这个问题

您还可以在 Ruby 中使用 OpenSSL 在服务器端生成 SSL 客户端证书(请参阅此 q)。 (这将在任何没有浏览器特定代码的浏览器中工作,但您的服务器将生成客户端的私钥,这对于加密纯粹主义者来说并不理想。)

无论您使用哪种方法生成它们,您都需要将您的网络服务器配置为需要客户端证书。有关示例,请参阅 Apache 文档。


如果你想生成证书,你需要让客户端生成一个密钥对,并且至少给你发送一个公钥。您可以通过 Javascript 调用在 Firefox 中执行此操作,它是 crypto.generateCRMFRequest。我猜在其他浏览器中也有特定于浏览器的方法。但首先,您需要弄清楚在获得公钥后如何颁发证书。

您可以使用 OpenSSL 在服务器上编写脚本,但它内置了对 CSR 的支持,而不是 Firefox 发送给您的 CRMF 格式。因此,您需要编写一些代码来将 CRMF 转换为 CSR,这将需要某种 DER 处理能力……我只是在这里触及表面——操作 CA,即使对于玩具应用程序,也不是微不足道的。

像 OpenId 和 PKI 解决方案这样的 SSO 解决方案确实存在重叠,而且 PKI 有一种优雅之处。但魔鬼在细节中,有充分的理由说明为什么这种方法已经存在了很长时间,但只在政府和军事应用中起飞。

如果您对此感兴趣,请跟进一些特定于您希望在其上开发 CA 服务的平台的问题。


我一直在努力解决这个问题。我想做同样的事情,我知道很多其他网站所有者都想要这个功能,不管有没有第三方提供商。

我创建了必要的服务器设置和一个 firefox 插件来处理基于证书的身份验证。前往 mypassfree.com 获取免费的 Firefox 插件。给我发电子邮件(该页面上的链接)以获取服务器设置,因为我还没有用一个不错的安装程序打包它。

服务器设置是 Apache2 OpenSSL Perl(但你可以用任何语言重写 perl 脚本)

乔纳森


证书支持客户端认证

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢