2008-11-09 8 views
8

Tôi có một máy chủ web, phục vụ các tên miền khác nhau, nhưng chỉ được gán một địa chỉ IP. Điều đó làm việc tốt với các máy chủ ảo trong Apache. Bây giờ tôi muốn kết nối được mã hóa SSL cho các trang web. Làm cách nào để tôi có thể đặt các chứng chỉ SSL khác nhau cho các vhost khác nhau?Làm cách nào để tôi có thể thiết lập Chứng chỉ SSL khác nhau cho vhost trên Apache?

Sử dụng các IP khác nhau cho các tên máy chủ khác nhau sẽ là một giải pháp - không phải là rất thanh lịch nhưng có thể. Nhưng tôi muốn biết, làm cách nào tôi có thể sử dụng các chứng chỉ SSL khác nhau cho các vhost khác nhau. Vì vậy, tôi tìm một giải pháp chỉ với một địa chỉ IP.

Trả lời

8

UPDATE: 2013

Dường như SNI cuối cùng đang bắt đầu cất giữ như các trình duyệt cũ đang giảm đi. Dưới đây là docs for Apache SNI và đây là một số wikipedia article on SNI bao gồm biểu đồ trên các trình duyệt hỗ trợ nó. Tóm lại, tất cả các trình duyệt chính đều hỗ trợ nó trong các phiên bản được hỗ trợ; nếu việc hỗ trợ các trình duyệt cũ là quan trọng, bạn có thể phải cân nhắc điều đó.

------ câu trả lời trước ------------

Hosts SSL phải được gắn liền với một sự kết hợp địa chỉ/cổng IP duy nhất, do đó bạn không thể sử dụng lưu trữ ảo (Hoặc ít nhất, nó chỉ có thể có một máy chủ lưu trữ ssl trên mỗi địa chỉ IP). Điều này là do thực tế rằng https bắt đầu mã hóa trước khi thông số Host: được gửi trong http, và do đó nó không thể xác định mật mã nào sử dụng từ tên máy chủ - tất cả nó có là địa chỉ IP.

Điều này có thể dễ dàng sửa lỗi nếu HTTP có lệnh TLS để nó có thể bắt đầu SSL sau khi yêu cầu tên máy chủ, nhưng không ai hỏi tôi.

Đối với câu trả lời dứt khoát, xem http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

+2

Thực tế, hiện có RFC 2817, cho phép TLS nâng cấp trong kết nối HTTP. Nó được thực hiện trong Apache. –

+0

Nhưng trình duyệt có hỗ trợ tính năng này chưa? – DGM

2

AFAIK nó không thể thiết lập chứng chỉ SSL khác nhau cho các máy ảo tên dựa trên sử dụng mod_ssl. Bạn có thể đọc lý do chi tiết here. Một thay thế sẽ được sử dụng IP dựa trên máy chủ ảo (Mà có lẽ là không thể/không phải là một giải pháp rất thỏa mãn) - chỉ cần chèn SSLCertificateFile chỉ thị khác nhau, hoặc bạn có thể thử phương pháp this sử dụng mod_gnutls.

+0

Wow, RFC cho SNI đã được bắt đầu vào năm 2003 và nó vẫn chưa bắt kịp? Tôi bị hấp dẫn bởi tuyên bố rằng các trình duyệt đã hỗ trợ nó mặc dù. – DGM

4

Sau khi gợi ý trong các câu trả lời được đưa ra và nhận xét cho nó (đặc biệt là Martin v. Löwis) Tôi đã làm một số googling và tìm thấy this website about RFC 2817 and RFC 3546. RFC 3546 có vẻ là một giải pháp tốt.

1

Bạn sẽ cần kết hợp IP: cổng riêng cho từng vhost.

RFC 3546 chưa khả thi. IE chỉ hỗ trợ nó khi chạy dưới Vista, và cuối cùng tôi đã kiểm tra Safari cũng không quản lý nó.

+0

Có, các trình duyệt hỗ trợ tính năng này bị hạn chế, nhưng đó là một giải pháp khả thi. Một điều đáng tiếc là không có giải pháp 'đúng' nào tồn tại. RFC 3546 có vẻ là hy vọng tốt nhất cho một giải pháp tốt. Đối với thời gian bạn phải đặt hàng nhiều IP hoặc hạn chế các trình duyệt. – Mnementh

+0

Có, hoặc giải pháp tạm thời xấu xí chạy trên một cổng khác. RFC3546 sẽ xảy ra, nhưng ngày hôm đó vẫn không may là một chặng đường dài. – bobince

1

Trong khi mọi thứ mà DGM đề cập là đúng, đã có một số nỗ lực để yêu cầu địa chỉ IP duy nhất cho mọi chứng chỉ bao gồm mod_gnutls và sử dụng TLS extensions. Có một số nhược điểm nhưng chúng có thể chấp nhận được với bạn.

1

Cuối cùng cũng có thể! Bạn cần cả máy chủ và máy khách để hỗ trợ Server Name Chỉ định (SNI)

trình duyệt, hỗ trợ SNI:

  • Mozilla Firefox 2.0 hoặc mới hơn
  • Opera 8.0 hoặc mới hơn (với TLS 1.1 được kích hoạt)
  • Internet Explorer 7.0 hoặc mới hơn (trên Vista, không XP)
  • Google Chrome
  • Safari 3.2.1 trên Mac OS X 10.5.6

doc Điều này cho thấy cuốc để cấu hình của bạn máy chủ: SSL with Virtual Hosts Using SNI