2008-09-18 37 views
8

Tôi có một chứng chỉ nhất định được cài đặt trên máy chủ của mình. Chứng chỉ đó có ngày hợp lệ và có vẻ hoàn toàn hợp lệ trong snap-in MMC của chứng chỉ Windows.Tại sao chứng chỉ X.509 này bị coi là không hợp lệ?

Tuy nhiên, khi tôi cố gắng đọc chứng chỉ, để sử dụng nó trong một HttpRequest, tôi không thể tìm thấy nó. Đây là mã được sử dụng:

X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col = 
    store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true); 

xxx là số sê-ri; đối số true có nghĩa là "chỉ các chứng chỉ hợp lệ". Bộ sưu tập được trả về trống.

Điều lạ lùng là nếu tôi vượt qua false, cho biết chứng chỉ không hợp lệ có thể chấp nhận được, bộ sưu tập chứa một phần tử — chứng chỉ với số sê-ri được chỉ định.

Kết luận: chứng chỉ có vẻ hợp lệ, nhưng phương pháp Find coi nó là không hợp lệ! Tại sao?

Trả lời

7

Thử xác minh chuỗi chứng chỉ bằng cách sử dụng lớp X509Chain. Điều này có thể cho bạn biết chính xác lý do tại sao chứng chỉ không được coi là hợp lệ.

Như erickson đã đề xuất, X509Store của bạn có thể không có chứng chỉ tin cậy từ CA trong chuỗi. Nếu bạn đã sử dụng OpenSSL hoặc công cụ khác để tạo CA tự ký của riêng mình, bạn cần phải thêm chứng chỉ công khai cho CA đó vào X509Store.

+0

Chuỗi chứng nhận có mặt, nhưng bằng cách nào đó người dùng này không thể truy cập được. Tôi đã sử dụng mã mẫu này từ MSDN để kiểm tra trạng thái chuỗi: http://tinyurl.com/4wfnng. Mã này lấy lại trạng thái khác nhau tùy thuộc vào người dùng. Tôi sẽ cố gắng cài đặt lại chứng chỉ. Cảm ơn. – pvieira

2

Tôi tin rằng x509 certs được gắn với một người dùng cụ thể. Nó có thể không hợp lệ vì trong mã bạn đang truy cập nó như một người dùng khác với mã mà nó được tạo ra?

5

Chứng chỉ của tổ chức phát hành có xuất hiện trong X509Store không? Chứng chỉ chỉ hợp lệ nếu nó được một người bạn tin tưởng ký.

Đây có phải là chứng chỉ từ CA thực sự hay chứng chỉ bạn đã ký? Các công cụ ký chứng chỉ thường được các nhà phát triển sử dụng, như OpenSSL, không thêm một số phần mở rộng quan trọng theo mặc định.

Các vấn đề liên quan