2013-06-26 3 views
0

다음 코드는 SIGNED_FILENAME이 개인 키가 들어있는 기존 pfx 파일을 가리키는 상수 인 경우입니다.코드를 사용하여 인증서의 개인 키에 대한 사용 권한 설정

X509Certificate2 cert = new X509Certificate2(SIGNED_FILENAME, PASSWORD, X509KeyStorageFlags.MachineKeySet); 
RSACryptoServiceProvider certRsa = cert.PrivateKey as RSACryptoServiceProvider; 

는 나는 그들이 certRsa.CspKeyContainerInfo.UniqueKeyContainerName에 지정된 파일에 설정되어 있는지 찾을 개인 키에 대한 사용 권한을 추가하는 코드를 사용합니다. 그러나 인증서 mmc 스냅인에서 인증서 사용 권한을 볼 때 새 사용 권한 집합이 설정되어 있지 않습니다.

인증서 mmc 스냅인을 통해 수동으로 키를 설정할 때 사용 권한을 설정하는 개인 키가 위에서 언급 한 UniqueContainerName 속성에서 찾은 것과 다릅니다.

TLDR : 두 줄의 코드를 실행할 때마다 키 컨테이너 파일이 변경됩니다.

왜 이런 일이 발생하며 인증서 mmc 스냅인과 동일한 키에 대한 사용 권한을 설정하려면 어떻게해야합니까?

답변

0

분명히 키 컨테이너가 다시 생성 될 때마다 파일에서 열었기 때문입니다.

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 
X509Certificate2 c = store.Certificates 
    .Find(X509FindType.FindBySubjectName, SIGNED_SUBJECT, true) 
    .Cast<X509Certificate2>() 
    .FirstOrDefault(); 
    store.Close(); 

RSACryptoServiceProvider rsa = c.PrivateKey as RSACryptoServiceProvider; 
Console.WriteLine("Certificate thumbprint:" + c.Thumbprint); 
Console.WriteLine("From machine key store?: " + rsa.CspKeyContainerInfo.MachineKeyStore); 
Console.WriteLine("Key container name: " + rsa.CspKeyContainerInfo.KeyContainerName); 
Console.WriteLine("Key unique container name: " + rsa.CspKeyContainerInfo.UniqueKeyContainerName); 

을 이전 (I 파일로 인증서를 엽니 다) 내 원래의 게시물에서 코드마다 변경됩니다 콘솔에 인쇄 키 정보를 실행하는 경우 : 여기에 작동하는 코드입니다. 수정 된 코드를 실행하면 매번 동일한 정보가 표시됩니다.