2012-03-07 58 views
11

Tôi đang gặp sự cố khi gửi yêu cầu JSONP từ HTTPS trang web tới trang web HTTP.Yêu cầu HTTPS HTTPS đến HTTP

Tôi có môi trường thử nghiệm (không phải cục bộ) trên https (có chứng chỉ hợp lệ) nơi tôi có thể chạy tất cả các yêu cầu chéo/giao thức chéo "thành công" (có cảnh báo nhưng không có lỗi).

Google Chrome Bảng điều khiển Javascript sản lượng:

The page at https://my.test.environment/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704 

Tuy nhiên, trong sản xuất, (trên Google App Engine, appspot subdomain) Google Chrome chặn tất cả các yêu cầu đang chờ người dùng xác nhận.

Google Chrome Javascript đầu ra điều khiển (đặc biệt chú ý đến [bị chặn] văn bản):

[blocked] The page at https://production.appspot.com/ ran insecure content from http://non.secure.site/service?jsonCallback=jsonp1331132928704 

Tôi biết những gì tôi đang làm không phải là an toàn, nhưng các dịch vụ này được cung cấp bởi bên thứ ba và không có sẵn giao tiếp SSL. Tôi thực sự bối rối với điều này bởi vì tôi không hiểu tại sao làm việc (với cảnh báo) trong môi trường thử nghiệm và không phải theo appspot (Google App Engine).

Tôi đã cố gắng điều tra tiêu đề không thành công.

tiêu đề môi trường thử nghiệm:

Connection:Keep-Alive 
Content-Encoding:gzip 
Content-Language:es 
Content-Length:2524 
Content-Type:text/html;charset=utf-8 
Date:Wed, 07 Mar 2012 15:48:30 GMT 
Keep-Alive:timeout=15, max=100 
Set-Cookie: cookie_info... 
Vary:Accept-Encoding 

tiêu đề APPSpot:

access-control-allow-credentials:false 
access-control-allow-origin:* 
cache-control:no-cache, must-revalidate 
content-encoding:gzip 
content-length:47890 
content-type:text/html; charset=utf-8 
date:Wed, 07 Mar 2012 14:52:02 GMT 
expires:Fri, 01 Jan 1990 00:00:00 GMT 
pragma:no-cache 
server:Google Frontend 
set-cookie: coookie_info.... 
status:200 OK 
vary:Accept-Encoding 
version:HTTP/1.1 

Tôi không có ý tưởng tại sao điều này đang làm việc trên thử nghiệm envinroment và phương pháp tương tự được chặn trên APPSpot bằng Google Chrome.

Mọi suy nghĩ?

+4

Chrome xử lý các trang HTTPS của Google thường khác với các trang HTTPS chuẩn (ví dụ: kiểm tra chứng chỉ đặc biệt). Có thể đây cũng là trường hợp cho nội dung không an toàn không? – Robert

+0

Mayte bạn có quyền. Trên thực tế, sự cố chỉ xảy ra khi chúng tôi triển khai ứng dụng trên GAE (appspot sử dụng chứng chỉ của Google). Tôi sẽ digg vào nó. Cảm ơn! –

+0

Tôi có cùng một sự cố trên máy chủ của riêng tôi và giấy chứng nhận (hợp lệ) ... – Stefano

Trả lời

1

Proxy apache sẽ thực hiện yêu cầu tới điểm cuối thay cho bạn. Bạn thậm chí có thể có các yêu cầu không phải jsonp cho một dịch vụ (json, xml, hình ảnh, đăng, đặt, xóa, v.v ...) vì trình duyệt cho rằng nó đang thực hiện yêu cầu đến cùng một miền.

tập tin vhost non.secure.site của bạn sẽ chứa một cái gì đó giống như

ProxyRequests Off 
ProxyPreserveHost On 
<Proxy *> 
    Allow from all 
</Proxy> 
ProxyPass /appspot https://production.appspot.com/ 
ProxyPassReverse /appspot https://production.appspot.com/ 

Khi bạn cài đặt nó bạn chỉ cần gọi dịch vụ như ...

http://non.secure.site/appspot/service?jsonCallback=jsonp1331132928704 

Google ProxyPass để biết thêm

https://serverfault.com/questions/429404/help-me-understand-how-to-use-proxypass

0

Nếu bạn không có lựa chọn nào khác ngoài chúng tôi mà không bảo đảm API của bên thứ ba, bạn có thể tự mình nghĩ về MITM chính API đó.

Tạo tập lệnh phía máy chủ sẽ chỉ được truy cập thông qua SSL và sẽ hoạt động như một proxy hoặc giao nhận giữa thẻ của bạn và API. Bằng cách đó bạn có thể tăng cường bảo mật bằng cách thực hiện kiểm tra và xác thực của riêng mình trên dữ liệu và vì bạn sẽ phân phối nó dưới SSL, bạn sẽ không gặp phải bất kỳ lỗi "Nội dung hỗn hợp" nào.

BTW, tôi chưa thử nghiệm, luôn có khả năng các trang web trong chứng chỉ Google được phân phát từ GAE sẽ hoạt động khác nhau.

Hy vọng tôi có thể trợ giúp.

0

Tôi gặp vấn đề tương tự khi thực hiện cùng một nội dung giữa http và https. Đây là vấn đề về miền chéo.

Điều quan trọng nhất bạn cần là trang bên máy chủ bạn đang sử dụng để thực hiện curl phải đặt một số tiêu đề để cho phép kết nối http đến https. Đây là bên dưới ....

header("Access-Control-Allow-Origin: your https url"); 
header("Access-Control-Allow-Methods: POST, GET"); 
header("Access-Control-Max-Age: 1728000"); 

header("Access-Control-Allow-Headers: Content-Type, Connection, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"); 
header("Connection: close"); 
Các vấn đề liên quan