Thay đổi cài đặt mặc định của ext/openssl
Đăng bởi usa vào 27 Oct 2014
Chúng tôi đã thay đổi cài đặt mặc định của ext/openssl trong Ruby 2.1.4, Ruby 2.0.0-p594 và Ruby 1.9.3-p550. Với thay đổi này, các tùy chọn SSL/TLS không an toàn giờ đã bị tắt theo mặc định. Tuy nhiên, với thay đổi này, có khả năng xảy ra một số vấn đề trong kết nối SSL.
Chi tiết
OpenSSL vẫn triển khai các giao thức và cipher được coi là không an toàn ngày nay vì các lý do lịch sử. Giống như lỗ hổng POODLE (CVE-2014-3566), nếu bạn tiếp tục sử dụng OpenSSL với các tính năng không an toàn như vậy, bạn có thể không đảm bảo được an toàn của truyền thông mạng. Vì vậy, dựa trên cuộc thảo luận trong Bug #9424, chúng tôi đã quyết định tắt các tùy chọn SSL/TLS không an toàn theo mặc định. Nếu bạn cần hủy thay đổi này (hiển thị bên dưới), hãy áp dụng bản vá ngược để hoàn nguyên.
Tuy nhiên, nếu bạn hủy thay đổi này, có rủi ro không đảm bảo được an toàn truyền thông mạng. Bạn nên hiểu các hệ quả của thay đổi này trước khi loại bỏ nó.
Thư viện đi kèm của Ruby
Thay đổi này được phản ánh trong net/http, net/imap và net/pop. Vì DRb và WEBrick nhận cài đặt riêng, thay đổi này không ảnh hưởng đến chúng.
Script sử dụng ext/openssl trực tiếp
Thay đổi này được phản ánh khi đối tượng OpenSSL::SSL::SSLContext được khởi tạo và phương thức instance set_params được gọi.
Cụ thể, mã như sau:
ctx = OpenSSL::SSL::SSLContext.new
ctx.set_params # if you want to change some options, such as cert store, verify mode and so on, you can pass such parameters within a hash
ssl = OpenSSL::SSL::SSLSocket.new(socket, ctx)Khi sử dụng ext/openssl ở phía client, chúng tôi cho rằng có thể không có vấn đề gì với thay đổi này. Tuy nhiên, nếu bạn sử dụng ext/openssl ở phía server và phản ánh thay đổi này, một số client cũ (Internet Explorer 6 trên Windows XP, trình duyệt trong điện thoại di động cũ, v.v.) có thể không kết nối được với server.
Việc bật thay đổi này hay không là quyết định của bạn, hãy cân nhắc các đánh đổi.
Giải pháp tạm thời
Nếu bạn không thể cập nhật Ruby nhưng phải đối phó với các tùy chọn SSL/TLS không an toàn, hãy áp dụng monkey-patch sau:
module OpenSSL
module SSL
class SSLContext
remove_const(:DEFAULT_PARAMS)
DEFAULT_PARAMS = {
:ssl_version => "SSLv23",
:verify_mode => OpenSSL::SSL::VERIFY_PEER,
:ciphers => %w{
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES128-GCM-SHA256
DHE-DSS-AES128-GCM-SHA256
DHE-RSA-AES256-GCM-SHA384
DHE-DSS-AES256-GCM-SHA384
ECDHE-ECDSA-AES128-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-ECDSA-AES128-SHA
ECDHE-RSA-AES128-SHA
ECDHE-ECDSA-AES256-SHA384
ECDHE-RSA-AES256-SHA384
ECDHE-ECDSA-AES256-SHA
ECDHE-RSA-AES256-SHA
DHE-RSA-AES128-SHA256
DHE-RSA-AES256-SHA256
DHE-RSA-AES128-SHA
DHE-RSA-AES256-SHA
DHE-DSS-AES128-SHA256
DHE-DSS-AES256-SHA256
DHE-DSS-AES128-SHA
DHE-DSS-AES256-SHA
AES128-GCM-SHA256
AES256-GCM-SHA384
AES128-SHA256
AES256-SHA256
AES128-SHA
AES256-SHA
ECDHE-ECDSA-RC4-SHA
ECDHE-RSA-RC4-SHA
RC4-SHA
}.join(":"),
:options => -> {
opts = OpenSSL::SSL::OP_ALL
opts &= ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS if defined?(OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS)
opts |= OpenSSL::SSL::OP_NO_COMPRESSION if defined?(OpenSSL::SSL::OP_NO_COMPRESSION)
opts |= OpenSSL::SSL::OP_NO_SSLv2 if defined?(OpenSSL::SSL::OP_NO_SSLv2)
opts |= OpenSSL::SSL::OP_NO_SSLv3 if defined?(OpenSSL::SSL::OP_NO_SSLv3)
opts
}.call
}
end
end
endCác phiên bản bị ảnh hưởng bởi thay đổi này
- Ruby 1.9.3 patchlevel 550 trở lên
- Ruby 2.0.0 patchlevel 594 trở lên
- Ruby 2.1.4 trở lên
- revision 48097 trở lên của trunk
Lịch sử
- Công bố lần đầu vào 2014-10-27 12:00:00 (UTC)
Tin mới nhất
Phát hành Ruby 3.2.10
Ruby 3.2.10 đã được phát hành.
Đăng bởi hsbt vào 14 Jan 2026
Phát hành Ruby 4.0.1
Ruby 4.0.1 đã được phát hành.
Đăng bởi k0kubun vào 13 Jan 2026
Phát hành Ruby 4.0.0
Chúng tôi vui mừng thông báo phát hành Ruby 4.0.0. Ruby 4.0 giới thiệu “Ruby Box” và “ZJIT”, cùng nhiều cải tiến khác.
Đăng bởi naruse vào 25 Dec 2025
Diện mạo mới cho tài liệu Ruby
Tiếp theo việc thiết kế lại ruby-lang.org, chúng tôi có thêm tin vui để kỷ niệm 30 năm Ruby: docs.ruby-lang.org có diện mạo hoàn toàn...
Đăng bởi Stan Lo vào 23 Dec 2025