2009-04-03 3 views
11

У меня есть сайт (www.mydomain.com), который защищен сертификатом SSL. Это веб-сайт ASP.NET, и я заставил определенные страницы с помощью кода использовать префикс https: //. Если они этого не сделают, они перенаправят их на эквивалент https: //. Это хорошая практика? Есть ли более простой способ сделать это? Не для каждой страницы требуется SSL.Рекомендации по безопасности SSL-безопасности

Кроме того, когда пользователи используют мой URL-адрес в виде mydomain.com вместо www.mydomain.com, они получают ошибку сертификата, потому что сертификат зарегистрирован на www.mydomain.com. Должен ли я использовать тот же подход, что и я, с проблемой http: // и https: //, упомянутой выше? Или есть лучший способ справиться с этим?

ответ

2

Ваш подход звучит отлично. В моем текущем проекте я заставляю HTTPS, когда пользователь переходит на мою страницу входа (на основе флага конфигурации, который позволяет мне тестировать локально, не имея дело с необходимостью сертификата). Это позволяет мне получить доступ к другим страницам без защиты, что удобно.

У меня есть пара мест, где наш сервер захватывает выходные данные других страниц (например, рендеринг html в PDF и выборка динамических изображений). Из-за нашей среды наш сервер не может разрешить его публичное имя, поэтому, если бы мы вынудили ssl на сайте, который нам пришлось бы добавить, наш внутренний IP-адрес (или поддельный доменное имя).

Что касается вашего второго вопроса, у вас есть два варианта обработки www.example.com vs example.com. Вы можете купить сертификат, который позволяет вам иметь несколько доменных имен. Они известны как сертификаты UCC.

Ваш второй вариант - перенаправить example.com на www.example.com или наоборот. Перенаправление - отличный вариант, если вы хотите, чтобы ваш контент был проиндексирован Google или другими поисковыми системами. Поскольку они будут видеть www.example.com и example.com как два отдельных сайта. Это означает, что ссылки на ваши сайты будут разделены, что уменьшит ваш общий рейтинг страницы.

+0

Да, я придерживаюсь такого же подхода. У меня есть ключ EnableSsl в моем файле web.config, который я могу отключить и включить в зависимости от того, в какой среде я нахожусь. У меня также есть ключ SecurePages с разделителями каналов, с которым я могу легко добавлять/удалять сайты. –

+0

Другой способ вместо разделения по протоколу Pipe (Предполагая, что вам не нужно это менять после развертывания) было бы определение базовой страницы, которая выполняет проверку, тогда любая страница, которую вы хотите гарантировать, всегда будет наследоваться с этой страницы. Вы также можете использовать атрибуты. – JoshBerke

+0

Да, но я бы предпочел сохранить одну базовую страницу, и мне хотелось бы динамически установить страницы на ssl или нет без перекомпиляции. –

1

Вы можете настроить сайты в IIS на требуемые сертификаты, но это будет A) генерировать ошибку, если кто-то не посещает https и B) требуют, чтобы все страницы использовали https. Итак, , что не будет работать. Вы можете поместить фильтр в IIS, который проверяет все запросы и перенаправляет их как вызовы https, если они находятся в вашем списке шифрования. Очевидным недостатком здесь является необходимость обновлять список страниц каждый раз при добавлении новой страницы (например, из файла XML или базы данных) и перезапускать фильтр.

Я думаю, что вы, вероятно, правы в создании кода на страницах, для которых требуется https, который перенаправляется на версию https, если они поступают через http. Что касается вашей ошибки сертификата, вы можете перенаправить с полным путем (включая www) вместо относительного пути для устранения этой проблемы. Если у вас есть какие-либо вопросы о том, как определить, использует ли вызов https или как получить полный путь к текущему запросу, пожалуйста, дайте мне знать. Оба довольно простые, но у меня есть образец кода, если он вам нужен.

ОБНОВЛЕНИЕ - Джош, сертификаты, которые обрабатывают несколько поддоменов, называются подстановочными знаками. Проблема в том, что они довольно дороже стандартных сертификатов.

ОБНОВЛЕНИЕ 2: Еще одна вещь, которую следует учитывать, - использовать главную страницу или производный класс для страниц, которым необходим SSL. Таким образом, вместо дублирования кода на каждой странице вы можете просто объявить его как тип SSLPage (или использовать соответствующую главную страницу) и иметь класс Master/Parent обработать перенаправление. Опять же, вам нужно будет обработать некоторые URL-адреса, если вы примете этот подход, но это довольно тривиально.

+0

Благодарим вас за ввод. Я уже обнаруживаю для http: // и https: //, так что это не проблема. Мне придется поиграть с проверкой на www. потому что url не будет иметь это на моей машине разработки. Любой совет? –

+0

Отметьте теперь, что они называются сертификатами UCC. Подстановочные знаки разные. UCC от Godaddy, который может поддерживать 5 доменов, составляет 89 долларов США в год. – JoshBerke

+0

Майк: добавьте запись www.localhost в файл вашего хоста. Это позволит вам протестировать ваш www. логика :-) – JoshBerke

-1

Ниже то, что может помочь вам:

  • Если это прекрасно, чтобы отобразить все страницы сайта с https: //, то вы можете просто обновить свой код, чтобы использовать https: // и установить два привязок в ИИС. Один для http, а другой для https. Таким образом, ваш сайт может быть доступен через любой из протоколов.
  • Ваши посетители получают ошибку несоответствия имени, поскольку общее имя, используемое в вашем сертификате SSL, - www.mydomain.com. Namecheap предоставляет сертификаты RapidSSL, через которые вы можете защитить оба имени под одним SSL. Вы можете приобрести этот SSL для www.mydomain.com, и он автоматически защитит mydomain.com (т. Е. Без www).

Еще один вариант - вы можете написать код для перенаправления посетителей на сайт www.mydomain.com, даже если они просматривают mydomain.com.

Смежные вопросы