c# - Impersonating to X509Store.Add to StoreName.Root - The Request Is Not Supported -
i cannot find related error encountering.
the problem encountering cryptographicexception on store.add
below:
"the request not supported."
the msdn documentation not helpful, states that:
the certificate not added store.
i used following code guide, following change:
- they adding storename.my , i want add storename.root
- i want use idisposable class impersonate user.
my proof of concept code (abridged/shoddy):
public class userlogonimpersonator : idisposable { private windowsimpersonationcontext _impersonationcontext = null; private const int logon_interactive = 2; private const int provider_default = 0; [dllimport("advapi32.dll", setlasterror=true)] private static extern int logonuser( string lpszusername, string lpszdomain, string lpszpassword, int dwlogontype, int dwlogonprovider, ref intptr phtoken); public userlogonimpersonator() { _impersonationcontext = null; intptr userhandle = intptr.zero; const string domain = "domain"; const string user = "user"; const string hcpw = "password"; try { int logonresult = logonuser(user, domain, hcpw, logon_interactive, provider_default, ref userhandle); bool isloggedon = logonresult != 0; if (isloggedon) { _impersonationcontext = windowsidentity.impersonate(userhandle); } } catch(exception e) { // handle exception } } public void dispose() { // undoimpersonation(); } // private methods ... } public class certservice { public void addcerttorootstore() { using(new userlogonimpersonator()) { x509certificate2 rootcert = new x509certificate2(certdata.certfilepath); x509store store = new x509store(storename.root, storelocation.currentuser); store.open(openflags.maxallowed); store.add(rootcert); store.close(); } } }
i can remove impersonation , no exceptions thrown, not correct user's store.
with impersonation, can put cert storename.authroot
without exception. not store want cert go into.
neither of these exception-free solutions work. require program run elevated privileges , go user's store.
i solved doing manually.
i wanted automate "test chain certificates." our third party ca gave set of certificates .local domain.
our real-life use case have root , chain certificate installed.
Comments
Post a Comment