Tại sao SSL / TLS không được tích hợp trong Hệ điều hành hiện đại?


15

Rất nhiều giao thức mạng cơ bản tạo nên cơ sở hạ tầng của Internet được tích hợp trong hầu hết các Hệ điều hành chính. Ví dụ: TCP, UDP và DNS đều được tích hợp sẵn trong Linux, UNIX và Windows và được cung cấp cho lập trình viên thông qua các API hệ thống cấp thấp.

Nhưng khi nói đến SSL hoặc TLS, người ta phải chuyển sang thư viện của bên thứ ba như OpenSSL hoặc Mozilla NSS.

SSL là một giao thức tương đối cũ và về cơ bản nó là một tiêu chuẩn công nghiệp phổ biến như TCP / IP, vậy tại sao nó không được tích hợp trong hầu hết các Hệ điều hành?


5
Sự khác biệt thực tế giữa 'tích hợp' và 'đi kèm' là gì? Theo như tôi biết, tất cả các hệ điều hành bằng cách nào đó đều đi kèm với việc triển khai SSL / TLS kèm theo.
zneak

Sự khác biệt là TCP và DNS được triển khai trong mã kernel. Nhưng SSL chỉ có sẵn thông qua các thư viện của bên thứ ba. Mặc dù việc cài đặt hỗ trợ SSL thường là một vấn đề không quan trọng và nhiều hệ điều hành thậm chí còn đi kèm với nó, nhưng vẫn có những nhược điểm thực tế: Ví dụ: nếu tôi viết thư viện sử dụng triển khai SSL cụ thể, (như OpenSSL, NSS, GnuTLS, v.v.) phần mềm của tôi hiện có phần phụ thuộc mà người dùng phải xử lý. Đây không phải là vấn đề nếu SSL được tích hợp vào HĐH. Ý tôi là, tôi không lo lắng nếu bất kỳ người dùng nào của tôi sẽ cần cài đặt hỗ trợ cho TCP.
Kênh72

3
Tôi không nghĩ rằng có SSL tích hợp sẽ giải quyết vấn đề bạn đề cập. Bây giờ, thay vì phụ thuộc vào các thư viện cụ thể, bạn sẽ phụ thuộc vào các hệ điều hành cụ thể.
zneak

1
Tại sao không có thư viện jpeg? Câu hỏi hiệu quả tương tự. Bạn đang nhìn vào vị trí sai của ngăn xếp. Tất cả các hệ điều hành hiện đại đều có một cái gì đó đi kèm để cung cấp hỗ trợ SSL. (MSFT có .NET SDK, linux / solaris có một bó, + có những cái khác)
i Xoay

3
bạn có thực sự muốn nó trong kernel không? Có vẻ như rất đông đối với tôi, đã.
Matthieu M.

Câu trả lời:


8

Tôi nghĩ nó chủ yếu phụ thuộc vào cái mà bạn xem là "HĐH". Nếu nó là kernel, câu trả lời của tôi sẽ là: tại sao nó phải như vậy? Tôi có thể sai, nhưng DNS không phải là một phần của glibc trên các hệ thống Linux, là thư viện của bên thrid?

Nếu không phải là về kernel hoặc không gian người dùng, gần như mọi hệ điều hành / nền tảng đều có ngăn xếp SSL / TLS, một số có thể có nhiều hơn một.

Nó thậm chí có thể được coi là một lợi thế. Nếu không có OpenSSL, bạn sẽ phải thích ứng với API Windows, Mac và Linux (và ...). TLS không phải là một phần của hệ điều hành cho phép viết các ứng dụng TLS đa nền tảng. Chỉ cần chọn một thư viện TLS, hỗ trợ các nền tảng mục tiêu của bạn.

Đối với tôi, vấn đề thực sự với TLS là, bạn không thể đơn giản "bật nó lên". Thay vào đó, bạn phải quản lý một bộ chứng chỉ tin cậy, danh sách thu hồi chứng chỉ, chứng chỉ tự ký, v.v. Tất cả những điều này đòi hỏi rất nhiều tương tác của người dùng.

Đáng buồn thay, an ninh không bao giờ đến miễn phí. Đó là nỗ lực cho các lập trình viên và sự bất tiện cho người dùng.


Phần lớn các hệ thống ống nước bảo mật có thể xảy ra mà không có bất kỳ sự tương tác của người dùng. Sự bất tiện chỉ xảy ra khi mọi người sử dụng các chứng chỉ không thể tin cậy được.
zneak

1
Đây là sự thật. Nhưng có rất nhiều certs tự ký ngoài kia. IMO, toàn bộ mô hình chính quyền tập trung không mở rộng quy mô. Làm thế nào để quyết định rễ nào để tin tưởng? Không có người dùng sẽ quyết định về điều này. Tất cả họ đều hy vọng các lập trình viên đã chọn một cách khôn ngoan.
paztulio

Chứng chỉ không có nhiều về niềm tin "thực sự", chúng chỉ bổ sung cho mã hóa. Điều gì tốt là một kênh được mã hóa nếu bạn nói chuyện với một máy chủ giả mạo? Quan điểm của chứng chỉ là chứng minh rằng bạn đang liên lạc với đúng máy tính và đến cuối cùng, chỉ cần bất kỳ chứng chỉ gốc nào bạn nhận được thông qua các phương tiện bảo mật là đủ để xác thực tính xác thực. Đối với phần còn lại, chứng chỉ không chứng minh bất cứ điều gì về ý định của một người, họ chỉ chứng minh đó là người thật chứ không phải là một trò giả mạo.
zneak

