Cách tìm chứng chỉ bằng dấu vân tay của nó trong C #


82

Tôi đang sử dụng mã này để tìm chứng chỉ bằng dấu vân tay của nó. chứng chỉ tồn tại trong trình quản lý chứng chỉ trong kho chứng chỉ cá nhân nhưng mã này không tìm thấy chứng chỉ đó.

Xin hãy cho tôi biết tôi đang làm sai ở đâu trong đó.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string certThumbPrint = "‎‎fe14593dd66b2406c5269d742d04b6e1ab03adb1";
            X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            // Try to open the store.

            certStore.Open(OpenFlags.ReadOnly);
            // Find the certificate that matches the thumbprint.
            X509Certificate2Collection certCollection = certStore.Certificates.Find(
                X509FindType.FindByThumbprint, certThumbPrint, false);
            certStore.Close();

            // Check to see if our certificate was added to the collection. If no, 
            // throw an error, if yes, create a certificate using it.
            if (0 == certCollection.Count)
            {
                Console.WriteLine("Error: No certificate found containing thumbprint " );
            }
            Console.ReadLine();
}

2
Có thể có trùng lặp Sự cố với Chứng chỉ X509Store. Tìm FindByThumbprint
Peter O.

X509Storedụng cụ IDisposablevì vậy nó nên được sử dụng với một usingtuyên bố.
Alex Vallejo

Câu trả lời:


208

Chỉ tình cờ gặp câu hỏi này khi Googling cho cùng một vấn đề và tìm thấy câu trả lời ở đây : nếu, giống như tôi, bạn lấy được dấu vân tay "nguồn" của mình từ MMC bằng cách đánh dấu dấu vân tay và sao chép nó vào khay nhớ tạm, bạn gần như chắc chắn đã bắt được ký tự ẩn ở đầu màn hình, vì vậy:

string certThumbPrint = "fe14593dd66b2406c5269d742d04b6e1ab03adb1";

thực sự là

chuỗi certThumbPrint = " INVISIBLECHARACTER fe14593dd66b2406c5269d742d04b6e1ab03adb1";

Nếu bạn xóa ký tự ẩn này (bạn có thể biết nó ở đó khi bạn nhấn phím xóa lùi hoặc xóa bên cạnh ký tự đó và dường như không có gì xảy ra) hoặc chỉ cần nhập lại dấu ngón tay bằng tay, mã của bạn sẽ hoạt động tốt. Bây giờ nếu chỉ Visual Studio có tùy chọn "hiển thị các ký tự ẩn" ...


2
VS có Chỉnh sửa> Nâng cao> Xem Khoảng trắng (Ctrl + R, Ctrl + W để chuyển đổi) - nó có thể hữu ích, nếu bạn biết, cần tìm những gì.
Michael Freidgeim

@MichaelFreidgeim nó không giúp được gì. VS không hiển thị ký tự ẩn, chỉ có ký tự khoảng trắng.
George Polevoy

@MichaelFreidgeim View White Space không hiển thị các ký tự ẩn cụ thể này, ít nhất là trong VS 2013.
Jeremy Cook

Tôi cũng đã chọn và sao chép từ MMC.
Mötz

3
CHÚC MỪNG @% $ @ $ !!! THẬT HOÀNH TRÁNG. Đã lãng phí Hrs, chơi với cửa sổ ngay lập tức, tự hỏi tại sao "Foo" == "Foo" là sai. Ngài xứng đáng nhận được sự ủng hộ. CẢM ƠN BẠN!
Thiago Silva

18

Chuỗi ký tự chứa dấu vân tay của bạn có dấu từ trái sang phải ở đầu. Khi MMC liệt kê các thuộc tính chứng chỉ, nó đứng trước giá trị dấu ngón tay với ký tự này để các byte hex được liệt kê từ trái sang phải ngay cả trong các ngôn ngữ nơi văn bản thường được hiển thị từ phải sang trái.

Có thể, đây là một phím tắt mà ai đó đã sử dụng vì việc thêm một ký tự vào một trong các giá trị trong danh sách thuộc tính dễ dàng hơn là viết một đoạn mã để cập nhật động kiểu của điều khiển chỉnh sửa. Có lẽ đó là một bản sửa lỗi nhanh chóng cho một báo cáo lỗi trong quá trình thử nghiệm bản địa hóa.

