1

我有一个带有公共 REST API 的 Rails 应用程序,它使用 SSL 客户端证书对 API 客户端进行身份验证。

我希望该应用程序充当简单的 CA。管理员用户应该能够访问站点上的页面并请求新证书。应用程序应该生成一个新的 SSL 证书,用应用程序的私钥签名,并以某种形式将其返回给管理员用户。

然后,管理员用户将在客户端应用程序中安装此证书。然后,这些应用程序将能够使用新证书访问 REST API。

实现这一点的最简单方法是什么?我知道生成和签署新证书的唯一方法是使用openssl命令行,在openssl服务器上配置为 CA 之后(例如像这样)。我是否需要这样做,并openssl在 Rails 中使用反引号进行通信?这看起来既繁琐又脆弱。

我应该如何将证书退还给管理员?我可以将证书作为文本文件传递出去以供下载。我见过 CA Web 界面允许用户从浏览器请求证书,然后将证书直接安装到浏览器中。然后管理员必须导出证书以将其传递给客户端脚本。

我不认为acts_as_CARails 有任何类型的“”宝石?

[请注意,我已经知道如何根据我的私钥对客户端请求进行身份验证。这个问题特别与颁发新证书有关。]

4

3 回答 3

2

您可能想看看我们过去如何使用我们称为“证书仓库”的工具完成类似的事情。

于 2012-10-23T10:41:00.460 回答
0

您可以使用 openssl gem 或sshkey生成密钥对。

将证书作为文本文件或纯文本传递

于 2012-10-23T10:32:44.180 回答
0

我现在有这个工作。Ruby 中的 OpenSSL 库具有 CA 工作所需的所有方法,此处提供了清晰的示例:http ://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL.html

我不需要在服务器上设置 OpenSSL CA(如上面问题中的链接)——即使用命令行 openssl 作为 CA。从 Ruby 中使用它,您需要管理自己的 CA 证书存储、唯一序列号等。

如果您希望客户端证书可以直接下载到浏览器,请提供带有“.p12”文件扩展名的 PCKS12 捆绑包。请参阅http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/PKCS12.html 为“名称”参数使用友好名称——这不会影响您的证书,但它可以很容易地在浏览器的选择密钥对话框中找到。不要在 PKCS12 包中包含您的 CA 证书,Windows 会要求用户将您的 CA 安装为完全受信任的根 CA。

于 2012-10-23T10:37:17.487 回答