Вызывающая сторона не прошла проверку подлинности из-за ошибки службы - вызов метода службы развертывания CRM 2011 через SSL? - PullRequest
0 голосов
/ 15 сентября 2011

Я пытаюсь использовать Службу развертывания CRM 2011 для управления CRM 2011 в пользовательском приложении vb.net. Пожалуйста, не говорите мне, что я должен использовать диспетчер развертывания для своих операций, так как мне нужно разработать это специальное приложение с учетом конкретных требований для моей организации.

Все работает нормально, когда я использую http, но когда я пытаюсь подключиться, вызови метод развертывания службы с использованием SSL (на сервере включен HTTPS)

Вот моя соответствующая конфигурация клиента только для HTTPS / SSL

<binding name="CustomBinding_IDeploymentServiceHttps">
      <security defaultAlgorithmSuite="Default" authenticationMode="SspiNegotiatedOverTransport"
                    requireDerivedKeys="false" securityHeaderLayout="Strict" includeTimestamp="true"
                    keyEntropyMode="CombinedEntropy" protectTokens="false" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
                    requireSecurityContextCancellation="true">
        <localClientSettings cacheCookies="true" detectReplays="false"
            replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="Infinite"
            replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00"
            sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true"
            timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" />
        <localServiceSettings detectReplays="false" issuedCookieLifetime="10:00:00"
            maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00"
            negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00"
            sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00"
            reconnectTransportOnFailure="true" maxPendingSessions="128"
            maxCachedCookies="1000" timestampValidityDuration="00:05:00" />
        <secureConversationBootstrap />
      </security>
      <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
          messageVersion="Default" writeEncoding="utf-8">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      </textMessageEncoding>
      <httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
          maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
          bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
          realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
          useDefaultWebProxy="true" requireClientCertificate="false" />
    </binding>

и

 <client>
  <!-- Deployment Service Endpoints HTTP,HTTPS-->
  <endpoint address="http://10.40.30.20:5555/XRMDeployment/2011/Deployment.svc"
    binding="customBinding" bindingConfiguration="CustomBinding_IDeploymentService"
    contract="CRM2011DeploymentSvc.IDeploymentService" name="CustomBinding_IDeploymentService">
    <identity>
      <userPrincipalName value="LAB2010\administrator" />
    </identity>
  </endpoint>
  <endpoint address="https://www.mydomain.com/XRMDeployment/2011/Deployment.svc"
            binding="customBinding" bindingConfiguration="CustomBinding_IDeploymentServiceHttps"
            contract="CRM2011DeploymentSvc.IDeploymentService" name="CustomBinding_IDeploymentServiceHttps" />
</client>

Я использую следующий код в своем приложении asp.net

Dim DomainCredentials As New NetworkCredential(ADUserName, ADPassword, DomainNETBIOS)
 If CRMDeploymentServiceURl.Trim().ToLower().StartsWith("https://") Then
            _CrmDeployService = New DepSvc.DeploymentServiceClient("CustomBinding_IDeploymentServiceHttps")
        Else
            _CrmDeployService = New DepSvc.DeploymentServiceClient("CustomBinding_IDeploymentService")
        End If
        _CrmDeployService.ClientCredentials.Windows.ClientCredential = DomainCredentials
        _CrmDeployService.Endpoint.Address = New EndpointAddress(New Uri(CRMDeploymentServiceURl))
        _CrmDeployService.Endpoint.Binding.CloseTimeout = New TimeSpan(0, 30, 0)
        _CrmDeployService.Endpoint.Binding.OpenTimeout = New TimeSpan(0, 30, 0)
        _CrmDeployService.Endpoint.Binding.ReceiveTimeout = New TimeSpan(0, 30, 0)
        _CrmDeployService.Endpoint.Binding.SendTimeout = New TimeSpan(0, 30, 0)

Приведенный выше код используется только для инициализации услуги. Позже, когда я вызываю метод, используя Объект _CrmDeployService, все отлично работает через http, но не через https

Пожалуйста, скажите, что я могу сделать, чтобы связаться со службой безопасного развертывания HTTPS без использования какого-либо сертификата клиента. (SSL-сертификат от DigiCert уже установлен на сервере, и веб-сайт можно просматривать по SSL в любом веб-браузере. Какие еще сертификаты мне нужны и почему?)

Также настройки IIS были сделаны по мере необходимости. Служба WCf доступна для просмотра через SSL / https через веб-браузер. ) Я пробовал анонимную аутентификацию, а также аутентификацию через пользователя домена на сервере и обрабатывал то же самое в коде.

Есть ли какие-либо изменения конфигурации, которые мне нужно сделать? Это специфическая проблема WCF? Я пробовал решения, размещенные на stackoverflow , а также на msdn, но безрезультатно. Я не могу изменить web.config сервера, и я не должен использовать сертификат клиента, но я могу использовать любые учетные данные, необходимые для аутентификации, и я должен получить его через SSL. Пожалуйста, помогите . Спасибо

1 Ответ

0 голосов
/ 15 сентября 2011

SSL означает, что ему понадобится сертификат. Сначала проверьте, сделав пример приложения, чтобы проверить, работает ли WCF с ssl или нет, потому что только тогда можно быть уверенным, что проблема заключается в серверах CRM (он ищет сертификат) или, что еще хуже, если WCF провалил ранее, прежде чем достичь этот момент. Если WCF терпит неудачу, вам нужно создать для него временный сертификат. В Интернете достаточно справочного кода, который поможет вам начать работу.

http://msdn.microsoft.com/en-us/library/ff648498.aspx

и в вашем приложении используйте следующую привязку (поэкспериментируйте с различными режимами безопасности транспорта / сообщений, если хотите):

<basicHttpBinding>
<binding name="basicHttp">
<security mode="TransportWithMessageCredential" >
<transport/>
<message clientCredentialType=”UserName”/>
</security>
</binding>
</basicHttpBinding>

также вы должны настроить iis. Вы должны включить https в iis, а также назначить сертификат, который, я думаю, находится в Directory Security | Server Certificate.

и если это приложение Silverlight, тогда потребуется дополнительная доработка. Удачного кодирования Machpanel:)

...