6

Có một vấn đề pháp lý. Một số quốc gia đặt mật mã trong cùng một nhóm với vũ khí. Đặt mã mật mã vào kernel sau đó làm cho việc xuất bất kỳ mã kernel nào trở nên khó khăn hơn.


2

Có những lợi ích rõ ràng để xây dựng TCP vào hệ điều hành. TCP yêu cầu thời gian chính xác và phản ứng nhanh với các gói mạng ngay cả khi không có dữ liệu ứng dụng. Nếu bạn đã cố gắng triển khai TCP trong không gian người dùng trên một API IP chung, điều đó sẽ tồi tệ hơn nhiều. Không có lợi thế tương tự để tích hợp SSL trong kernel.

Mặt khác, có một vài nhược điểm. Ví dụ: SSL yêu cầu thao tác các vòng khóa và danh sách chứng chỉ và những thứ tương tự. Làm điều đó thông qua kernel hoặc API hệ điều hành sẽ không phù hợp. Vì vậy, ngay cả khi nó đi kèm với hệ điều hành, nó sẽ chỉ là một thư viện (giống như trong Windows). Những thư viện này dù sao cũng đã có sẵn, vì vậy cuối cùng nó chỉ là một sự thay đổi trong bao bì.


1

Có một số lý do, nhưng có lẽ hấp dẫn nhất là mật mã học rất, rất khó để thực sự đúng . Việc tự thực hiện nó là không khôn ngoan trừ khi bạn có thể dành các nguồn lực chính để xác minh rằng nó là chính xác và mạnh mẽ. Hầu hết những người làm việc với phần mềm mật mã không có thời gian, chuyên môn hoặc mong muốn sa lầy vào việc này; họ tin tưởng các thư viện của bên thứ ba để các nhà phát triển của họ có thể xử lý phần công việc đó, trong khi các nhà phát triển ứng dụng có thể quay lại để thực hiện những gì họ muốn làm.

Các nhà phát triển hệ điều hành không quá khác biệt. Đôi khi có một lợi ích quan trọng hơn - ví dụ, mô hình kinh doanh hoặc luật sư của bạn yêu cầu bạn giữ mã kín - và vì vậy bạn không có nhiều sự lựa chọn trong vấn đề: nếu bạn không thể tìm thấy ai đó sẽ cho phép bạn làm những gì bạn phải làm, sau đó bạn phải tự lăn. Những người khác đã đề cập đến cách Microsoft làm điều này. Nhưng nói chung, các nhà phát triển hệ điều hành có thể sử dụng các thư viện của bên thứ ba thích làm theo cách đó, vì những lý do tương tự như các nhà phát triển ứng dụng làm.


0

Tôi là nhà phát triển windows nên tôi không thể nói cho các HĐH khác, nhưng trên Windows họ đã tích hợp SSL trong một thời gian rất dài. Họ gọi nó là SChannel và trong khi nó được hỗ trợ, nó là một trong những API khó hiểu hơn mà người ta sẽ phải tìm ra.


0

SSL là một lớp trên đầu giao thức cấp thấp hơn. Ví dụ: SSL chạy trên đỉnh TCP (nằm trên đỉnh IP).

HĐH dừng ở đâu?

Thật dễ dàng để tranh luận rằng HĐH cung cấp các dịch vụ cơ bản như kết nối mạng đến điểm mà một khách hàng của HĐH "làm công việc". Và những thứ đó có thể là bất cứ điều gì bạn muốn.

Rất khó có khả năng SSL trong kernel sẽ dẫn đến tăng hiệu suất lớn, vậy tại sao phải bận tâm?

Các nhân hệ điều hành hiện đại chạy tới hàng triệu dòng mã, thêm nhiều hơn chỉ làm tăng thêm độ phức tạp và thời gian gỡ lỗi. Bỏ những thứ như công cụ giao thức lớp cao hơn ra khỏi HĐH giúp cho việc phát triển HĐH trở nên dễ dàng hơn và cuối cùng tạo ra rất ít sự khác biệt đối với chức năng hoặc hiệu năng của ứng dụng cuối. (Nó có thể làm cho các nhà phát triển công việc cho ứng dụng cuối trở nên đau đớn hơn một chút.)


0

Có một số hỗ trợ Kernel cho Crypto và SSL. Điều này có ý nghĩa bởi vì Kernel có thể giao tiếp hiệu quả hơn với phần cứng và nó cũng thuận tiện để bảo vệ thông tin đăng nhập khỏi bất kỳ ứng dụng nào. Các ví dụ điển hình là kssl, Proxy SSL đảo ngược cấp hạt nhân trong Solaris hoặc các thư viện mật mã khác nhau trong kernel (ví dụ được sử dụng cho VPN). Một công cụ mã hóa được tăng tốc phần cứng điển hình cũng có một mô-đun hạt nhân (và có thể truy cập qua các giao diện tiền điện tử cụ thể của PKCS # 11 hoặc OS).

Một số lý do tại sao bạn không thấy điều đó thường xuyên hơn là một số giao thức ứng dụng không được xếp lớp chính xác (nghĩ STARTLS) hoặc yêu cầu các quyết định ứng dụng trong khi bắt tay (nghĩ chứng chỉ ứng dụng khách và kiểm tra CRL) hoặc đơn giản là trong một quá trình tiến hóa thông thường.

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.