Một dấu vân tay chỉ đáng tin bằng kênh đã nói cho bạn biết cần chờ đợi điều gì. Nếu giá trị bạn so sánh đến qua chính kết nối mà bạn đang kiểm tra, thì phép so sánh không chứng minh được gì ngoài việc bên kiểm soát kết nối đó nhất quán. Việc kiểm tra phải diễn ra theo một thứ tự cố định, và một bước thất bại nên dừng bạn lại thay vì đẩy bạn sang bước tiếp theo. Đây là thứ tự tôi dùng khi một ứng dụng khách VPN báo rằng chứng chỉ đã thay đổi.

Đặt tên cho đối tượng trước khi đặt tên cho giá trị

Hãy xác định giá trị mong đợi thuộc về chứng chỉ lá của máy chủ, về CA đã phát hành nó, hay về khóa công khai bên trong lá. Đó là ba phép kiểm tra khác nhau và chúng thất bại theo những cách khác nhau. Một dấu vân tay CA khớp không ghim máy chủ, và băm của khóa công khai cố ý sống sót qua lần phát hành lại giữ nguyên khóa đó.

Ghi lại cả thuật toán nữa. SHA-256 là kỳ vọng thông thường hiện nay, nhưng các công cụ cũ in ra SHA-1 trừ khi bạn yêu cầu khác, và một giá trị hex 40 ký tự là dấu hiệu cho thấy bạn sắp so sánh hai thứ khác nhau.

Lấy giá trị mong đợi qua kênh thứ hai

Kênh thứ hai phải là kênh mà bên bạn đang đề phòng không thể ghi vào. Một hệ thống cấp phát mà bạn đã xác thực, một bản ghi in trong két sắt, một cơ sở dữ liệu cấu hình, hoặc một tài liệu đã ký do một tiến trình khác chuyển đến, tất cả đều đạt. Tin nhắn trò chuyện từ đồng nghiệp, một trang hỗ trợ đến từ kết quả tìm kiếm, và bất cứ thứ gì được dán vào terminal mà bạn đang gỡ lỗi, đều không đạt.

Yêu cầu toàn bộ giá trị và thuật toán, không bao giờ chỉ tiền tố. Dấu hai chấm và chữ hoa hay chữ thường không quan trọng, nhưng việc cắt bớt biến một phép kiểm tra 256 bit thành trò đoán.

Nếu không ai có thể cung cấp giá trị mong đợi từ một nguồn độc lập, thì kết quả trung thực là chứng chỉ này hôm nay không thể xác minh được. Nói như vậy tốt hơn là ghim thứ mà ứng dụng khách vừa hiển thị, điều biến một cảnh báo thành thói quen.

Trích xuất giá trị ở phía bạn

Với một tệp chứng chỉ, lệnh là openssl x509 -in server.crt -noout -fingerprint -sha256. Bản tóm lược tường minh quan trọng: nếu không có nó, đầu ra phụ thuộc vào phiên bản OpenSSL của bạn. Kết quả là một chuỗi hex phân tách bằng dấu hai chấm, vì vậy hãy bỏ dấu hai chấm và chuyển cả hai bên sang chữ thường trước khi so sánh.

Với một điểm cuối nói TLS trực tiếp, hãy kết nối và đẩy chứng chỉ ra ngoài qua đường ống: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Điều này hoạt động cho một bảng quản trị web hoặc một trình lắng nghe TLS, không dành cho OpenVPN, kênh điều khiển của nó nằm bên trong đường hầm. Với OpenVPN, hãy đọc chứng chỉ từ tệp hồ sơ trên đĩa thay vì cố bắt nó từ ổ cắm.

Việc so sánh phải mang tính máy móc. Chuẩn hóa cả hai giá trị bằng tr -d ':' và việc đồng nhất chữ hoa chữ thường, rồi so sánh toàn bộ chuỗi. Làm bằng mắt là cách một tiền tố khớp che giấu sự khác biệt ở byte cuối cùng. Nếu các chuỗi khác nhau, hãy coi sự khác biệt là thật trước khi bạn tìm cách giải thích.

Điều kiện dừng

Dừng nếu đối tượng khác, vì một dấu vân tay CA không thể minh oan cho chứng chỉ lá và một lá không thể minh oan cho CA. Dừng nếu thuật toán khác, vì một giá trị SHA-1 so với một giá trị SHA-256 không nói cho bạn điều gì. Dừng nếu dấu vân tay khớp nhưng chứng chỉ đã hết hạn, bị thu hồi hoặc được phát hành cho một tên khác; một băm khớp không phải là phép kiểm tra hiệu lực và không sửa được chuỗi bị hỏng. Cũng dừng nếu số sê-ri không khớp với số sê-ri trong bản ghi bạn đối chiếu, vì đó là cách rẻ nhất để nhận ra một chứng chỉ bị thay thế.

Dừng nếu giá trị mới đến qua kênh mà bạn đang kiểm tra. Việc luân chuyển có thể thay đổi dấu vân tay một cách hợp pháp, nhưng giá trị thay thế vẫn phải đến từ tiến trình đáng tin cậy, không phải từ hộp thoại cảnh báo đã gây ra câu hỏi.

Dừng nếu bản sửa được đề xuất là tắt việc xác minh tên máy chủ hoặc chuỗi. Một dấu vân tay thêm một ràng buộc vào các phép kiểm tra thông thường; nó không thay thế chúng trừ khi việc triển khai đã cố ý chọn mô hình chỉ ghim, và lựa chọn đó mang theo chi phí vận hành riêng.

Sau khi so sánh

Ghi lại bạn đã so sánh điều gì, giá trị mong đợi đến từ đâu và khi nào. Nếu chứng chỉ được phát hành lại, hãy cập nhật kỳ vọng đã lưu qua cùng kênh tin cậy và ghi lại số sê-ri mới, vì số sê-ri là thứ khiến lần luân chuyển tiếp theo có thể kiểm toán được.

Sau đó hãy rõ ràng về các giới hạn. Một dấu vân tay xác nhận rằng chứng chỉ bạn đang giữ là chứng chỉ mà ai đó đã bảo bạn chờ đợi. Nó không nói gì về việc máy chủ có bị xâm phạm hay không, và cũng không nói gì về việc dịch vụ có ghi nhật ký hay hạn chế những gì chứng chỉ đó có thể chạm tới.

Bài viết liên quan