/// <summary> /// Puts the certificate to the user store, optionally also to machine store. /// Prompts with UAC if elevated permissions are required. Works only on Windows. /// </summary> /// <returns>True if success.</returns> public bool TrustRootCertificateAsAdmin(bool machineTrusted = false) { if (!RunTime.IsWindows || RunTime.IsRunningOnMono) { return(false); } // currentUser\Personal installCertificate(StoreName.My, StoreLocation.CurrentUser); string pfxFileName = Path.GetTempFileName(); File.WriteAllBytes(pfxFileName, RootCertificate.Export(X509ContentType.Pkcs12, PfxPassword)); // currentUser\Root, currentMachine\Personal & currentMachine\Root var info = new ProcessStartInfo { FileName = "certutil.exe", CreateNoWindow = true, UseShellExecute = true, Verb = "runas", ErrorDialog = false, WindowStyle = ProcessWindowStyle.Hidden }; if (!machineTrusted) { info.Arguments = "-f -user -p \"" + PfxPassword + "\" -importpfx root \"" + pfxFileName + "\""; } else { info.Arguments = "-importPFX -p \"" + PfxPassword + "\" -f \"" + pfxFileName + "\""; } try { var process = Process.Start(info); if (process == null) { return(false); } process.WaitForExit(); File.Delete(pfxFileName); } catch (Exception e) { ExceptionFunc(e); return(false); } return(true); }
/// <summary> /// Attempts to create a RootCertificate. /// </summary> /// <param name="persistToFile">if set to <c>true</c> try to load/save the certificate from rootCert.pfx.</param> /// <returns> /// true if succeeded, else false. /// </returns> public bool CreateRootCertificate(bool persistToFile = true) { if (persistToFile && RootCertificate == null) { RootCertificate = LoadRootCertificate(); } if (RootCertificate != null) { return(true); } if (!OverwritePfxFile && pfxFileExists) { return(false); } try { RootCertificate = CreateCertificate(RootCertificateName, true); } catch (Exception e) { ExceptionFunc(e); } if (persistToFile && RootCertificate != null) { try { try { Directory.Delete(getCertificatePath(), true); } catch { // ignore } string fileName = getRootCertificatePath(); File.WriteAllBytes(fileName, RootCertificate.Export(X509ContentType.Pkcs12, PfxPassword)); } catch (Exception e) { ExceptionFunc(e); } } return(RootCertificate != null); }