在Rails应用程序中签署新证书

时间:2012-10-23 10:23:51

标签: ruby-on-rails certificate ca

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

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

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

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

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

我认为Rails没有任何“acts_as_CA”宝石?

[请注意,我已经知道如何根据我的私钥验证客户端请求。这个问题特别涉及颁发新证书。]

3 个答案:

答案 0 :(得分:2)

您可能想看看我们过去使用我们称之为“证书仓库”的工具如何做类似的工作。

答案 1 :(得分:0)

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

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

答案 2 :(得分: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 使用友好名称作为“名称”参数 - 这不会影响证书的DN,但可以在浏览器的选择键对话框中轻松找到它。 不要将您的CA证书包含在PKCS12捆绑包中,Windows会要求用户将您的CA安装为完全受信任的根CA.