Rails/Apache/Mongrel/SSL

Hi all,

I'm looking for a little guidance here in setting up my .htacces and/ or httpd.conf files. I've got a single Rails app that happens to have two domains pointing to it...let's say www.domain1.com and www.domain2.com. www.domain2.com has an SSL certificate associated with it, so any request can be made via http or https and this seems to be working fine (domain1.com can only be accessed via http).

My problem is that I need all actions for a particular controller (registration) to be encrypted. The possible actions are:

/registration /registration/showClasses /registration/showForm /registration/sendRegistration /registration/sendQuestionnaire

If any requests are made to http://www.domain1.com/registration/<action> (1st domain, un-encrypted) or http://www.domain2.com/registration/<action> (2nd domain, un-encrypted) then they should be forwarded to https://www.domain2.com/registration/<action> (2nd domain, encrypted).

Any other request (to any controller OTHER THAN the registration controller) should be forwarded to http://www.domain1.com/controller/<action>\.

At this point, the SSL seems to be set up just fine...I can go to https://www.domain2.com and get a secure page. However there's nothing keeping me from just changing the protocol to http in the address bar or changing the whole address to http://www.domain1.com and just bypassing the SSL encryption entirely.

Any thoughts? Thanks!

-Brian

Here you go => http://github.com/rails/ssl_requirement/tree/master

Hi Mauricio,

Thanks for the link...this definitely looks like it will get me going in the right direction.

Is there a way, using this plug-in, to specify that when an "ssl_required" action is called that it needs to be directed to the https://www.domain2.com domain? In other words, if a user requests a secure action from the 1st domain, it's not enough to simply change the protocol from http to https...it needs to be redirected to the 2nd domain (it's the only one with an SSL certificate). Does that make sense at all?

-Brian

Hi all,

I'm looking for a little guidance here in setting up my .htacces and/ or httpd.conf files. I've got a single Rails app that happens to have two domains pointing to it...let's say www.domain1.com and www.domain2.com . www.domain2.com has an SSL certificate associated with it, so any request can be made via http or https and this seems to be working fine (domain1.com can only be accessed via http).

My problem is that I need all actions for a particular controller (registration) to be encrypted. The possible actions are:

/registration /registration/showClasses /registration/showForm /registration/sendRegistration /registration/sendQuestionnaire

If any requests are made to http://www.domain1.com/registration/ <action> (1st domain, un-encrypted) or http://www.domain2.com/registration/ <action> (2nd domain, un-encrypted) then they should be forwarded to https://www.domain2.com/registration/&lt;action&gt; (2nd domain, encrypted).

Any other request (to any controller OTHER THAN the registration controller) should be forwarded to http://www.domain1.com/controller/ <action>.

At this point, the SSL seems to be set up just fine...I can go to https://www.domain2.com and get a secure page. However there's nothing keeping me from just changing the protocol to http in the address bar or changing the whole address to http://www.domain1.com and just bypassing the SSL encryption entirely.

Any thoughts? Thanks!

Stick a before_filter that checks whether it's an ssl request?

Hi Brian,

I think it's completely possible, looking at the source code, the method that sends the client to the SSL enabled page is this one:

    def ensure_proper_protocol       return true if ssl_allowed?

      if ssl_required? && !request.ssl?         redirect_to "https://" + request.host + request.request_uri         flash.keep         return false       elsif request.ssl? && !ssl_required?         redirect_to "http://" + request.host + request.request_uri         flash.keep         return false       end     end

You would just have to tweak it to your own needs.

That seems to do the trick. Thanks!