OpenVPN phân giải chứng chỉ và khóa như thế nào: PEM nội tuyến hay đường dẫn
Cùng một chỉ thị mang theo hoặc một đường dẫn tệp, hoặc một đối tượng PEM nhúng sẵn. Hãy đọc xem hồ sơ đã nạp dùng dạng nào trước khi di chuyển chứng chỉ.
Thông báo nói rằng OpenVPN không thể nạp một chứng chỉ nội tuyến, trong khi tên tệp bạn nhớ trong đầu lại nói ngược lại. Điều bộ phân tích nhận được quan trọng hơn điều hệ thống tệp chứa, vì chỉ thị cert chấp nhận hai kiểu giá trị hoàn toàn khác nhau. Một là đường dẫn mà nó mở; kiểu kia là văn bản PEM đi vào bên trong cấu hình. Cho đến khi biết ứng dụng đang chạy nhận được dạng nào thì mọi cách sửa đều chỉ là phỏng đoán.
Hai dạng lưu trữ, một chỉ thị
Các chỉ thị cert, key và ca mỗi cái nhận một đường dẫn hoặc một khối nội tuyến. Khi giá trị là đường dẫn, OpenVPN mở tệp đó và đọc đối tượng từ đĩa. Khi cấu hình chứa một khối được giới hạn bởi các thẻ cert, cùng chỉ thị đó thay vào đó dùng nội dung giữa các thẻ ấy, và không có tệp riêng nào tham gia.
Cả hai dạng cuối cùng đều tạo ra cùng một loại đối tượng, vì thế một triển khai đang hoạt động có thể chuyển giữa hai dạng mà không cần thay đổi nào khác. Một hồ sơ mang chứng chỉ khách và khóa riêng nhúng sẵn là tự đủ, và việc sao chép nó sang máy khác vẫn chạy mà không phải sao chép cả thư mục chứng chỉ.
Điều ngược lại không đúng. Đặt client.crt bên cạnh một hồ sơ đã nhúng dữ liệu của chính nó không thay đổi gì, vì không có gì trong cấu hình tham chiếu đến tệp đó. Đây là lý do phổ biến nhất khiến một tệp rõ ràng tồn tại lại có vẻ bị bỏ qua.
Một khối nội tuyến trở thành đối tượng như thế nào
Nội dung nội tuyến được trích ra khỏi cấu hình và giao cho bộ phân tích PEM dưới dạng văn bản. Bộ phân tích ấy mong đợi các ranh giới thông thường: một dòng BEGIN, một tải base64 và một dòng END tương ứng. Nếu khối bị cắt do một lần sao chép hỏng, bị một trang tải xuống bọc trong HTML hoặc bị mở trong trình soạn thảo đã chuẩn hóa các dấu gạch ngang, bộ phân tích sẽ thất bại trên nội dung trông như vẫn còn đó.
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
Đó cũng là lý do cách diễn đạt lỗi gây hiểu nhầm. Từ nội tuyến mô tả nơi bộ nạp đã nhìn, chứ không phải thứ nó tìm thấy ở đó. Một tệp được nêu tên trong cấu hình và một đối tượng nhúng trong đó có thể tạo ra cùng một phàn nàn khi các byte nền không dùng được.
Hãy kiểm tra hồ sơ đã nạp thực sự dùng dạng nào, chứ không phải tệp nào mà trình soạn thảo của bạn tình cờ mở:
grep -nE '^(ca|cert|key) |^<(ca|cert|key)>' client.ovpn
Một tham chiếu đường dẫn được phân giải như thế nào
Giá trị đường dẫn được mở tương đối với thư mục làm việc của ứng dụng khách, không phải thư mục chứa cấu hình. Dưới systemd, thư mục làm việc ấy là thứ mà unit đặt ra, còn một lần chạy tương tác từ shell của bạn lại thừa hưởng một thứ hoàn toàn khác. Vì thế cùng một tệp cấu hình có thể chạy khi bạn thử bằng tay và thất bại khi chạy như dịch vụ.
Các đường dẫn tương đối cũng thừa hưởng sự mơ hồ ấy. Khi thấy một tên tệp trần, hãy hỏi thư mục hiện tại của tiến trình trong môi trường sản xuất là gì thay vì giả định nó khớp với terminal của bạn.
Với một chứng chỉ được lưu riêng, một lần phân tích ngoại tuyến xác nhận đối tượng trước khi bạn gỡ lỗi bất cứ thứ gì phía trên nó:
openssl x509 -in client.crt -noout -subject -issuer -dates
openssl pkey -in client.key -noout -check
Những lệnh đó chứng minh các tệp đọc được và hợp lệ về cấu trúc. Chúng không chứng minh rằng đối tác tin tưởng nhà phát hành, rằng chứng chỉ vẫn còn trong thời hạn hiệu lực, hay rằng khóa thuộc về nó.
Lỗi của bộ phân tích nói được gì và không nói được gì
Một thất bại phân tích khoanh vùng vấn đề vào một đầu vào và một giai đoạn. Nó không cho biết ứng dụng khách đã dùng dạng lưu trữ nào trong hai dạng, và cũng không cho biết đối tượng có được chấp nhận hay không. Đó là những câu hỏi riêng với bằng chứng riêng.
Khi phân tích thành công, thất bại tiếp theo thuộc về một giai đoạn muộn hơn. Việc từ chối tin cậy, sự không khớp mục đích hoặc sự không khớp khóa do đối tác hoặc tầng TLS báo cáo, chứ không phải bộ nạp. Việc thay đi thay lại cùng một tệp sẽ không làm lỗi ấy dịch chuyển.
Giữ nửa nhạy cảm ngoài các báo cáo công khai trong khi điều tra. Hãy chia sẻ tên các chỉ thị, văn bản lỗi và cấu trúc của khối, sau khi đã bỏ vật liệu khóa và mọi tải nhận dạng. Sách hướng dẫn openvpn(8) ghi lại cả hai dạng của các chỉ thị tệp và hành vi thư mục làm việc phía sau chúng.