0

발생하는 오류와 관련된 항목을 찾을 수 없습니다.X509Store로 가장합니다. StoreName.Root에 추가 - 요청이 지원되지 않습니다.

문제는 내가 아래 store.Add에 CryptographicException가 발생하고 있다는 것입니다. "요청이 지원되지 않습니다"

인증서가 저장소에 추가 할 수 없습니다

MSDN Documentation 그것은한다고, 매우 도움이되지 않습니다.

  • 그들은 StoreName.My 및 에 추가하는 내가
  • 내가 원하는 StoreName.Root에 추가 할 :

나는 다음과 같은 변화, 가이드로 following code을 사용 IDisposable 클래스를 사용하여 사용자를 가장합니다.

개념 코드의 내 증거는 (/ 겉만 번지르르을 요약 된) :

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에 넣을 수 있습니다. 이것은 내가 인증서를 가져 가고 싶은 가게가 아닙니다.

이러한 예외없는 해결책 중 어느 것도 작동하지 않습니다. 프로그램을 높은 권한으로 실행하고 다른 사용자의 저장소로 이동해야합니다.

+0

아래에서 내 솔루션을 추가했습니다. 어쩌면 누군가가 미래에 이런 일이 일어나는 이유에 대해 밝힐 수 있습니다. – Brett

답변

0

수동으로 처리하여 해결했습니다.

"테스트 체인 인증서"를 자동화하기 위해이 작업을 수행하려고했습니다. 우리의 제 3 자 CA는 .local 도메인에 대한 일련의 인증서를 우리에게주었습니다.

실제 사용 사례에는 이미 루트 및 체인 인증서가 설치되어 있습니다.