Trong MMC, dấu từ trái sang phải có chiều rộng khác 0, bạn có thể quan sát thấy con trỏ di chuyển khi bạn mũi tên ngang qua nó và tôi nhận thấy rằng hàng đầu tiên của byte hex được dịch chuyển một chút sang phải so với hàng thứ hai.

Trong các trình soạn thảo khác như Visual Studio, dấu từ trái sang phải không có chiều rộng, nhưng bạn vẫn có thể quan sát nó bằng cách nhận thấy rằng con trỏ không di chuyển khi bạn mũi tên ngang qua. Như KenD đã trả lời, việc xóa ký tự này sẽ giải quyết được vấn đề.

Cách nhanh chóng để xác định ký tự ẩn: Sử dụng bàn phím để chọn ký tự ẩn; sau đó dán nó vào Word giữa một số ký tự bình thường. Chọn nó trong Word; sau đó nhấp vào Chèn> Biểu tượng> Biểu tượng khác. Nhìn ở phía dưới bên trái dưới "Tên Unicode".


10

để đảm bảo rằng các ký tự LTR "\ u200e" và RTL "\ u200f" đó bị xóa khỏi chuỗi dấu vân tay của bạn, hãy làm như sau

thumbprint = thumbprint.Replace("\u200e", string.Empty).Replace("\u200f", string.Empty).Replace(" ",string.Empty);

chuỗi cuối cùng thay thế cho việc xóa khoảng trắng là không hoàn toàn cần thiết vì nó tìm thấy chứng chỉ của tôi có hoặc không có chúng.

các ký tự unicode rắc rối khác có thể được tìm thấy tại đây

Bảng mã UTF-8 và các ký tự Unicode


5

Hai xu của tôi: Tôi đã sao chép giá trị trong MMC và dán nó vào VS có bật White Spaces.

Lúc đầu chẳng có gì ngoài khoảng trắng cuối cùng: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"

Bây giờ, trong tệp web.config, tôi đã dán giá trị duy trì tất cả các khoảng trắng bên trong, xóa khoảng trắng cuối cùng: "1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57"

Điều này hoạt động tốt.

Nếu tôi sử dụng "1e52730d0029e6857be623e2fac7a508ac365e57", việc xóa không gian bên trong như tôi thấy trong các bài viết khác, không hoạt động ...

Hy vọng điều này có thể giúp ích;)


2

Tôi chạy tập lệnh powershell này để lấy tất cả các dấu vân tay và chuyển hướng đầu ra đến tệp văn bản và sao chép dấu vân tay từ đó.

Get-ChildItem -path cert:\LocalMachine\My

Để chuyển hướng đến đầu ra thành tệp văn bản, hãy sử dụng điều này:

Get-ChildItem -path cert:\LocalMachine\My > thumbprints.txt

Cảm ơn vì điều này! Tôi đã có một chứng chỉ và chỉ là không biết nó. Điều này tiết lộ những gì tôi cần biết.
rjacobsen0

2

Tôi đã làm như sau để xóa ký tự thừa và cũng để xóa bất kỳ ký tự nào khác không hợp lệ trong hệ thập lục phân (và ToUpper nó):

            thumbprint = Regex.Replace(thumbprint.ToUpper(), @"[^0-9A-F]+", string.Empty);

Điều này cho phép tôi sao chép trực tiếp dấu vân tay từ hộp thoại trình quản lý chứng chỉ và dán thẳng vào mục đích sử dụng của tôi.


0

Tôi đã có thể giải quyết sự cố bằng cách viết một ứng dụng bảng điều khiển để truy xuất tất cả các chứng chỉ trên chứng chỉ và xuất ra id dấu vân tay. Tôi đã sao chép đầu ra bảng điều khiển và chèn chính xác dấu vân tay. Không vấn đề. Có vẻ như việc sao chép từ bảng điều khiển MMC gây ra sự cố mặc dù dữ liệu trông giống nhau. Tôi đã sử dụng trang web này làm điểm bắt đầu để đọc tất cả các chứng chỉ.

https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.thumbprint(v=vs.110).aspx

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.