2

ASP.NET을 사용하여 개인 저장소에서 클라이언트 인증서를로드하려면 어떻게해야합니까?ASP.NET을 사용하여 개인 저장소에서 클라이언트 인증서를로드하려면 어떻게해야합니까?

가능한 경우 데이터로 암호화 할 수 있습니까?

저는 ASP.NET 2.0에 응용 프로그램을 만들어 클라이언트 인증서 저장소 (개인)에 설치된 모든 인증서를 검색하여 디지털 서명을 만들었습니다.

그러나 그것은 작동하지 않습니다, 그리고 난 당신이 ASP.NET 응용 프로그램을 노크 한 추측하고있어 문제

// ... 
using System.Security.Cryptography.X509Certificates; 

namespace WebApplication4 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     public static string ToHexString(byte[] bytes) 
     { 
      // ... 
     } 

     protected void btnSignature_Click(object sender, EventArgs e) 
     { 
      X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
      store.Open(OpenFlags.OpenExistingOnly); 
      X509Certificate2Collection certificates = store.Certificates; 

      int a = certificates.Count; 

      lbCertCount.Text = System.Convert.ToString(a); 

      if (a > 0) 
      { 
       X509Certificate2 certificate = certificates[1]; 

       string publicKey = certificate.GetPublicKeyString(); 
       lbMypublicKey.Text = publicKey + "<br/>"; 

       // AsymmetricAlgorithm privateKey = certificate.PrivateKey; 

       RSACryptoServiceProvider privateKey = certificate.PrivateKey as RSACryptoServiceProvider; 

       // test message 
       byte[] buffer = Encoding.Default.GetBytes("Welcome"); 
       byte[] signature = privateKey.SignData(buffer, new SHA1Managed()); 
       string me = ToHexString(signature); 

       lbSignature.Text = me; 


       RSACryptoServiceProvider publicKey1 = certificate.PublicKey.Key as RSACryptoServiceProvider; 

       bool verify = publicKey1.VerifyData(buffer, new SHA1Managed(), signature); 

       if (verify == true) 
       { 
        lbControl.Text = "Signature valid"; 
       } 
       else 
       { 
        lbControl.Text = "Signature not Valid"; 
       } 
      } 
     } 
    } 
} 
+0

방문자 인증서 또는 서버의 사용자 계정에 대한 인증서를로드하려고합니까? –

+0

방문자 인증서를로드하려고합니다.주의 : 모든 방문자가 인트라넷 네트워크에 있으며 모두 활성 디렉토리에 로그온합니다. –

+0

확인. 사용자를 어떻게 인증합니까? 저들이 가장 했나요? –

답변

0

무엇인지 모른다. 테스트 하니스로서 실제로 개인 인증서에 액세스하는 프로덕션 응용 프로그램을 작성하려는 의도는 아닙니다. 웹 서버에 저장 하시겠습니까? 나는 코드를 전혀 연구하거나 테스트하지 않았지만 첫 번째 인스턴스에서 보안 권한을 확인합니다. 나는 ASP.Net 작업자 프로세스가 실행중인 계정이 개인 인증서에 액세스 할 수 없기를 기대합니다. 저장. 모든 Google 직원

+0

1/웹 서버 저장소가 아닌 "개인"클라이언트 저장소에 인증서를로드해야 함을 알아야합니다. 2/예 오른쪽, 프로덕션 버전이 아닙니다.이 코드를 실제 응용 프로그램에서 테스트하기 위해 테스트했습니다. 3/asp.net이 클라이언트 인증서를로드하기 위해 파괴해야하는 계정은 무엇입니까 ?? –

+0

나는 수년간 certs 스토어에서 아무 것도하지 않았다. 그러나 나는 믿는다. 그리고 그것은 개인 상점의 cert에 액세스하기 위해 당신이 그 가게에 cert를 가져온 계정으로 실행해야한다는 것을 이해하는 것처럼 보인다. 콘솔 응용 프로그램에서 테스트 하네스를 실행하는 것이 좋습니다. 동일한 계정으로 인증서를 가져 왔습니다. 가게에. –

1

:

Web.Config이 추가 :

<identity impersonate="true" /> 

자세한 내용은 msdn on impersonation를 참조하십시오.

관련 문제