2013-04-29 43 views
6

Tôi có nhiều trang web chạy trên IIS của mình, hiện tại đối với một trong các trang web (SiteB), chúng tôi cần hỗ trợ yêu cầu ssl. Tôi đã kích hoạt nó chỉnh sửa các ràng buộc cho trang web, nhưng vấn đề là khi tôi chọn giao thức chỉnh sửa SSL bindings HostName lĩnh vực bị vô hiệu hóa, không thể thiết lập tên máy chủ để đáp ứng yêu cầu https, điều này gây ra rằng tất cả các trang web của IIS của tôi nếu được yêu cầu với https : // tải trang web của siteB.IIS 7 thêm SSL vào một trang web, tất cả các trang web khác đáp ứng yêu cầu https

Ví dụ bidings của tôi là tiếp theo

Site A 

IP Port HostName 
*  80 www.sitea.com 

Site B 
IP Port Hostname 
* 443 www.siteb.com 
* 80 www.siteb.com 

Nếu tôi gõ https://www.siteb.com trong trình duyệt của tôi nó hoạt động một cách chính xác, nhưng nếu tôi gõ https://www.sitea.com trong trình duyệt, trang web siteb được nạp với hostname của Sitea.

Làm cách nào tôi có thể thực hiện điều đó chỉ https://www.siteb.com phản hồi yêu cầu https trên IIS của tôi?

Tôi đã thử với lệnh appcmd quá nhưng It't doesnt work.

appcmd set site /site.name:{sitB} /bindings.[protocol='https',bindingInformation='*:443:*'].bindingInformation:*:443:siteB.com 

Cảm ơn sự giúp đỡ của bạn.

+0

Tôi gặp vấn đề tương tự. Tôi sẽ bắt đầu một tiền thưởng. – Germstorm

+0

Bạn đã xây dựng chứng chỉ chưa? CN là gì? –

+0

Có phải tất cả các trang web khác được lưu trữ dưới dạng "Thư mục ảo" hoặc "Ứng dụng" hay "Trang web" không? Dường như bạn đã áp dụng cài đặt cho trang web và nhiều thư mục/ứng dụng ảo được lưu trữ trên trang web. –

Trả lời

9

Các Root Vấn đề
hành vi bất ngờ này không phải là do IIS quá nhiều như đó là vì các giao thức mã hóa web.

Hai giao thức mã hóa web chính là SSL và TLS. Cả hai giao thức này đều thương lượng một kết nối an toàn trước khi chuyển bất kỳ thông tin yêu cầu nào đến máy chủ. Điều này có nghĩa rằng, trên các yêu cầu an toàn, máy chủ không thực sự tìm hiểu tên máy chủ cho đến sau khi kết nối an toàn được thực hiện.

Tiện ích mở rộng cho TLS và SSL đã được tạo để giải quyết giới hạn này. Nó được gọi là SNI (Nhận dạng tên máy chủ). Vấn đề là phần mở rộng này cần được hỗ trợ trên cả máy chủ và máy khách. Hiện tại, trình duyệt hỗ trợ khách hàng hơi phần nào. Xem bài viết SNI cho danh sách trình duyệt.

IIS của Xử lý Vấn đề
Đó là vì trong những hạn chế nêu trên hostname mà IIS không cho phép bạn để ràng buộc hostname HTTPS bindings. Không có cách nào để IIS định tuyến các yêu cầu HTTPS tới một tên máy chủ cụ thể vì nó không biết tên máy chủ được yêu cầu khi nó bắt đầu thương lượng kết nối lần đầu tiên. Khi IIS đã thương lượng một kết nối an toàn với máy khách và biết rằng tên máy chủ được yêu cầu của họ là cho một trang web khác với một liên kết HTTPS (ví dụ yêu cầu https://sitea.com) IIS có thể trả lại mã lỗi hoặc cố gắng thất bại duyên dáng. IIS chọn cái sau và cố gắng thất bại bằng cách phục vụ lên trang web với sự ràng buộc HTTPS mặc dù người dùng đang yêu cầu một trang web khác.

Solutions/Cách giải quyết

  • Tạo một quy tắc viết lại để chuyển hướng tất cả các yêu cầu HTTPS cho các trang web không an toàn để HTTP.
  • Nâng cấp lên IIS 8 để sử dụng phần mở rộng SNI. Sau đó yêu cầu khách truy cập nâng cấp lên trình duyệt hỗ trợ SNI.
  • Yêu cầu trang web bảo mật của bạn trả lại thông báo lỗi khi nhận được yêu cầu cho miền khác.
  • Bind theo địa chỉ IP thay vì tên máy kể từ IIS có thể yêu cầu tuyến đường HTTPS theo địa chỉ IP

Tài liệu tham khảo
Hầu hết các thông tin của tôi đến từ Wikipedia article on SNI

+0

Thử nghiệm với IIS 8, có vẻ như bạn có thể xử lý trường hợp này mà không có SNI. SNI chỉ bắt buộc phải chọn chứng chỉ tương ứng với miền được yêu cầu. IIS 8 dường như có thể chọn trang web sau đó. Thử nghiệm bằng cách chỉ định miền sitea trên https ràng buộc, không ràng buộc https trên máy chủ, truy cập thông qua xp IE8 (không có SNI trong trường hợp này): https trên sitea => success, https trên các tên miền khác được phục vụ bởi server => cert mismatch rồi IIS 404 không ràng buộc khớp. Không thể thực hiện được với IIS7, điều này không cho phép giới hạn https ràng buộc với một miền. –

2

Chúng tôi chạy máy chủ web với nhiều trang web yêu cầu SSL không có vấn đề gì.

Nếu tôi hiểu vấn đề của bạn một cách chính xác - bạn sẽ cần phải thiết lập một ràng buộc thay vì tên máy chủ - điều này sẽ không hoạt động. Vì vậy, đối với mỗi trang web hỗ trợ SSL mà chúng tôi lưu trữ, chúng tôi yêu cầu một địa chỉ IP bên ngoài riêng biệt. Sau đó, nhập địa chỉ IP đó làm liên kết khi thiết lập trang trong IIS.

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