하는 인증서를 가져오는 방법으로 개인 키으로 윈도우 인증서 저장소에 저장됩니다. 나는 성공적으로 인증서를 가져와 사용하여 아래
X509Certificate2 certificate = new(certByteArray, certPassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet);
X509Store store = new(StoreName.TrustedPeople, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
하지만 문제는데,어떻게 사용자에게 개인 키에 대한 액세스 권한이 있는 프로그래밍 방식으로 보여줍니다.
내가 찾는 이러한 링크 유용:
https://www.pkisolutions.com/accessing-and-using-certificate-private-keys-in-net-framework-net-core/
CngKey 할당 권한 기계 열쇠
나는에 대한 액세스 권한을 부여할 수 있습을 통한 UI certlm.msc>드래그 인증서를 개인적인점>오른쪽 클릭합 인증서>모든 작업을 관리>개인 키>사용자를 추가 및 권한
그러나 나는 할 필요가 이 프로그래밍 방식으로
변경 사항이 있습니다.NET 전체 프레임워크는 예제에서 왔습니다. I've spent more than 하루에,그것도 여러 인증서,인증서는 확실히 표시로 내보낼 수 있고 실행하는 대로 관리자입니다. 나는 행복으로 윈도우에만 솔루션
이는 대로 나
const string NCRYPT_SECURITY_DESCR_PROPERTY = "Security Descr";
const CngPropertyOptions DACL_SECURITY_INFORMATION = (CngPropertyOptions)4;
X509Store trustedPeopleStore = new(StoreName.TrustedPeople, StoreLocation.LocalMachine);
trustedPeopleStore.Open(OpenFlags.ReadWrite);
var certificates = trustedPeopleStore.Certificates.Find(X509FindType.FindByThumbprint, "xxxxxxxxxxxxxxxxxxxxxx", false);
RSA rsa = certificates[0].GetRSAPrivateKey();
RSACng rsaCng = rsa as RSACng;
CngProperty prop = rsaCng.Key.GetProperty(NCRYPT_SECURITY_DESCR_PROPERTY, DACL_SECURITY_INFORMATION);
나는 볼 수 있습니다 rsaCng.키에 존재하는 디버깅,하지만 실패하면 다음 줄에서(그것은 확실히 내보낼 수)을 받고 숙박 시설
Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state.'
나는 또한 의견을 읽지 않아야 된다는 것도 설정 acl 에서 직접 파일이지만,확실하지 않는 경우에는 정정하거나지