Câu trả lời:
SAN (Subject Name Alternative) là một phần của giấy chứng nhận X509 spec, nơi chứng nhận có một trường với một danh sách tên thay thế mà cũng có giá trị cho các đối tượng (ngoài các Common Name đơn / CN). Tên trường và ký tự đại diện này về cơ bản là hai cách sử dụng một chứng chỉ cho nhiều tên.
SNI (Chỉ định tên máy chủ) là phần mở rộng giao thức TLS , là loại giao thức TLS tương đương với tiêu đề Máy chủ HTTP. Khi một khách hàng gửi này, nó cho phép các máy chủ để nhận giấy chứng nhận phù hợp để trình bày cho khách hàng mà không có giới hạn của việc sử dụng địa chỉ IP riêng biệt ở phía máy chủ (giống như cách thức HTTP header chủ được sử dụng nhiều cho HTTP đơn giản).
Xin lưu ý rằng SNI không phải là thứ được phản ánh trong chứng chỉ và nó thực sự đạt được loại trái ngược với những gì câu hỏi yêu cầu; nó đơn giản hóa việc có nhiều chứng chỉ, không sử dụng một chứng chỉ cho nhiều thứ.
Mặt khác, nó phụ thuộc rất nhiều vào tình huống con đường nào thực sự thích hợp hơn. Ví dụ, những gì câu hỏi yêu cầu gần như chắc chắn không phải là những gì bạn thực sự muốn nếu bạn cần chứng chỉ cho các thực thể khác nhau.
SAN là viết tắt của Tên thay thế chủ đề và là thuộc tính chứng chỉ x509 và SNI là một tính năng mà ứng dụng khách SSL / TLS có thể hỗ trợ, do đó là một thực thể hoàn toàn khác.
Sử dụng chứng chỉ với SAN, bạn có thể lưu trữ nhiều trang web hỗ trợ HTTPS trên một địa chỉ IP ngay cả khi máy khách không hỗ trợ SNI . Trong trường hợp này bạn giữ một giấy chứng nhận cho tất cả các trang web của bạn, và chứng chỉ đó phải chứa tất cả các tên trang web ( ServerName
s hoặc ServerAlias
es trong tọa độ apache, hoặc server_name
trong nginx) vì nó là SAN . Đây là một tập hợp con của một phương pháp kế thừa, một phương pháp đã mở rộng "một trang web hỗ trợ HTTPS trên mỗi địa chỉ IP riêng biệt". Hiện tại chỉ có CDN lớn gắn bó với SAN .
Sử dụng SNI, bạn cũng có thể lưu trữ nhiều trang web hỗ trợ HTTPS trên một IP, bạn giữ một chứng chỉ x509 riêng cho từng trang web và không đề cập đến các tên trang web khác trong thuộc tính SAN của chúng , nhưng các máy khách TLS (ví dụ: trình duyệt và máy khách bảng điều khiển như wget
hoặc curl
) phải hỗ trợ SNI . Đây là một cách tiếp cận hiện đại, vì HĐH cuối cùng không hỗ trợ SNI ngoài luồng là Windows XP với IE 6.x, nếu tôi nhớ chính xác. Ngày nay bạn sẽ nhìn thấy SAN thuộc tính nếu bạn mua wildcard giấy chứng nhận - ví dụ chứng chỉ như vậy cho *.foobar.com
sẽ chứa một Common Name của *.foobar.com
và một SAN của foobar.com
.
Điều này trộn hai phần của quá trình chứng chỉ.
SAN là một tên thay thế chủ đề. Đây là một cách để tạo một chứng chỉ cho nhiều tên miền. Bạn chỉ cần thêm các tên miền khác mà bạn muốn có chứng chỉ cho trường SAN trong chứng chỉ. Trình duyệt sau đó cũng sẽ chấp nhận tính hợp lệ trên các tên miền này.
SNI là Chỉ định Tên Máy chủ và là một phần của SSL. Nó cho phép bạn lưu trữ nhiều trang SSL trên một IP vì tên máy chủ mong muốn được gửi cùng với bắt tay SSL và máy chủ có thể chọn chứng chỉ chính xác cho câu trả lời.
Đây là một câu trả lời dễ đọc hơn (có thể) của con người:
SNI được tiến hành ở phía máy khách và nói với ngăn xếp TLS "Tôi muốn nói chuyện với một máy chủ có tên là [Máy chủ X]". Máy chủ nhìn thấy chuỗi [Máy chủ X] này và trả lời bằng chứng chỉ phù hợp. Một ví dụ thực tế là khi một máy chủ duy nhất cần phục vụ lưu lượng cho nhiều tên miền. Nó cũng hữu ích nếu khách hàng sử dụng IP (để tránh sự chậm trễ tra cứu DNS) nhưng chứng chỉ CN không đề cập đến IP.
SAN là một danh sách "Còn được gọi là" trong chứng chỉ. Cách này máy chủ có thể sử dụng một chứng chỉ duy nhất cho nhiều tên. Người ta có thể thêm nhiều tên miền vào cùng một chứng chỉ và thậm chí là một danh sách các IP.
Như bạn có thể thấy, mọi thứ chồng chéo lên nhau. Lựa chọn giữa một hoặc cả hai phụ thuộc vào nơi người ta có quyền kiểm soát. Một số khách hàng có thể không nhận ra tên trong SAN và cách duy nhất để giải quyết đó là thông qua việc cung cấp chứng chỉ phù hợp dựa trên SNI. Có những kịch bản mà máy chủ cung cấp API cho một chứng chỉ hoặc máy khách không gửi SNI. Đối với những trường hợp này, SAN là lối thoát duy nhất.
Công ty của tôi sử dụng cả hai. Chúng cung cấp sự linh hoạt và làm cho khả năng tương thích ngược và tiến dễ dàng hơn.