2013-05-06 40 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