Tôi cảm thấy như tôi đang thiếu điều gì đó hiển nhiên ở đây, nhưng tôi không thấy nó được viết ở bất cứ đâu.Xác minh chữ ký xác thực khi thực thi ứng dụng .NET
tôi đăng ký thực thi của tôi sử dụng chứng chỉ Authenticode, nhưng như tôi đã bắt đầu để tìm hiểu thêm một chút thông tin về nó, tôi đang đặt câu hỏi về giá trị như nó vốn có.
- Ví dụ đã ký có chứng chỉ kỹ thuật số hiển thị dưới dạng chứng chỉ "hợp lệ". Khi bạn tải xuống một tệp như vậy từ Internet, nó sẽ hiển thị cảnh báo trong Windows cho biết bạn sắp chạy chương trình từ một vị trí có khả năng không an toàn được xuất bản bởi Xyz Corporation.
- Nếu không có chữ ký, các tập tin tải về sẽ đưa ra một hộp cảnh báo hoàn toàn khác nhau-looking nói rằng tập tin là không tin cậy
Bây giờ, những gì liên quan đến tôi, là:
Nếu một exe ký là thay đổi, khi bạn đi vào Properties> Digital Signatures> Chọn chữ ký> Details ... nó cho thấy "Chữ ký số này không hợp lệ". Đó là một cách khá mơ hồ để xem những gì có thể là một vấn đề nghiêm trọng, và một chỉ số rất lớn bạn không nên chạy các tập tin.
- Nếu bạn chạy tệp này từ Windows (chưa được tải xuống), tệp sẽ chạy tốt. Không có cảnh báo hoặc bất kỳ dấu hiệu nào có điều gì đó sai
- Tôi không kiểm tra xem điều gì sẽ xảy ra nếu bạn tải xuống tệp và sau đó thử chạy tệp đó.
Nếu bạn bỏ chữ ký khỏi tệp (sử dụng delcert), không có dấu hiệu nào cũng không đúng. Một lần nữa, bạn có thể chạy tệp và không có chứng chỉ nào được hiển thị trong hộp thoại thuộc tính.
Để làm điều này hữu ích hơn, tôi nghĩ rằng một tập tin có chữ ký cần phải xác minh bản thân. Khi khởi động, cần kiểm tra xem có chữ ký hợp lệ không, và có khả năng dấu vân tay sha1 của chữ ký khớp với chữ ký dự kiến cho chứng chỉ Xyz Corporation.
(Cấp, điều này vẫn không xử lý các tình huống mà một người nào đó dải giấy chứng nhận, và sau đó chỉnh sửa các tập tin để loại bỏ việc kiểm tra giấy chứng nhận)
tôi không thể tìm thấy bất cứ ai nói về cách làm điều này (ít nhất là không có trong .NET, và chắc chắn không phải với một cuộc gọi API đơn giản như tôi mong đợi) - do đó, điều này dẫn đến một vài câu hỏi:
- Có lý do chữ ký không được kiểm tra không? Những lợi ích khác có để ký mà không có kiểm tra này?
- Đang cố gắng xác minh chữ ký như một phương tiện phát hiện giả mạo để vô ích đến mức không thể thử?
- Làm cách nào để kiểm tra chứng chỉ của tệp thi hành hiện tại trong .NET?
Đối với .NET bạn nên sử dụng ký tên mạnh mẽ, không Authenticode. –