Sự khác biệt giữa chứng chỉ SSL SAN và SNI là gì?


21

Ai đó có thể giải thích cho tôi sự khác biệt giữa các chứng chỉ theo cách đơn giản? Tôi đọc một số bài viết nhưng có vẻ như họ làm cùng một công việc, cụ thể là mã hóa nhiều tên miền bằng một chứng chỉ.


11
Chà, đầu tiên, không có thứ gọi là chứng chỉ SSL "SNI".
Michael Hampton

Câu trả lời:


36

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.


2
Điều đáng chú ý là CN đã bị từ chối trong một thời gian dài, nếu một tên trong CN nhưng không phải SAN (hoặc nếu một chứng chỉ không có trường SAN) thì rất nhiều khách hàng sẽ nổi giận với bạn.
coderanger

1
@coderanger Nếu có trường SAN, trường CN bị hầu hết khách hàng bỏ qua. Nếu không có trường SAN, trường CN hoạt động với hầu hết các khách hàng (và nếu họ nổi giận với tôi thì nó không hiển thị).
kubanchot

1
Họ đang âm thầm đánh giá bạn.
womble

SNI có giống với máy chủ ảo không, trong đó một máy chủ có một địa chỉ IP chứa một số máy chủ được xác định trong cấu hình HTTP? (một số cách ghép kênh: sử dụng một IP cho một số certs thay vì mỗi chứng chỉ với một IP khác nhau, trong đó IPv4 là nguồn tài nguyên khan hiếm ngày nay)?
Fernando Gabrieli

1
@FernandoGabrieli Có, nó cho phép thiết lập dựa trên tên giống nhau ở cấp độ TLS.
Håkan Lindqvist

14

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 ( ServerNames hoặc ServerAliases trong tọa độ apache, hoặc server_nametrong 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ư wgethoặ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.comsẽ chứa một Common Name của *.foobar.comvà một SAN của foobar.com.


1
Về mặt kỹ thuật, tôi không tin rằng máy khách SSL có thể hỗ trợ SNI (theo hiểu biết của tôi, đó là tiện ích mở rộng TLS chưa từng xuất hiện trong SSL).
Håkan Lindqvist

3
Cả SAN và SNI đều yêu cầu hỗ trợ khách hàng. Tuy nhiên vì SAN đã tồn tại lâu hơn rất nhiều, nên nó được hỗ trợ rộng rãi hơn.
kasperd

4

Đ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.


0

Đâ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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.