2017-02-02 3 views
0

나는 WCF 서비스가 서버에서 실행이 있고, 다음과 같이 I는 자체 서명 된 인증서 내 서비스 참조를 만든 :인증을 위해 업로드 된 인증서를 사용하여 Azure 웹 사이트에서 클라이언트를 끝점으로 만들려면 어떻게해야합니까?

<behaviors> 
    <serviceBehaviors> 
    <behavior name="KeypadBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
     <serviceCredentials> 
     <serviceCertificate findValue="SELFHOSTTESTCert" x509FindType="FindBySubjectName"/> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

내 ASP.NET 웹 응용 프로그램은 클라이언트를 만들어야합니다 관리 엔드 포인트 :

<client> 
     <endpoint address="http://selfhosttest.example.com/Teamtime/Keypad.svc/Client" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IKeypad" 
      contract="TTAHttp.IKeypad" name="WSHttpBinding_IKeypad" /> 
     <endpoint address="http://selfhosttest.example.com/Teamtime/Keypad.svc/Admin" binding="wsHttpBinding" 
      bindingConfiguration="WSHttpBinding_IKeypadPrivilleged" contract="TTAHttp.IKeypadPrivilleged" 
      name="WSHttpBinding_IKeypadPrivilleged"> 
      <identity> 
       <certificate encodedValue="a very long unique string" /> 
      </identity> 
     </endpoint> 
    </client> 

는 VM에, 나는 사용에게 관리자 엔드 포인트 클라이언트를 만들 수 있습니다.

내 응용 프로그램을 Azure 웹 응용 프로그램으로 마이그레이션하려고합니다. 포털에 동일한 인증서를 업로드했습니다. WCF 서비스가 시작되지 것, 그리고 내가 위치 및 저장 설정 값을 시도하기 전에 몇 가지 주변 하구에 나섭니다 :

 <serviceCredentials> 
     <serviceCertificate storeLocation="CurrentUser" storeName="My" findValue="SELFHOSTTESTCert" x509FindType="FindBySubjectName" /> 
     </serviceCredentials> 

서비스는 이제 "시작 페이지"의의를 보여줍니다. 내가 지금 가지고있는 문제는 클라이언트 구성을 시도 할 때 (시도 A, B, C, D 참조) 클라이언트 생성 시도가 RTE를 던집니다.

<client> 
    <endpoint address="http://selfhost.example.com/TeamTime/Keypad.svc/Client" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IKeypad" contract="TTAHttp.IKeypad" name="WSHttpBinding_IKeypad" /> 
    <endpoint address="http://selfhost.example.com/TeamTime/Keypad.svc/Admin" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IKeypadPrivilleged" contract="TTAHttp.IKeypadPrivilleged" name="WSHttpBinding_IKeypadPrivilleged"> 
    <identity> 

    <!-- Option A --> 
    <!--<certificate encodedValue="a very long unique string" />--> 

    <!-- Option B --> 
    <!--<certificate encodedValue="a very long unique string" /> 
    <certificateReference 
     findValue="SELFHOSTTESTCert" 
     storeLocation="CurrentUser" 
     storeName="My" 
     x509FindType="FindBySubjectName"/>--> 

    <!-- Option C --> 
    <!--<certificateReference findValue="my thumbprint" storeLocation="CurrentUser" storeName="My" x509FindType="FindByThumbprint"/>--> 

    <!-- Option D --> 
    <!--<certificateReference storeLocation="CurrentUser" storeName="My" findValue="SELFHOSTTESTCert" x509FindType="FindBySubjectName"/>--> 

    </identity> 
</endpoint> 
</client> 

업로드 된 인증서를 사용하여 Azure 웹 사이트에서 끝점으로 클라이언트를 만들려면 어떻게해야합니까?

