2012-05-04 46 views
6

Có một lựa chọn tốt đẹp để cấu hình cho các ứng dụng Rails:Rails: kích hoạt hỗ trợ SSL được Chrome nhầm lẫn

config.force_ssl = true

Tuy nhiên có vẻ như chỉ đặt mà là true không có được Kết nối HTTPS hoạt động. Thậm chí nhiều hơn - sau khi thử (và không) để kết nối với https://localhost:3000 bằng Chrome, tôi đã đặt tùy chọn này thành false và Chrome vẫn cố mở https, ngay cả khi tôi viết http.

Vì vậy, một vài câu hỏi:

- Làm cách nào để Chrome không thử https nữa? - Cách thích hợp để bật SSL trên ứng dụng Rails của tôi là gì?

Cập nhật: Ứng dụng được chạy trên Heroku và có vẻ như https được hỗ trợ ở chế độ tự động. Tôi có thể kiểm tra SSL cục bộ không? Giống như khi chạy máy chủ đường ray?

+0

Máy chủ web nào bạn sử dụng>? Rails là phần mềm trung gian! Máy chủ đó được cấu hình như thế nào? –

+1

Máy chủ của bạn có đặt tiêu đề [Bảo mật giao thông nghiêm ngặt] (http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) tại một thời điểm nào đó (mà Chrome sẽ nhớ) không? – Bruno

Trả lời

5

Trước tiên, tôi phải nói rằng tôi đã không cố gắng này, nhưng có chủ yếu là hai thể lý do cho Chrome vẫn còn sử dụng HTTPS:

  • Sử dụng HTTP Strict Transport Security tiêu đề: nếu máy chủ đặt cho họ, khách hàng (hỗ trợ HSTS, như Chrome) có nghĩa là gắn bó với HTTPS cho tất cả các yêu cầu tiếp theo đối với máy chủ lưu trữ đó.

  • Chuyển hướng vĩnh viễn. Nếu chuyển hướng ban đầu bạn nhận được là sử dụng "301 Moved Permanently" (và không 302 ví dụ) để thực hiện chuyển hướng, (*) trình duyệt có nghĩa là phải nhớ nó ("Tài nguyên được yêu cầu đã được chỉ định URI vĩnh viễn mới và bất kỳ tham chiếu nào trong tương lai vào tài nguyên này NÊN sử dụng một trong các URI trả về ").

Một giải pháp khả dĩ cho việc này là xóa bộ nhớ cache trong trình duyệt của bạn.

(*) This question dường như cho biết đây là trường hợp của Ruby on Rails với cấu hình này).

+0

[Câu trả lời này] (http://stackoverflow.com/a/10523187/372643) nên được quan tâm. – Bruno

+1

xoá bộ nhớ cache đã hoạt động đối với tôi. Tôi có thể thêm rằng bạn có thể vào Thanh tra (Công cụ tìm kiếm) trong Chrome và trong cài đặt (nhấp vào biểu tượng bánh răng) và chọn "Tắt bộ nhớ cache (trong khi DevTools đang mở)". Sau đó, hãy truy cập trang web dưới dạng http: // ..., sau đó đóng DevTools và bạn phải hoạt động. Điều này tránh phải làm một bộ nhớ cache đầy đủ rõ ràng (nếu bạn không muốn) –

+0

Các biểu tượng đã thay đổi ngay bây giờ trong chrome, ít nhất là trong phiên bản của tôi cho Mac OS. Nó vẫn dễ dàng, chỉ cần nhấn hamburger ở phía trên bên phải, đi lịch sử (hoặc lệnh Y để hiển thị lịch sử đầy đủ), sau đó nhấn "clear browsing data" chọn cache (bạn có thể để lịch sử duyệt web thực tế nếu bạn thích) chọn "Cookies và dữ liệu trang web và plugin khác "và" hình ảnh và tệp được lưu trong bộ nhớ cache "thì bạn đã được đặt. – LpLrich

2

Tôi gặp vấn đề tương tự. Những gì tôi đã làm là sử dụng một viên đá quý thực thi ssl mà thêm một middleware xử lý ssl và chuyển hướng. Nó có một tùy chọn nghiêm ngặt thực thi các giao thức được cấu hình.

trong Gemfile của bạn thêm:

gem 'rack-ssl-enforcer' 

trong production.rb add:

config.middleware.use Rack::SslEnforcer, only: %r{your_regex_condition}, strict: true 

Điều này sẽ buộc các trang yêu cầu phải được bảo đảm và phần còn lại được bảo đảm không. Nó vô hiệu hóa tiêu đề HSTS có vấn đề trong chrome (vấn đề bộ nhớ đệm chuyển hướng).

Bạn cũng có thể hết hiệu lực bộ nhớ cache cho tất cả cleints (nếu nó tồn tại) để đảm bảo bạn sẽ không nhận được chuyển hướng vô hạn:

config.middleware.use Rack::SslEnforcer, only: %r{your_regex_condition}, :hsts => { :expires => 1, :subdomains => false } 

cũng loại bỏ các thực thi ssl trong sản xuất.rb (nếu không nó có thể mâu thuẫn với middleware này):

config.force_ssl = false 
1

Hãy xem những gì đã xảy ra khi bạn cập nhật tập tin cấu hình của bạn với:

config.force_ssl = true 

này đã gây ra Rack SSL Middleware được nạp như middleware đầu tiên. Như bạn có thể thấy trong đoạn code, Rack SSL đặt một HSTS header bằng cách thêm dòng này để các tiêu đề: Các trình duyệt

Strict-Transport-Security 

Nó nói với hỗ trợ như Chrome để sử dụng HTTPS chỉ để truy cập vào trang web của bạn.

Vì vậy, một khi bạn thiết lập trở lại:

config.force_ssl = false 

Chrome vẫn sẽ sử dụng HTTPS để truy cập trang web của bạn và gây ra một lỗi.

Để giải quyết vấn đề này, bạn cần xóa bộ nhớ cache HSTS. Bạn có thể làm điều đó bằng cách truy cập url sau trong trình duyệt chrome của mình: chrome: // net-internals/# hsts

0

Mở Công cụ nhà phát triển Chrome khi bạn ở máy chủ cục bộ: Sau đó, bạn có thể nhấp chuột phải vào nút làm mới ↻ và chọn "Bộ nhớ cache trống và tải lại cứng".

Lỗi này cũng có thể xảy ra với bạn, nếu bạn khởi động máy chủ trong môi trường sản xuất, nơi HSTS được bật.

Chrome chuyển hướng bạn đến https://localhost:3000/ và nói "Lỗi kết nối SSL".