Hai tệp, hai chỉ thị và thói quen đặt tên cả hai theo thứ chúng cấu hình. Đó là cách một dh.pem rơi vào dòng tls-auth và máy khách thất bại với thông báo về định dạng khóa không mong đợi. Quyết định trước mặt bạn không phải tệp nào mạnh hơn. Mà là triển khai thực sự cần vai trò nào, và ba điều kiện giải quyết điều đó: ngăn xếp TLS của bạn sẽ thương lượng kiểu trao đổi khóa nào, bạn có muốn xác thực kênh điều khiển hay không, và vật liệu có phải giữ bí mật hay không.

Hãy trả lời theo thứ tự và câu hỏi về tệp sẽ tự trả lời. Bỏ qua chúng thì tên các chỉ thị bắt đầu trông như có thể hoán đổi cho nhau, và đó chính là trạng thái sinh ra lỗi.

Đọc nhãn trước tên tệp

Dòng đầu của tệp cho biết nhiều hơn tên của nó, vì tên là quy ước của con người còn nhãn do công cụ tạo ra. Tham số Diffie-Hellman mang nhãn PEM BEGIN DH PARAMETERS. Khóa tĩnh của OpenVPN là cấu trúc hoàn toàn khác, với phần đầu và tải thập lục phân riêng.

Đổi tên không chuyển đổi gì cả. Một tệp tham số tên ta.key vẫn là tham số, và một khóa tĩnh tên dh.pem vẫn là khóa tĩnh; bộ phân tích đọc nội dung và từ chối sự không khớp. Kiểm tra trước khi sửa hồ sơ:

head -n 1 dh.pem
head -n 1 ta.key

Ba điều kiện quyết định tệp bạn cần

Điều kiện thứ nhất là trao đổi. Bắt tay Diffie-Hellman trường hữu hạn cần một nhóm, và chỉ thị dh là nơi máy chủ đặt tên các tham số cho nó. Bắt tay trên đường cong elliptic không cần tệp đó chút nào, vì đường cong chính là tập tham số. Nếu máy chủ của bạn chỉ thương lượng các bộ ECDHE, tệp DH là trọng lượng chết chứ không phải sức mạnh thêm.

Điều kiện thứ hai là xác thực kênh điều khiển, một tính năng riêng có vật liệu riêng. Tệp tls-auth là khóa tĩnh dùng chung mà cả hai bên đều giữ, được dùng để ký các gói của kênh điều khiển để một bên chưa xác thực không thể hoàn tất bắt tay. Nó tồn tại dù bạn có dùng DH trường hữu hạn hay không, và không liên quan gì đến tham số nhóm.

Điều kiện thứ ba là bí mật và phân phối. Tham số DH có thể công bố mà không làm yếu phiên, vì các giá trị bí mật được tạo cho từng lần bắt tay và không bao giờ rời khỏi các bên. Khóa tĩnh không được công bố: nó là cùng một byte ở hai đầu, không tự luân chuyển, và ai giữ nó cũng có thể tạo chữ ký kênh điều khiển hợp lệ. Hai câu trả lời đó dẫn đến những quy tắc xử lý hoàn toàn khác nhau, nên một tệp có thể nằm trong kho lưu trữ còn tệp kia thì không.

Tạo vật liệu đúng cho từng vai trò

Dùng công cụ tạo ra định dạng mà chỉ thị mong đợi thay vì chuyển đổi giữa chúng. Với khóa dùng chung trên OpenVPN 2.6, dạng có kiểu của bộ tạo nêu rõ mục đích.

openvpn --genkey tls-auth ta.key

Lệnh đó tạo vật liệu bí mật mới; nó không sửa hay kiểm tra khóa hiện có, và chạy lại sẽ cho bạn khóa khác mà các bên kia không có. Sao chép tệp kết quả đến các bên cần nó qua kênh mà bạn sẽ dùng cho bất kỳ bí mật dùng chung nào, và giữ quy ước hướng nhất quán: với tls-auth, một bên dùng key-direction 0 và bên kia dùng key-direction 1.

Tham số DH, khi cần, đến từ việc tạo tham số chứ không phải từ bộ tạo khóa, và nguồn gốc của chúng quan trọng kể cả khi đầu ra là công khai. Một nhóm lấy từ nguồn không rõ không trở nên đáng tin chỉ vì nó công khai; nó vẫn phải là nhóm mà các bên của bạn đồng ý và không bị làm yếu bởi kích thước hay cách xây dựng.

dh none nghĩa là gì và không nghĩa là gì

dh none là chỉ thị thật với nghĩa hẹp: không tệp tham số trường hữu hạn nào được nạp, vì bắt tay dùng Diffie-Hellman trên đường cong elliptic. Nó không phải cách viết tắt của «bỏ qua bước DH» theo nghĩa làm yếu bất cứ thứ gì, và chắc chắn không bảo OpenVPN chấp nhận một tệp khác thay thế.

Hai lỗi nảy sinh từ việc đọc sai. Thứ nhất là cho rằng dh none loại bỏ nhu cầu về tls-auth, trong khi hai thứ kiểm soát những việc khác nhau. Thứ hai là giữ một dòng dh cũ bên cạnh cấu hình chỉ có đường cong rồi tự hỏi máy chủ thực sự dùng tệp nào; nếu chỉ thị có mặt, tệp được đọc, và một đường dẫn hỏng ở đó làm khởi động thất bại vì lý do không liên quan đến trao đổi sẽ được thương lượng.

Nếu tệp sai đã được triển khai

Khôi phục bí mật dự định từ chủ sở hữu hồ sơ và đừng chạm vào việc xác minh chứng chỉ trong lúc làm vậy. Sự cố là không khớp định dạng, không phải sự cố tin cậy, và tắt xác minh để vượt qua lỗi thay một vấn đề khởi động bằng một vấn đề im lặng.

Sau đó tách hai sự việc mà người ta thường gộp lại. Công bố tệp tham số DH gần như vô hại, vì các tham số vốn công khai theo thiết kế. Lộ khóa tls-auth là sự việc khác: khóa xác thực các gói của kênh điều khiển cho mọi bên giữ nó, nên việc thay thế phải được phối hợp trên toàn bộ triển khai chứ không áp dụng cho một máy chủ.

Một lần kiểm tra năm phút quyết định bạn ở trường hợp nào: đọc dòng đầu của từng tệp, xác nhận chỉ thị tham chiếu nó, và xác nhận việc phân phối tệp khớp với điều vật liệu đòi hỏi. Đó là công việc nhỏ hơn việc tạo lại một PKI đang chạy, và là điều mà ba điều kiện đã chỉ ra suốt thời gian qua.

Bài viết liên quan