HTTP Служба Windows для HTTPS - PullRequest
       5

HTTP Служба Windows для HTTPS

0 голосов
/ 21 марта 2019

У меня есть служба Windows, в которой размещается моя служба wcf.

app.config:

    <?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
    </startup>

  <system.serviceModel>
    <services>
      <service behaviorConfiguration="RestWCFServiceLibrary.Service1Behavior" name="RestWCFServiceLibrary.RestWCFServiceLibrary">
        <endpoint address="" binding="webHttpBinding" contract="RestWCFServiceLibrary.IRestWCFServiceLibrary" behaviorConfiguration="web">
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8888/RestWCFServiceLibrary/"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="RestWCFServiceLibrary.Service1Behavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        <CorsSupport/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  <extensions>
            <behaviorExtensions>
                <add name="CorsSupport" type="WebHttpCors.CorsSupportBehaviorElement, WebHttpCors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            </behaviorExtensions>
        </extensions>
  </system.serviceModel>

</configuration>

Моя проблема в том, что если мой веб-сайт использует https: //, он не может выполнить http-вызов из-за CORS. Веб-сайт https отправляет ajax GET запрос к localhost.

Сейчас я пытаюсь изменить службу Windows на https, но везде я вижу привязки ssl командной строки. Есть ли другой способ изменить службу размещения Windows wcf на использование https?

Что мне нужно сделать, чтобы эта http-служба перешла на https.

Пожалуйста, предоставьте пример того, что нужно изменить в моем app.config.

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Давайте просто добавим конечную точку https.Следующая конфигурация работает должным образом как для http, так и для https.

  <system.serviceModel>
    <services>
      <service behaviorConfiguration="mybehavior" name="WcfService1.Service1">
        <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="webbev"></endpoint>
        <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="webbev" bindingConfiguration="myhttpsbinding"></endpoint>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"></endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:11010"/>
            <add baseAddress="https://localhost:11011"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="myhttpsbinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />
          <security mode="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mybehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webbev">
          <webHttp />
        </behavior>
      </endpointBehaviors>
</behaviors>

Поскольку протокол https защищен сертификатом, мы должны связать сертификат с портом https для конечной точки https.(мы можем указать сертификат в модуле привязки IIS вместо CMD, если размещаем службу в IIS)

netsh http add sslcert ipport=0.0.0.0:11011 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}

Выполнить CMD с правами администратора и убедиться, что сертификат установлен в хранилище сертификатов локального компьютера (certlm.ЦКМ).Параметр Certhash указывает отпечаток сертификата.Параметр appid представляет собой GUID, который можно использовать для идентификации приложения-владельца (находится в файле project.csproj)

<ProjectGuid>{56FDE5B9-3821-49DB-82D3-9DCE376D950A}</ProjectGuid>

https://docs.microsoft.com/en-us/windows/desktop/http/add-sslcert
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-a-port-with-an-ssl-certificate

Не стесняйтесь обращаться ко мне, если есть что-то, с чем я могу помочь.

0 голосов
/ 21 марта 2019

Https работает только на порту 443. Поэтому вам лучше создать виртуальный хост в теге сценария SSL в конфигурации вашего сервера.Или вы также можете прокси передать ваш запрос http: // port (8888) на https: // (port: 443)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...