[c#] C #에서 지문으로 인증서를 찾는 방법

이 코드를 사용하여 지문으로 인증서를 찾습니다. 인증서가 개인 인증서 저장소의 인증서 관리자에 있지만이 코드는 해당 인증서를 찾지 못합니다.

내가 어디에서 잘못하고 있는지 알려주세요.

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();
}



답변

같은 문제에 대해 인터넷 검색을 할 때이 질문을 우연히 발견하고 여기 에서 답을 찾았습니다 . 저처럼 지문을 강조 표시하고 클립 보드에 복사하여 MMC에서 “소스”지문을 얻은 경우 거의 확실하게 화면 시작 부분에 보이지 않는 캐릭터이므로 :

string certThumbPrint = “fe14593dd66b2406c5269d742d04b6e1ab03adb1”;

실제로

문자열 certThumbPrint은 “= INVISIBLECHARACTER의 fe14593dd66b2406c5269d742d04b6e1ab03adb1을”;

이 보이지 않는 문자를 삭제하거나 (백 스페이스 키를 누르거나 옆에서 삭제해도 아무 일도 일어나지 않는 것처럼 보이면 거기에 있음을 알 수 있음) 손으로 지문을 다시 입력하면 코드가 제대로 작동합니다. 이제 Visual Studio에만 “보이지 않는 문자 표시”옵션이있는 경우 …


답변

지문이 포함 된 문자열 리터럴 은 시작 부분에 왼쪽 에서 오른쪽으로 표시 됩니다. MMC가 인증서 속성을 나열 할 때이 문자를 지문 값 앞에 표시하므로 텍스트가 일반적으로 오른쪽에서 왼쪽으로 렌더링되는 로캘에서도 16 진수 바이트가 왼쪽에서 오른쪽으로 나열됩니다.

아마도 이것은 편집 컨트롤의 스타일을 동적으로 업데이트하는 약간의 코드를 작성하는 것보다 속성 목록의 값 중 하나에 문자를 추가하는 것이 더 쉽기 때문에 누군가가 취한 지름길이었습니다. 아마도 현지화 테스트 중 버그 보고서에 대한 빠른 수정이었을 것입니다.

MMC에서 왼쪽에서 오른쪽 표시는 너비가 0이 아니므로 커서를 가로 질러 화살표를 이동할 때 커서가 이동하는 것을 관찰 할 수 있으며 16 진수 바이트의 첫 번째 행이 두 번째 행.

Visual Studio와 같은 다른 편집기에서 왼쪽에서 오른쪽 표시에는 너비가 없지만 화살표를 가로 질러 이동할 때 커서가 움직이지 않는다는 것을 알면 여전히이를 관찰 할 수 있습니다. KenD가 대답했듯이이 캐릭터를 삭제하면 문제가 해결됩니다.

보이지 않는 문자를 식별하는 빠른 방법 : 키보드를 사용하여 보이지 않는 문자를 선택하십시오. 그런 다음 일부 일반 문자 사이에 Word에 붙여 넣습니다. Word에서 선택하십시오. 그런 다음 삽입> 기호> 기타 기호를 클릭합니다. “유니 코드 이름”아래 왼쪽 하단을보십시오.


답변

LTR “\ u200e”및 RTL “\ u200f”문자가 지문 문자열에서 제거되었는지 확인하려면 다음을 수행하십시오.

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

공백 제거를위한 마지막 문자열 교체는 내 인증서가 있거나없는 인증서를 찾을 때 완전히 필요하지 않습니다.

다른 번거로운 유니 코드 문자는 여기에서 찾을 수 있습니다.

UTF-8 인코딩 테이블 및 유니 코드 문자


답변

내 두 센트 : MMC의 값을 복사하여 공백이 활성화 된 상태로 VS에 붙여 넣었습니다.

처음에는 아무것도 없었고 끝에는 공백이있었습니다. “1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57”

이제 web.config 파일에서 내부의 모든 공백을 유지하는 값을 붙여넣고 마지막 공백을 제거했습니다. “1e 52 73 0d 00 29 e6 85 7b e6 23 e2 fa c7 a5 08 ac 36 5e 57”

이것은 잘 작동합니다.

“1e52730d0029e6857be623e2fac7a508ac365e57″을 사용하면 다른 게시물에서 볼 수 있듯이 내부 공간을 제거해도 작동하지 않습니다.

이것이 도움이되기를 바랍니다.)


답변

이 powershell 스크립트를 실행하여 모든 지문을 가져오고 출력을 텍스트 파일로 리디렉션하고 거기에서 지문을 복사합니다.

Get-ChildItem -path cert:\LocalMachine\My

출력을 텍스트 파일로 리디렉션하려면 다음을 사용하십시오.

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


답변

추가 문자를 제거하고 유효한 16 진수 (및 ToUpper it)가 아닌 다른 항목도 제거하기 위해 다음을 수행했습니다.

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

이를 통해 인증서 관리자 대화 상자에서 직접 지문을 복사하여 내 사용법에 바로 붙여 넣을 수있었습니다.


답변

인증서의 모든 인증서를 검색하고 지문 ID를 출력하는 콘솔 애플리케이션을 작성하여 문제를 해결할 수있었습니다. 콘솔 출력을 복사하고 지문을 정확하게 삽입했습니다. 문제가 없습니다. MMC 콘솔에서 복사하면 데이터가 비슷해 보이지만 문제가 발생하는 것 같습니다. 이 사이트를 모든 인증서를 읽기위한 출발점으로 사용했습니다.

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