Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Security.Cryptography.X509Certificates; //uses CLR Security from https://clrsecurity.codeplex.com
- //certificate is a standard System.Security.Cryptography.X509Certificates.X509Certificate2
- if (certificate.HasCngKey())
- {
- System.Security.Cryptography.CngKey privateKey = certificate.GetCngPrivateKey();
- bool privateKeyIsExportable = privateKey.ExportPolicy == CngExportPolicies.AllowExport;
- string privateKeyFileName = FindPrivateKeyPath(privateKey.UniqueName);
- }
- private static string FindPrivateKeyPath(string keyFileName)
- {
- IList<string> searchDirectories = new List<string>(new string[] { @"\Microsoft\Crypto\Keys", @"\Microsoft\Crypto\RSA\MachineKeys" });
- string keyDirectory = null;
- foreach (string searchDirectory in searchDirectories)
- {
- string machineKeyDir = string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), searchDirectory);
- // If found
- if (Directory.GetFiles(machineKeyDir, keyFileName).Length > 0)
- {
- keyDirectory = machineKeyDir;
- break;
- }
- }
- // Look up All User profile from environment variable
- if (string.IsNullOrEmpty(keyDirectory))
- {
- // Next try current user profile
- string userKeyDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Microsoft\Crypto\RSA\";
- // for each sub keyDirectory
- foreach (string subDir in Directory.GetDirectories(userKeyDir))
- {
- // Seach the key file
- string[] fs = Directory.GetFiles(subDir, keyFileName);
- if (fs.Length == 0)
- {
- continue;
- }
- else
- {
- // found
- keyDirectory = subDir;
- break;
- }
- }
- }
- if (string.IsNullOrEmpty(keyDirectory))
- {
- return "Private key exists but is not accessible";
- }
- StringBuilder sb = new StringBuilder();
- sb.Append(keyDirectory);
- sb.Append(Path.DirectorySeparatorChar);
- sb.Append(keyFileName);
- return sb.ToString();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement