IIS将客户端证书传递给rails

时间:2012-11-15 20:40:42

标签: ruby-on-rails ruby-on-rails-3 iis-7

我有一个用Rails编写的应用程序,由于客户端,政府的限制,必须在IIS服务器后面运行。我们必须拥有SSL身份验证。因此,在我搜索Google时,我无法弄清楚如何让IIS将客户端证书传递给rails服务器(瘦)。

我见过关于Apache的教程:

SSLOptions +ExportCertData

然后使其可用于请求对象。有关如何配置IIS以执行相同操作的任何想法吗?

3 个答案:

答案 0 :(得分:0)

至少在您提出问题的方式中,IIS无法提供客户端证书,因为客户端证书将由第三方颁发。因此,您需要获得x509证书,证明您的应用程序和证书是作为iis初始连接请求的一部分进行身份验证的。

对于从服务器向客户端提供ssl证书的apache函数,iis不公开此功能。

这就是为什么你无法在谷歌上找到任何东西

答案 1 :(得分:0)

公司希望在IIS服务器后面运行Rails(或其他)应用程序的主要原因是SSO除了保护资源外。

看看这是否有帮助。

我们一直在IIS后面的很多客户位置运行我们的Rails应用程序。我们在Tomcat里面的JRuby中运行我们的Rails应用程序。

安装JK ISAPI重定向器插件的步骤在这里

http://tomcat.apache.org/connectors-doc/webserver_howto/iis.html

使用标准IIS身份验证方案,集成Windows身份验证(协商,NTLM)在IIS中保护所有Rails上下文。

在Rails应用程序中,可以获取登录用户的信息。

request.env['java.servlet_request'].get_remote_user

Rails应用程序还连接到Microsoft AD以获取其他用户信息,如电子邮件,部门等,

由于Rails盲目地信任IIS服务器的身份验证,因此需要阻止它直接访问。

1. Disable HTTP ports in Tomcat
2. Enable only the AJP port
3. Add an IP restriction so that it accepts connection only from the IIS server(s)

== 我认为IIS无法传递证书详细信息。我们尝试提取Kerboros令牌(用于kerboros身份验证委派)但没有取得多大成功,并意识到这是不可能的。

答案 2 :(得分:0)

被告知这可能是不可能的。我终于搞清楚了!以下是我采取的步骤。

  1. 使用OpenSSL创建自己的CA证书。
  2. 使用生成的CA证书,使用Open SSL创建并签署其他证书。
  3. 打开Internet Information Service Manager,单击服务器,然后单击服务器证书。 Server Certificate
  4. 单击“操作”列下的“导入”
  5. 导入后点击您的网站。
  6. 在“操作”列中,单击“绑定...”
  7. 单击“添加”,滚动到“https”,然后选择您导入的CA证书
  8. 再次点击您的网站,进入菜单并点击SSL设置
  9. 选中要求SSL,然后单击无线电按钮,
  10. 再次单击您的站点,然后单击配置编辑器(安装在IIS 7.5中,可以在7.0中添加) Configuration Editor
  11. 转到system.webServer / security / authentication / iisClientCertificateMappingAuthentication
  12. 将启用设置为true
  13. 将manyToOneCertificateMappings设置为true
  14. 点击manyToOneMappings Configuration Editor最右端的...框
  15. 点击合约
  16. 下的操作列下的添加
  17. 添加您创建的用户的用户名和密码(可以在本地计算机上)the ... box
  18. 现在,转到主服务器并重新启动。
  19. 您应该可以使用request.headers hash查看证书。
  20. 哈希的变量包括:

    • CERT_SERIALNUMBER
    • CERT_SUBJECT
    • CERT_ISSUER
    • HTTPS_SERVER_ISSUER
    • HTTPS_SERVER_SUBJECT

    如果找不到某些东西,则可能需要安装模块(用于类似身份验证)。我不记得我安装了哪些。