발생하는 오류와 관련된 항목을 찾을 수 없습니다.X509Store로 가장합니다. StoreName.Root에 추가 - 요청이 지원되지 않습니다.
문제는 내가 아래 store.Add
에 CryptographicException가 발생하고 있다는 것입니다. "요청이 지원되지 않습니다"
나는 다음과 같은 변화, 가이드로 following code을 사용 IDisposable 클래스를 사용하여 사용자를 가장합니다.인증서가 저장소에 추가 할 수 없습니다
MSDN Documentation 그것은한다고, 매우 도움이되지 않습니다.
- 그들은 StoreName.My 및 에 추가하는 내가
- 내가 원하는 StoreName.Root에 추가 할 :
개념 코드의 내 증거는 (/ 겉만 번지르르을 요약 된) :
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();
}
}
}
는 내가 가장을 제거 할 수 있으며 예외는 발생하지 않습니다, 그러나 그것은 올바른 사용자의 저장하지 않습니다.
가장으로 인증서를 예외없이 StoreName.AuthRoot
에 넣을 수 있습니다. 이것은 내가 인증서를 가져 가고 싶은 가게가 아닙니다.
이러한 예외없는 해결책 중 어느 것도 작동하지 않습니다. 프로그램을 높은 권한으로 실행하고 다른 사용자의 저장소로 이동해야합니다.
아래에서 내 솔루션을 추가했습니다. 어쩌면 누군가가 미래에 이런 일이 일어나는 이유에 대해 밝힐 수 있습니다. – Brett