.NET 6에서 HttpClient에 특정 인증서 추가

지난 며칠 동안 저는 쉴 수 없는 문제를 다루고 있었습니다. 업무상 스마트 카드를 사용하여 일부 내부 서비스에 대한 액세스 권한을 부여해야 합니다. Chrome이나 Firefox와 같은 브라우저를 사용할 때는 문제가 되지 않지만 정말 지루한 것을 자동화하기 위해 API를 통해 이러한 서비스를 사용하려고 할 때는 문제가 됩니다.

물론 스마트 카드 자체는 Windows의 개인 인증서 저장소에 이미 설치된 인증서의 사용을 인증하는 용도로만 사용되지만 어떻게든 이를 요청에 추가해야 합니다.

필수 단계:
  • 인증서 저장소에 액세스
  • 내 인증서 찾기
  • HttpClient에 추가
  • 요청을 성공적으로 수행합니다
  • .

    충분히 간단해 보이므로 시작하겠습니다. 먼저 개인 인증서 저장소에 액세스해야 합니다.

    var store = new X509Store(StoreLocation.CurrentUser);
    store.Open(OpenFlags.ReadOnly);
    


    이 두 줄은 먼저 현재 사용자의 개인 저장소에 액세스하기 위한 개체를 만든 다음 읽기 전용 모드로 엽니다. 아무것도 변경할 권한이 필요하지 않으므로 ReadOnly로 충분합니다.
    이제 인증서를 찾아봅시다. 내 예에서 가장 쉬운 방법은 IssuerName을 사용하는 것입니다. 이 특정 이름을 가진 항목이 하나만 있기 때문입니다. 귀하에게 더 적합한 다른 부동산을 찾고 싶을 수도 있습니다.

    var certificate = store.Certificates.First(cert => cert.IssuerName.Name == "ISSUER_NAME");
    


    이 줄은 우리의 요구 사항에 맞는 IssuerName이 있는 첫 번째 인증서를 찾습니다. 이제 가지고 있으므로 클라이언트에 추가하겠습니다.
    이를 위해서는 먼저 HttpClient() 개체를 만드는 데 사용할 HttpClientHandler()를 만들어야 합니다.

    var clientHandler = new HttpClientHandler();
    clientHandler.ClientCertificates.Add(certificate);
    var client = new HttpClient(clientHandler);
    


    보시다시피 핸들러 생성과 이를 사용하여 클라이언트 생성 사이에 인증서를 추가했습니다. 이제 클라이언트가 기본적으로 사용하기 때문에 더 이상 걱정할 필요가 없습니다.
    나머지 작업은 표준 방식으로 요청을 수행하는 것입니다.

    client.BaseAddress = new Uri("https://service.service");
    var result = await client.GetAsync("/endpoint");
    


    이 요청은 추가된 인증서를 사용하여 서비스에 대한 권한을 부여하며 모든 것이 잘 작동해야 합니다. 문제가 해결되었고 이제 정말 지루한 작업을 자동화할 수 있습니다. 여러분도 그렇게 할 수 있습니다 ;)

    이 기사는 내 개인 블로그https://rumpel.dev에 처음 게시되었습니다.

    좋은 웹페이지 즐겨찾기