Câu trả lời:
Câu hỏi thú vị, nó phụ thuộc vào việc sử dụng theo ý kiến của tôi. Bạn vẫn được bảo vệ về mặt phiên được mã hóa nhưng bạn không có cách nào để biết liệu đó có phải là chứng chỉ SSL chính xác được trình bày cho bạn trừ khi bạn phân phối chứng chỉ gốc CA của mình cho người dùng / khách hàng. Để thử nghiệm nội bộ / dự đoán dev sẽ hoạt động rất tốt, bạn tạo chứng chỉ CA gốc mà bạn sử dụng phân phối cho người dùng của mình (có thể được thực hiện qua Chính sách nhóm trong Windows và qua dòng lệnh openssl trong Linux / BSD) và sau đó sử dụng chứng chỉ gốc đó cho ký CSR của bạn. Người dùng sẽ không thấy cảnh báo hoặc bất cứ điều gì và bạn biết chứng chỉ được ký bởi CA nội bộ của bạn.
Đối với các trang web bên ngoài nơi bạn không thể đảm bảo điều này, tôi vẫn nói chứng chỉ tự ký tốt hơn là không có SSL nếu bạn đang gửi mật khẩu hoặc thông tin nhạy cảm khác qua kết nối.
Tuy nhiên, về mặt tích cực có rất nhiều nhà phát hành chứng chỉ "thương mại" rất rẻ, GoDaddy là một trong số họ. Bạn có thể nhận được chứng chỉ với giá khoảng 40 euro mỗi năm. GoDaddy thậm chí còn cung cấp certs miễn phí cho các trang web của dự án OpenSource.
Tôi sẽ không đồng ý, một lần trên cơ sở kỹ thuật hẹp, và một lần trên cơ sở chung.
Cơ sở kỹ thuật hẹp là OP đã hỏi về các chứng chỉ tự ký và một số câu trả lời khác đề cập đến các chứng chỉ được ký bởi các CA tư nhân, đây là một vấn đề hơi khác. Nhưng không khác lắm, nên đó thực sự chỉ là một lưu ý khi vượt qua.
Sự phản đối chính là tôi nghĩ rằng miễn là các chứng chỉ được ký kết thương mại nhiều hơn chi phí không đáng kể - và 40 đô la một năm không phải là một chi phí nhỏ đối với nhiều người trên hành tinh này - chứng chỉ tự ký có vai trò chính trong bảo mật internet, với điều kiện là những hạn chế của họ được công nhận .
Chứng chỉ tự ký giống như khóa ssh từ known_hosts
tệp của tôi . Nếu không có xác minh độc lập, tôi không thể đảm bảo rằng tôi đang nói chuyện với hệ thống mà tôi tin là mình; nhưng nó có thể đảm bảo với tôi rằng hệ thống mà tôi đang nói đến bây giờ là cùng một hệ thống mà tôi đã nói chuyện lần trước tôi nghĩ rằng tôi đang có một cuộc trò chuyện với nó. Chúng tôi luôn lưu trữ khóa ssh và tôi chưa bao giờ gặp quản trị viên hệ thống xác minh độc lập hơn một phần các khóa công khai trong known_hosts
tệp của anh ấy / cô ấy .
Chứng chỉ tự ký (và, đối với vấn đề đó, chứng chỉ được ký bởi các CA không hợp lệ nói chung) tốt hơn nhiều so với không có SSL, miễn là mọi người nhận ra rằng trừ khi họ xác minh chúng, họ chỉ bảo mật thông tin liên lạc với chính họ, máy chủ ở đầu kia của bản ghi DNS và bất kỳ người đàn ông trung gian nào hiện đang ở trên mạng. Nếu họ xác minh độc lập chứng chỉ, thì xác thực và mã hóa ít nhất cũng mạnh bằng chứng chỉ được cung cấp bởi một chứng chỉ được ký bởi CA.
Hơn nữa, những người muốn trình bày việc sử dụng giấy chứng nhận có chữ ký của CA công nhận là một và chỉ thuốc chữa bách bệnh an ninh mạng có thể cần phải suy nghĩ rất nhiều về các vấn đề như sự bao gồm của CA ký của Chính phủ Trung Quốc trong Mozilla bó tiêu chuẩn , và các chứng chỉ SSL lừa đảo có chữ ký của Comodo .
known_hosts
@MadHatter đang tham khảo.
Đối với các trang web bên ngoài, nơi người dùng không cài đặt chứng chỉ CA của bạn (đây là trường hợp phổ biến nhất), vâng, chứng chỉ tự ký mang lại cảm giác an toàn sai lầm và do đó, nó còn tệ hơn vô dụng:
Đầu tiên, không có chứng chỉ CA được cài đặt sẵn, làm thế nào để người dùng xác minh rằng chứng chỉ thực sự đến từ bạn chứ không phải từ kẻ tấn công? Tất nhiên, bằng cách khớp các trường chứng chỉ (CN, dấu vân tay, v.v.) - nhưng chống lại cái gì? Vì vậy, bây giờ bạn cần một kênh phụ để xác minh giấy chứng nhận - và trong vài trường hợp I have seen that, các nhà khai thác dòng hỗ trợ (người đáng lẽ phải phục vụ như là kênh phụ để xác minh) không có đầu mối gì đó là nghĩa vụ phải có nghĩa; Ngoài ra, vận hành kênh bên như vậy là đơn đặt hàng lớn hơn so với nhận chứng chỉ có chữ ký CA đáng tin cậy, vì vậy người dùng phải tin tưởng bạn một cách mù quáng.
Thứ hai, cảnh báo đáng sợ mà người dùng nhận được rất đáng sợ vì một lý do chính đáng: vì người dùng không thể / không xác minh chứng chỉ được trình bày, họ có thể truyền dữ liệu một cách an toàn đến Elbonian Haxx0r D00dz.
Thứ ba, và tệ nhất trong tất cả, bạn đang làm mất lòng người dùng : "tốt, họ nói với tôi rằng tôi nên bỏ qua cảnh báo đó trên https://mysite.example.com/ , và một cái đe không rơi xuống đầu tôi và tôi Cá vàng cũng không chết; vì vậy, điều đó có nghĩa là nó chỉ là một hộp cảnh báo khác mà không có ý nghĩa thực sự nào, vì vậy tôi có thể bỏ qua hộp này bất cứ khi nào tôi gặp nó - dù sao tôi cũng nhận được biểu tượng khóa đẹp đó và điều đó rất quan trọng. "
Nói cách khác, mức độ bảo vệ tương đương với HTTP đơn giản (ngoại trừ việc đánh hơi trực tuyến: mặc dù dữ liệu được mã hóa trong quá trình, đó là một tính năng khá thiếu máu mà không cần xác minh điểm cuối), nhưng cảm giác bảo vệ cao một cách vô lý . Tương tự xe hơi xấu: "Tôi có ABS, vì vậy bây giờ tôi có thể lái xe an toàn hơn trong điều kiện xấu" - ngoại trừ ABS chỉ tồn tại trong tài liệu bán hàng của xe, mà không thực sự có mặt trong xe.
Đọc gợi ý : OWASP SSL Thực tiễn tốt nhất
TL; DR: Bằng cách sử dụng các chứng chỉ tự ký trên các trang web công khai, bạn đang biến Net thành một nơi tồi tệ hơn, một người dùng không biết gì tại một thời điểm.
Phụ thuộc. Nếu bạn nghĩ rằng nó làm cho bạn an toàn hơn thì nó làm tăng rủi ro của bạn khi bạn chọn làm những việc rủi ro hơn với cảm giác an toàn sai lầm của bạn. Nếu bạn coi nó có chức năng tương đương với HTTP, thì tôi muốn nói rằng bạn an toàn hơn một chút.
Nếu không có SSL / HTTPS, bất kỳ ai có wireshark trên mạng của bạn (hoặc mạng cục bộ của bất kỳ ai đăng nhập) đều có thể lắng nghe và nắm bắt tên người dùng / mật khẩu được gửi dưới dạng văn bản thuần túy.
Với SSL tự ký, họ không thể đơn giản lắng nghe, nhưng bây giờ phải giả mạo trang web của bạn, có khả năng thay đổi DNS để thực hiện một cuộc tấn công giữa chừng (MITM). Đây vẫn là một mối đe dọa, nhưng khó khăn hơn đáng kể để họ thực hiện.
Vấn đề khác khi sử dụng SSL tự ký là nhiều trình duyệt coi chứng chỉ tự ký là mối đe dọa bảo mật lớn và cảnh báo bạn trước khi vào (ví dụ: chrome) với một trang đỏ khổng lồ. http://www.sslshopper.com/article-ssl-certert-in-google-chrome.html Đây có thể là một bất tiện lớn.
Vì vậy, điểm mấu chốt là: nếu bạn chạy thứ gì đó không cần bảo mật đặc biệt (ví dụ: không có dữ liệu thẻ tín dụng, không có số an sinh xã hội) và không đủ khả năng để có chứng chỉ phù hợp, chứng chỉ tự ký có thể có ý nghĩa (để nói ngăn người dùng mạng khác dễ dàng đánh hơi thông tin đăng nhập của họ).
Nó phụ thuộc vào ý của bạn với "bảo mật", và đó là mức độ.
Ví dụ: trình duyệt của bạn đi kèm với một bộ CA được chấp nhận theo mặc định. Điều này có nghĩa, mọi chứng chỉ do CA này cấp đều được trình duyệt của bạn chấp nhận (cho đến khi nó khớp với tên dns). Bây giờ, hãy tưởng tượng một số chính phủ độc ác sở hữu một CA, hoặc có thể buộc CA cấp giấy chứng nhận cho trang web bạn đang truy cập. Sau đó, để thực hiện MITM rất dễ dàng: họ có thể ủy quyền kết nối của bạn, gửi tới trình duyệt của bạn chứng chỉ họ có và trình duyệt của bạn sẽ chấp nhận, vì nó đến từ CA "đáng tin cậy". Cho đến khi chúng trong suốt DNS (là cơ sở cho MITM) thì điều này là ổn.
Vì vậy, "danh sách CA được chấp nhận" về cơ bản là một lỗ hổng bảo mật lớn, cho đến khi một trong những CA này hợp tác với một số chính phủ độc ác. Có CA của riêng bạn là tốt hơn nhiều.
Tất nhiên, bạn có thể làm điều đó trong công ty hoặc trong máy chủ tại nhà của mình, vì bạn có thể cài đặt chứng chỉ CA của riêng bạn vào máy khách mà bạn cũng kiểm soát. Trong một máy chủ công cộng, bạn không thể giao dịch với bất kỳ người dùng nào, yêu cầu anh ta thêm một ngoại lệ hoặc thêm chứng chỉ của bạn.
Vì vậy, nó phụ thuộc vào ý nghĩa của bạn đối với "bảo mật" và phạm vi. NẾU bạn sở hữu các máy khách, ĐỂ KIẾM, tự ký sẽ an toàn hơn, cho đến khi bạn cài đặt trên chính máy khách chứng chỉ CA của chính bạn.
Tất nhiên, bạn không thể làm điều đó trên một trang web công cộng vì bạn không sở hữu tất cả các khách hàng. Vì vậy, bạn sẽ gặp nguy hiểm với các hành vi khác nhau, không an toàn.