문제

둘의 차이점은 무엇입니까?

도움이 되었습니까?

해결책

그만큼 x509certificate .NET v1.0/1.1에 도입되었으며 (비교적) 기능이 제한되어 있습니다. 기존 인증서 (유효한 날짜, 발행자 등)에 대한 정보를 얻는 데 사용할 수 있습니다. 간단한 방법/작업 (예 : 디스크에서 인증서 읽기)이있었습니다.

그만큼 x509certificate2 추가 기능을 갖춘 x509Certificate의 서브 클래스입니다.

  • 실제 X509 인증서를 나타냅니다.
  • .NET Framework v2.0에서 새로운 것이 었습니다.
  • 이 클래스는 모든 V2 및 V3 속성 (권한 키 식별자 및 키 사용량)에 액세스 할 수 있습니다.
  • 인증서 저장소에서 인증서로드를 지원합니다.

다른 팁

완전성을 위해 다음은 다음과 같은 관련 섹션의 사본입니다. 사이트에 연결된 사이트 @dommer의 답변에서, 사이트는 더 이상 올라가지 않을 수 있고 누가 놀랍게도 Google의 캐시에만 :

프레임 워크의 버전 1.1은 x509certificate 클래스 외에는 거의 없었습니다. 인증서를 조작 할 수 있습니다. 실제로 V1.1 x509Certificate 클래스는 기본 지원 만 제공했습니다. X509 버전 1 필드 (예 : 유효 및 유효한 날짜, 주제 및 공개 키)에만 액세스했지만 버전 2 필드 (Authority Key Identifier와 같은) ) 또는 버전 3 필드 (주요 사용법과 같은). 인증서 저장소에서 인증서를로드 할 수있는 지원은 없었으며 인증서 취소 목록 또는 인증서 신탁 목록에 액세스 할 수있는 시설도 없습니다. Microsoft는 WSE Services Enhancement (WSE) 툴킷을 통해 인증서 클래스를 확장하고 인증서 상점에 액세스 할 수있는 클래스를 제공함으로써이를 개선했습니다. 이 클래스는 이제 .NET 3.0/2.0 프레임 워크 라이브러리에서 찾을 수 있습니다.

첫 번째 큰 변화는 x509certificate에서 파생 된 x509certificate2라는 새로운 클래스입니다. X509 인증서 필드에 액세스하는 방법은 더 이상 사용되지 않았으며 이제 클래스에는 해당 필드에 액세스 할 수있는 속성이 있습니다. 또한 인증서에 관련 개인 키가있는 경우 클래스는이 키에 액세스 할 수 있습니다. 개인 키가 하나로 보호되는 경우 비밀번호를 제공 할 수있는 방법이 있습니다. 비밀번호는 객체를 더 이상 사용하지 않으면 메모리를 사용하지 않도록하는 특수 유형 인 Securestring 매개 변수를 통해 전달됩니다. 보안 문자열 및 기타 형태의 보호 데이터는 이후 섹션에서 다룰 것입니다.

x509certificate2는 x509certificate에서 파생되므로 x509certificate2 클래스를 통해 정적 메소드를 CreateFromeCertFile 및 CreateFromsignedFile을 호출 할 수 있음을 의미합니다. 그러나 이러한 방법은 X509Certificate 객체를 반환하면 X509Certificate2 객체로 다운 캐스팅 할 수 없습니다. X509Certificate 클래스는 버전 3.0/2.0에서 개선되었습니다. 일부 X509 필드에 액세스 할 수있는 속성을 제공합니다. 가져 오기 및 내보내기 메소드를 제공하여 바이트 배열에서 객체를 초기화하거나 인증서에서 바이트 배열을 생성하며 파일 (ASN.1 DER) 및 바이트 배열에서 개체를 생성하는 생성자가 있습니다. 흥미롭게도 x509certificate2 클래스에는 x509certificate 객체에서 x509certificate2 객체를 생성 할 수있는 생성자가 있습니다. X509Certificate 객체는 X509V1 필드 만 표시 할 수 있지만 X509V3 인증서에서 생성 할 수 있으므로 X509Certificate 객체에서 X509Certificate2 객체를 작성하면 X509V3 필드에 액세스 할 수 있습니다.

"x509Certificate"에서 "x509Certificate2"로 X.509 인증서를 변환하려면 다음과 같은 것을 시도하십시오.

X509Certificate  X509  = sslStream.RemoteCertificate;
X509Certificate2 X5092 = new X509Certificate2(X509);

인증서를 읽고이를 사용하여이를 사용하려는 사람들은 단순히 x509certificate2를 생성하고 생성자에 x509certificate를 전달합니다.

서명 된 어셈블리 (EXE)의 경우 코드는 이와 같은 코드이며 단순성에 대한 오류 유효성 검사를 생략합니다.

Module m = Assembly.GetEntryAssembly().GetModules()[0];
using (var cert = m.GetSignerCertificate())
using (var cert2 = new X509Certificate2(cert))
{
   var _clientHandler = new HttpClientHandler();
   _clientHandler.ClientCertificates.Add(cert2);
   _clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
   var myModel = new Dictionary<string, string>
   {
       { "property1","value" },
       { "property2","value" },
   };
   using (var content = new FormUrlEncodedContent(myModel))
   using (var _client = new HttpClient(_clientHandler))
   using (HttpResponseMessage response = _client.PostAsync($"{url}/{controler}/{action}", content).Result)
   {
       response.EnsureSuccessStatusCode();
       string jsonString = response.Content.ReadAsStringAsync().Result;
       var json = new Newtonsoft.Json.JsonSerializer();
       var myClass = JsonConvert.DeserializeObject<MyClass>(json);
    }
}

분명히 당신은 클래스를 myclass라고 불리는 것이 아니라 웹 서비스에서 기대할 일부 비즈니스 객체입니다.

채워야하는 부동산 및 가치를 보내서 클래스를 보낼 수 있습니다. 이제받은 요청이 유효한 모바일 또는 Windows 클라이언트에서와 같은 요청 인증서를 읽어야하는지 확인할 수 있습니다.

public class MyController : ApiController
{
    public IHttpActionResult Get()
    {           
       X509Certificate2 clientCertInRequest = Request.HttpContext.Connection.ClientCertificate;
       if (!clientCertInRequest.Verify() || !AllowedCerialNumbers(clientCertInRequest.SerialNumber))
       {
            Response.StatusCode = 404;
            return null;
       }
       //your code
   }

}

남은 것은 웹 서버를 클라이언트 인증서를 수락하도록 설정하는 것입니다 ... 새 형식에서 나오는 속성에 대한 모든 내용을 읽을 수 있으며 공개 웹 서비스를 확보했으며 승인을받는대로 가장 실패한 일이 충분하지 않습니다. 더 이상 (그랬다면)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top