Невозможно заставить SSL работать на экземпляре Azure - PullRequest
3 голосов
/ 01 марта 2012

Я пытался понять, почему SSL работает в одном из моих проектов Azure, а не в другом.

Когда я перехожу на свой сайт, скажем https://foo.com, я даже не могу подключиться к сайту. Браузеры не могут подключиться вообще, и curl говорит "couldn't connect to host". Однако, если я перехожу на мой URL-адрес cloudapp.net (например, https://foo.cloudapp.net), он может подключиться, но браузеры будут жаловаться и сообщать, что мой сертификат предназначен для *.foo.com. Примечание: я могу без проблем подключиться к http://foo.com.

Вот мой код с некоторыми запутанными значениями.

ServiceDefinition.csdef:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyApp" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="www" vmsize="Small">
<Sites>
  <Site name="Web">
    <VirtualApplication name="r" physicalDirectory="../Foo/Bar" />
    <Bindings>
      <Binding name="Endpoint1" endpointName="Endpoint1" />
      <Binding name="Endpoint2" endpointName="Endpoint2" />
    </Bindings>
  </Site>
</Sites>
<Endpoints>
  <InputEndpoint name="Endpoint1" protocol="http" port="80" />
  <InputEndpoint name="Endpoint2" protocol="https" port="443" certificate="STAR.foo.com" />
</Endpoints>
<Imports>
  <Import moduleName="Diagnostics" />
</Imports>
    <Certificates>
      <Certificate name="STAR.foo.com" storeLocation="LocalMachine" storeName="My" />
    </Certificates>
</WebRole>
</ServiceDefinition>

мой сертификат загружен, отпечаток совпадает (в данном примере это также "1234567890")

ServiceConfiguration.csfg:

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="myApp" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
<Role name="www">
<Instances count="2" />
<ConfigurationSettings>
  <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
</ConfigurationSettings>
<Certificates>
  <Certificate name="STAR.foo.com" thumbprint="1234567890" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>

Консоль Azure:

Я подтвердил, что:

Мой сертификат загружен

  • Это SHA1
  • Его отпечаток соответствует тому, что я указал в ServiceConfiguration.cscfg (в данном примере это «1234567890»)
  • Также имеются сертификаты для центров сертификации (для меня это «PositiveSSL CA» и «AddTrust External CA root»)
  • Для экземпляра Azure он подтверждает, что есть 2 конечные точки (порт 80 и порт 443)

Почему я вообще не смогу подключиться через https://foo.com, но мой https://foo.cloudapp.net загрузится (хотя и выдает предупреждение браузера)? Кажется, это говорит о том, что моя конфигурация верна, но что-то еще не так ... идеи?

1 Ответ

1 голос
/ 02 марта 2012

Я думаю, что вы, возможно, ищете не то место для вашей проблемы!

Как вы сопоставили foo.com с адресом вашего сайта?

Обратите внимание, что экземплярам Azure присваиваются динамические IP-адреса - какой адрес вашего сайта может быть СЕЙЧАС, может не совпадать с адресом завтрашнего дня.Для Azure рекомендуется добавить в записи домена DNS-запись CNAME "www", которая будет указывать на "foo.cloudapp.net".

Таким образом, когда кто-то просматривает сайт www.foo.com, DNSСервер (незаметно) скажет: «Эй, на самом деле этот сайт называется foo.cloudapp.net. Затем браузер запросит IP-адрес foo.cloudapp.net. Этот домен управляется Microsoft, которая возвращает текущий IP-адрес.для вашего сайта.

Если вы хотите, чтобы foo.com по-прежнему выводил вас на сайт www.foo.com, вам придется настроить перенаправление DNS, чтобы каждый раз, когда кто-то вводил foo.com в свой браузер, онПосле этого вы будете перенаправлены на сайт www.foo.com. Это позволит браузеру разрешить foo.cloudapp.net, а затем на ваш сайт будет отправлен HTTP-запрос. Некоторые хостеры доменов взимают за это плату (обычно номинальную плату), некоторые предлагают ее какбесплатный сервис.

HTH.

...