스택 추적 : 서버 스택 추적 : System.ServiceModel.Security.IssuanceTokenProviderBase 1.DoNegotiation(TimeSpan timeout) at System.ServiceModel.Security.SspiNegotiationTokenProvider.OnOpen(TimeSpan timeout) at System.ServiceModel.Security.TlsnegoTokenProvider.OnOpen(TimeSpan timeout) at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open(TimeSpan timeout) at System.ServiceModel.Security.SymmetricSecurityProtocol.OnOpen(TimeSpan timeout) at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Channels.SecurityChannelFactory 1.ClientSecurityChannel에서 1.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation operation, EndpointAddress target, Uri via, SecurityToken currentToken, TimeSpan timeout) at System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan timeout) at System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan timeout) at System.ServiceModel.Security.SecuritySessionClientSettings 1.ClientSecuritySessionChannel.OnOpen (시간 범위 제한 시간)에 System.ServiceModel.Channels.CommunicationObject.Open (시간 범위 제한 시간)에 System.ServiceModel.Channels.RequestReliableRequestor에서 System.ServiceModel.Channels.ReliableChannelBinder 1.ChannelSynchronizer.TryGetChannel(Boolean canGetChannel, Boolean canCauseFault, TimeSpan timeout, MaskingMode maskingMode, TChannel& channel) at System.ServiceModel.Channels.ClientReliableChannelBinder 1.Request (메시지 메시지, 타임 스팬 시간 제한 MaskingMode maskingMode)에서 System.ServiceModel.Channels.ReliableChannelBinder 1.ChannelSynchronizer.SyncWaiter.TryGetChannel() at System.ServiceModel.Channels.ReliableChannelBinder 1.ChannelSynchronizer.SyncWaiter.TryWait (TChannel & 채널) .OnRequest (메시지 요청, TimeSpan 시간 초과, 부울 마지막) System.ServiceModel.Channels.ReliableRequestor.Request (TimeSpan timeout)에서 System.ServiceModel.Channels.ClientReliableSession.Open (TimeSpan 제한 시간) System.ServiceModel.Channels.ReliableRequestSessionChannel.OnOpen (TimeSpan 제한 시간) at System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan 제한 시간) at System.ServiceModel.Channels .ServiceChannel.OnOpen (TimeSpan 시간 초과) at System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan 시간 초과) at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call (ServiceChannel 채널, TimeSpan 시간 초과 System.ServiceModel.Channels.ServiceChannel.Call (String action, Boolean oneway, ProxyOperationRuntime operation, Object [] ins, Object [] outs)에서 System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce (TimeSpan 시간 제한, CallOnceManager 계단식) TimeSpan 시간 초과) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, ProxyOperationRuntime 작업)에서 System.ServiceModel.Channels.Ser (System.Runtime.Remoting.Proxy.RealProxy.PrivateInvoke (MessageData & msgData, System.Runtime.Remoting.Proxy.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg)에서의 [0]에서 rethrown 된 예외) LaunchTeamTimeClient.Page_Load에서 TTAHttp.IKeypadPrivilleged.ClearTokens (문자열 MeetingID) (개체 보낸 사람, EventArgs입니다 전자)에서 INT32 타입)

답변

0

당신이 웹 애플리케이션 appsetting에서 인증서의 지문과을 WEBSITE_LOAD_CERTIFICATES를 추가해야 할 것 같다.이 경우 Using Certificates in Azure Websites Applications 블로그를 따라 추가하십시오. 다음은 블로그에서 잘라낸 것입니다.

WEBSITE_LOAD_CERTIFICATES라는 이름의 앱 설정 값을 인증서의 지문으로 설정하면 웹 응용 프로그램에서 액세스 할 수 있습니다. 쉼표로 구분 된 지문 값을 여러 개 가질 수도 있고이 값을 따옴표없이 "*"로 설정할 수도 있습니다.이 경우 모든 인증서가 웹 응용 프로그램 개인 인증서 저장소에로드됩니다.

+0

죄송합니다. 벌써 했어. – WhiskerBiscuit

+0

허용되지 않는 자체 서명 CA 인증서를 Azure 웹 애플리케이션에 설치하려는 경우. 자세한 내용은 다른 [SO 스레드를 참조하십시오 (http://stackoverflow.com/questions/41776109/installing-certificates-to-the-trusted-root-certificate-store-on-azure-web-apps?answertab= 활성 # tab-top). –