2009-06-15 29 views
20

Tôi có một trang aspx đang kiểm tra Request.IsSecureConnection để đảm bảo nó là đúng, nếu không nó chuyển hướng đến trang bảo mật tại https://www.domain.com/page.aspx.Tại sao Request.IsSecureConnection trả về false khi đúng là mong đợi

Máy chủ có chứng chỉ SSL được cài đặt cho miền và trình duyệt hiển thị biểu tượng khóa móc.

Mã giống nhau chạy tốt trên một máy chủ khác, nhưng bây giờ Request.IsSecureConnection luôn trả về false.

Tôi đã tạo tệp aspx hoàn toàn trống, chỉ in giá trị trả về của Request.IsSecureConnection và nó vẫn sai, do đó không có nội dung nào khác xuất phát từ yêu cầu http chuẩn.

Ai đó có thể gợi ý điều gì có thể gây ra điều này hoặc đưa ra bất kỳ gợi ý nào về cách tôi có thể tìm hiểu điều gì gây ra điều này luôn trả về false?

Trả lời

28

Nếu có bộ định tuyến cân bằng tải hoặc tương tự ở phía trước máy chủ web của bạn với chấm dứt ssl thì kết nối từ đó đến máy chủ web của bạn sẽ không vượt quá SSL. Trong trường hợp này, bạn thường phải kiểm tra kết nối trên một cổng cụ thể hoặc các tiêu đề được đặt bởi bộ cân bằng tải.

+3

Hoặc để thiết bị cân bằng tải để đảm bảo kết nối được bảo mật từ khách hàng đến trang web của bạn. –

+0

Anh ấy có thể xác nhận sự nghi ngờ này bằng cách xuất ra Request.UserHostAddress và/hoặc Request.UserHostName trên trang kiểm tra đó. Nếu những giá trị đó không phải là khách hàng mà anh ta đang kết nối từ (hoặc proxy mà khách hàng đang trải qua), có khả năng họ sẽ xác định một số loại cân bằng tải hoặc proxy ngược lại đang ngồi trước máy chủ web của anh ấy. –

+0

Request.UserHostAddress và Request.UserHostName cả hai đều trả về địa chỉ IP của tôi. – Will

1

Một số bộ cân bằng tải thêm tiêu đề mới vào yêu cầu mà bạn có thể sử dụng để xác định xem yêu cầu ban đầu từ ứng dụng khách có qua SSL hay không. Với các trang web Azure, mã sau dường như hoạt động:

if (string.IsNullOrEmpty(Request.Headers["x-arr-ssl"])) 
{ 
    // No SSL 
} 
else 
{ 
    // Secure connection 
} 

Một số bộ cân bằng tải khác có thể sử dụng tiêu đề khác, ví dụ: X-Forwarded-Proto.

+0

Chúng tôi sử dụng "SSLSessionID" chỉ cho một điểm dữ liệu khác. –

Các vấn đề liên quan