Khóa 8192 bit làm nghẽn bắt tay; DH 1024 bit bị từ chối
Hai lỗi kích thước với cách sửa ngược nhau: khóa quá lớn đốt thời gian bắt tay đến khi bên kia hết thời gian chờ, còn nhóm DH nhỏ bị từ chối trước khi bắt đầu.
Một máy chủ có các máy khách bị treo một lúc rồi kết nối lại, và một máy khác từ chối kết nối ngay lập tức với thông báo về kích thước khóa. Chúng trông như các lỗi khác nhau và thực ra là cùng một lỗi chỉ về hai hướng ngược nhau. Mật mã của bắt tay có chi phí tăng theo kích thước tham số, và cũng có một mức sàn mà các thư viện hiện đại không xuống dưới. Định cỡ vật liệu chính là danh sách kiểm tra, và mục đầu tiên là xác định bạn thực sự đang gặp lỗi nào trong hai lỗi.
Đọc lỗi trước khi tạo lại bất cứ thứ gì
Thời gian cho bạn biết phần lớn. Một bắt tay mất vài giây rồi chết thường có nghĩa là phép tính đã vượt quá sự kiên nhẫn của bên kia, điều này chỉ ra các tham số quá lớn với phần cứng hoặc với thời gian chờ. Sự từ chối tức thì nêu rõ kích thước khóa hoặc nhóm chỉ về hướng ngược lại, tới vật liệu mà thư viện sẽ không chấp nhận chút nào.
Hai trường hợp này cần những cách sửa ngược nhau, và đây là chỗ phần lớn nỗ lực đi sai. Tạo lại tham số 8192 bit trên một máy khách đã từ chối nhóm nhỏ sẽ làm trường hợp chậm tệ hơn mà không giúp gì cho trường hợp nhanh. Ghi lại triệu chứng bạn thấy trước khi chạm vào tệp nào.
Sau đó kiểm tra bên kia đang được yêu cầu làm gì. Một máy chủ cấu hình cho nhóm trường hữu hạn lớn buộc mọi máy khách tiêu cùng lượng thời gian CPU ở mỗi lần đàm phán lại, không chỉ khi kết nối. Nếu vấn đề xuất hiện theo chu kỳ đều thay vì lúc khởi động, chu kỳ đó là dấu hiệu mạnh cho biết cài đặt nào đắt. Đàm phán lại lặp lại toàn bộ phép tính, nên một lần treo lặp lại mỗi giờ thường là cùng một chi phí phải trả lần nữa.
Trường hợp chậm: vật liệu mà phần cứng không kham nổi
Công việc của Diffie-Hellman và RSA tăng nhanh theo kích thước khóa, và tất cả diễn ra trước khi có lưu lượng nào chảy qua đường hầm. Trên một bộ định tuyến nhỏ hoặc máy khách công suất thấp, một nhóm đủ lớn có thể đẩy quá trình trao đổi vượt thời gian chờ của bên kia, khiến kết nối thử lại hoặc chỉ trông như bị treo mà không có lỗi nào.
Cách sửa là hạ xuống kích thước mà mọi bên hỗ trợ và mọi thiết bị có thể tính toán thoải mái. Khóa RSA 2048 bit và nhóm 2048 bit vẫn là một đường cơ sở tương thích rộng; lớn hơn chỉ giúp khi mọi bên đồng ý và CPU có thể trả giá ở mỗi lần đàm phán lại. Mọi thứ trên đường cơ sở đó là sự đánh đổi có chủ ý, không phải nâng cấp.
Kích thước không phải điểm số, và con số lớn nhất trong bảng so sánh không tự động là lựa chọn đúng. Chọn giá trị nhỏ nhất mà chính sách của bạn cho phép và mọi bên chấp nhận, rồi đo bắt tay thay vì giả định nó đã tốt hơn. Một nhóm nhỏ hơn mà vẫn hết thời gian cho bạn biết kích thước chưa bao giờ là toàn bộ câu chuyện.
Trường hợp nhanh: nhóm mà thư viện từ chối
Các bản dựng OpenSSL hiện đại từ chối thẳng các nhóm trường hữu hạn nhỏ nhất, và mức bảo mật được nâng cao còn đẩy mức sàn cao hơn nữa. Phần sụn bộ định tuyến mang theo tệp tham số hàng chục năm tuổi là nguồn thường gặp, và triệu chứng là kết nối thất bại ngay với thông báo nêu tên nhóm hoặc kích thước khóa. Không có gì trong thất bại đó là ngắt quãng, và chính điều đó khiến nó dễ nhận ra.
Thay tệp thay vì sửa cấu hình để bỏ qua kiểm tra. Tạo một nhóm hiện hành, xác thực nó, rồi cài vào nơi daemon thực sự đọc nó. Giữ tệp cũ cho đến khi một máy khách kết nối thành công với tệp mới:
openssl dhparam -out /etc/openvpn/ffdhe2048.pem 2048
openssl dhparam -in /etc/openvpn/ffdhe2048.pem -check -noout
ls -l /etc/openvpn/ffdhe2048.pemLệnh kiểm tra xác thực tệp và không in gì hữu ích khi nó qua; danh sách xác nhận bạn đã thay tệp mà dịch vụ nạp, chứ không phải một bản sao cũ bên cạnh. Trỏ cấu hình tới đường dẫn đó, khởi động lại daemon và xác nhận rằng một máy khách từng thất bại giờ hoàn tất bắt tay.
Nếu máy chủ cũng đặt mức bảo mật hoặc hồ sơ chứng chỉ, hãy đọc chúng trước khi kết luận nhóm là sai. Một hồ sơ đòi hỏi lớp chặt chẽ hơn có thể từ chối vật liệu mà giá trị mặc định đã chấp nhận, và bỏ cài đặt đó là thay đổi hẹp hơn so với tắt kiểm tra trên toàn cục.
Chọn kích thước cho bên kia và phần cứng
Tìm hiểu đầu xa chịu được gì trước khi tạo ra thứ gì kỳ lạ. Một thiết bị quá cũ cho nhóm 2048 bit là thiết bị cần thay, vì trỏ máy chủ tới nhóm yếu hơn chỉ biến phàn nàn về tương thích thành sự cố. Các sửa chữa bền vững đi về phía phần mềm mới hơn, không phải tham số cũ hơn. Mọi ngoại lệ tạm thời trong lĩnh vực này đều có cách trở thành cấu hình vĩnh viễn.
Khi CPU của máy chủ là giới hạn, hãy đổi thuật toán thay vì xuống dưới chính sách. Trao đổi khóa đường cong elliptic như X25519 rẻ hơn hẳn một nhóm trường hữu hạn lớn và được hỗ trợ rộng rãi, khiến nó thành câu trả lời tốt hơn cho phàn nàn về hiệu năng so với một mô-đun RSA nhỏ hơn.
Dù chọn gì, hãy thử bằng một kết nối thật và xem bắt tay mất bao lâu, không chỉ xem cuối cùng nó có kết nối được không. Một kết nối thành công trong mười hai giây có cùng nguyên nhân gốc với kết nối thất bại ở mười lăm giây.
Ghi lại lựa chọn để việc dựng lại không thể xóa nó
Giữ tệp tham số dưới quản lý cấu hình và ghi bên cạnh kích thước, lý do và ngày. Một máy chủ được dựng lại tự tạo giá trị mặc định của riêng nó một cách lặng lẽ là cách cùng lỗi đó quay lại sau sáu tháng mà không ai giải thích được quyết định ban đầu.
Ghi cùng thông tin bên cạnh endpoint và hồ sơ, để một lần rà soát không phải dựng lại từ kích thước tệp. Khi kết nối tiếp theo bị treo, ghi chú đó là khác biệt giữa kiểm tra năm phút và một cuộc điều tra mới. Nó cũng ngăn kỹ sư tiếp theo giải quyết trường hợp chậm bằng cách sửa dành cho trường hợp nhanh.