2013-05-06 91 views
0

我有一个在Heroku中运行的Ruby on Rails服务器,我一直在尝试添加SSL以与应用客户端进行通信,这些应用客户端是用Android开发的。Heroku不验证证书请求,为什么?

我创建了一个self-signed certificate,如Heroku的网站上所解释的,并添加了终点为this Heroku's tutorial suggests。一切看起来都很完美,我测试了证书,它也起作用。为了强制服务器重定向到https协议,我添加了'rack-ssl-enforcer'gem。

问题是,当在头/负载(REST控制台或curl)中使用没有证书的任何服务器路由时,我想到ruby服务器应该拒绝请求,只有当请求具有有效证书时才允许。但是,它返回与项目中没有SSL协议时相同的值。

我需要配置更多吗?这是为什么发生?

回答

0

你有没有加入相关的中间件配置描述here

# config/environments/production.rb 
require 'rack/ssl' 
config.middleware.use Rack::SSL 
+0

的“需要‘机架/ SSL’”的工作,但“config.middleware.use机架:: SSL”不因为工作机架-SSL-强制我已经用“config.middleware.use机架: :SslEnforcer”。在Heroku中仍存在同样的问题,但运行“rails s -e production”浏览器提出:“SSL连接错误无法与服务器建立安全连接。这可能是服务器的问题,或者可能需要客户端您没有的身份验证证书。“我试过:curl --cert server.crt“https:// localhost:3000”,我收到了:无法设置私钥文件:'server.crt'type PEM。任何想法? – hugalves 2013-05-06 18:15:04

0

在Rails> 3.2,你可以设置此配置

config.force_ssl = true 

无需额外的宝石或Rack中间件。

+0

不错。但是为什么运行'curl -v https:// www.example.com'当我收到禁止或错误的请求时,我仍然收到页面​​? – hugalves 2013-05-07 12:06:18

+0

为什么你应该收到禁止?你强制使用https,你得到https://www.example.com,没关系。 – 2013-05-07 14:25:11

+0

但是,这样任何人都可以获取或发送服务器数据。我想为Android应用客户端提供一些路由。例如,我有一个路由,负责在一个国家的所有城市json上列出:'https:// example.com/cities/brazil'。今天,任何运行'curl -v https:// example.com/cities/brazil'的人都可以获取所有巴西城市,拥有证书或不拥有证书。那就是问题所在。我想象只有通过正确证书的请求才能检索城市。我怎么能解决这个问题? – hugalves 2013-05-07 14:39:35