문제

좋아, 나는이 문제와 관련된 몇 가지 질문을 보았고, 성공하지 못한 많은 아이디어를 시도했습니다. 내 상황은 다음과 같습니다.

회사 인트라넷에 대한 웹 서비스를 받고 있습니다. Svcutil.exe를 사용하여 WCF 용 클라이언트 클래스를 생성했습니다. 서비스가 개발 중이고 인증 자격 증명이 필요하지 않은 경우 문제없이 웹 서비스 호출을 실행할 수 있었기 때문에 코드가 작동한다는 것을 알고 있습니다. 당시 코드는 SSL을 통해 실행되었습니다. 필요한 인증서를 신뢰할 수있는 루트 인증 당국 저장소로 가져 왔으며 모든 것이 괜찮 았습니다.

방금 무대 환경으로 이동했으며 서비스가 업그레이드되어 자격 증명을 연결해야합니다. 새로운 엔드 포인트로 연결을 전환하고 인증을 위해 코드를 추가했습니다. WCF와 함께 일하는 것은 이번이 처음이므로 명백한 실수에 대해 저와 함께하십시오. 내 문제는 코드를 통해 인증을 위해 인증을 위해 서비스를 전달할 수 없다는 것입니다. 나는 내가 찾은 온라인 코드 예제를 기반으로하고 있습니다.

다음은 svcutil에 의해 생성 된 내 구성의 예입니다.

<system.serviceModel>
  <bindings>
   <basicHttpBinding>
    <binding 
        name="xxxSOAPBinding" 
        .... (irrelevant config settings)....
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="Transport">
      <transport clientCredentialType="Certificate" />
     </security>
    </binding>
   </basicHttpBinding>
  </bindings>
  <client>
   <endpoint address="https://xxxServices_1_0_0"
    binding="basicHttpBinding" bindingConfiguration="xxxSOAPBinding" 
    contract="xxxService" name="xxxService" />
  </client>
 </system.serviceModel>

그리고 여기에 연결하려고 시도하는 코드가 있습니다. 인증서를 찾으려고하자마자 예외가 발생합니다.

using (var svc = new xxxServiceClient())
{
    svc.ClientCredentials.UserName.UserName = "XXX";
    svc.ClientCredentials.UserName.Password = "XXX";

    svc.ClientCredentials.ClientCertificate
     .SetCertificate(StoreLocation.LocalMachine, StoreName.Root, 
                     X509FindType.FindBySubjectName, "xxx");
...
}

나는 몇 가지 다른 x509findtypes를 시도했으며 성공하지 못한 인증서의 값과 일치시켰다. 내 코드에 문제가 있습니까? 전달한 값을 검증하기 위해 CERT 스토어를 쿼리 할 수있는 또 다른 방법이 있습니까?

Visual Studio를 실행하는 Dev Machine은 CERT를 가져 왔습니다.

도움이 되었습니까?

해결책

두 가지 바보 같은 질문 :

  • 당신은 확실한 인증서가 전혀 설치되어 있습니까?
  • 이 준비 시스템에 대한 인증서입니까?

또한 우선 사용자 이름/비밀번호를 설정 한 다음 자격 증명을 설정하는 것이 조금 이상해 보입니다. 사용자 이름/비밀번호 부분을 언급 할 수 있습니까? 그것이 어떤 차이가 있습니까?

마크

다른 팁

인증서가 로컬 머신 스토어로 가져 왔으며 CurrentUser 스토어에있을 수 있습니다.

이것은 어리석게 들릴지 모르지만 Staging Service의 새로운 인증서가 Cert 상점에 설치되었다고 확신하십니까? 그것은 당신의 문제 일 가능성이 높습니다.

또한, 어떤 예외가 발생하는지 언급하지 않았기 때문에 바인딩이 사용자 이름/비밀번호 사용을 나타내지 않으면 ClientCertificate 자격 증명을 설정하기 전에 사용자 이름/비밀번호 자격 증명을 설정할 수 있습니다. 거기에서 문제가 될 수 있습니다. 그들은 상호 배타적입니다.

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