Переключитесь на SSL используя относительный URL - PullRequest
2 голосов
/ 05 декабря 2009

Я хотел бы создать относительную ссылку, которая переключает текущий протокол с http на https . В последнем месте, где я работал, было настроено что-то на сервере, чтобы вы могли это осуществить, но я мало что помню об этом и никогда не знал, как это работает.

Основанием для этого является то, что мне не нужно жестко кодировать имена серверов в файлах, которые необходимо перемещать между производственной средой и средой разработки.

Есть ли способ, чтобы это работало в IIS 6.0?


Изменить:

Я использую .NET, но создаваемая "ссылка" не будет генерироваться динамически. Если вам действительно нужны подробности, я использую макрос перенаправления в Umbraco, для которого требуется передать URL-адрес.

Ответы [ 5 ]

2 голосов
/ 05 декабря 2009

Вот простое решение в VB.NET:

Imports System.Web.HttpContext

Public Shared Sub SetSSL(Optional ByVal bEnable As Boolean = False)
  If bEnable Then
    If Not Current.Request.IsSecureConnection Then
      Dim strHTTPS As String = "https://www.mysite.com"
      Current.Response.Clear()
      Current.Response.Status = "301 Moved Permanently"
      Current.Response.AddHeader("Location", strHTTPS & Current.Request.RawUrl)
      Current.Response.End()
    End If
  Else
    If Current.Request.IsSecureConnection Then
      Dim strHTTP As String = "http://www.mysite.com"
      Current.Response.Clear()
      Current.Response.Status = "301 Moved Permanently"
      Current.Response.AddHeader("Location", strHTTP & Current.Request.RawUrl)
      Current.Response.End()
    End If
  End If
End Sub

Использование:

'Enable SSL
SetSSL(True)

'Disable SSL
SetSSL(False)

Вы можете добавить это в Page_Load каждой из ваших страниц. Или вы можете сделать что-то, как я, и создать список папок или страниц, которые вы хотите защитить в вашем global.asax, и соответственно установить SSL в методе Application_BeginRequest. И это будет работать с относительными ссылками, и статус страницы HTTP или HTTPS всегда будет таким, какой вы говорите, чтобы он был в коде.

У меня есть этот код на нескольких сайтах. Но, например, если вы перейдете на https://www.techinsurance.com, вы заметите, что он автоматически перенаправляет на http, потому что домашняя страница не нуждается в защите. И наоборот произойдет, если вы попытаетесь перейти на страницу, которая должна быть защищена, например http://www.techinsurance.com/quote/login.aspx

Вы можете заметить, что я использую 301 (постоянный) перенаправления. Дополнительным преимуществом здесь является то, что поисковые системы будут обновлять свой индекс на основе кода перенаправления 301.

0 голосов
/ 17 февраля 2010

В итоге мы приобрели ISAPI Rewrite для выполнения перенаправлений на уровне веб-сервера для определенных URL-адресов. Это не совсем тот ответ, который я искал, когда задавал вопрос, но это то, что работает для нас.

0 голосов
/ 17 декабря 2009

Это тот же ответ, который я дал здесь :

Да, вы можете. Я рекомендую эту бесплатную библиотеку с открытым исходным кодом, которая позволяет указать, каким страницам и папкам требуется SSL, а какие нет:

http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx

Таким образом, вы можете настроить безопасность страницы в своем файле web.config следующим образом:

<secureWebPages encryptedUri="www.example.com" unencryptedUri="www.example.com" mode="RemoteOnly" >
    <files>
      <add path="/MustBeSecure.aspx" secure="Secure" />
    </files>
</secureWebPages>
0 голосов
/ 05 декабря 2009

Вот хорошая статья CodeProject о том, как сделать это, указав определенные каталоги и файлы, которые вы хотите использовать SSL. Он автоматически переключит их на https и обратно с учетом ваших потребностей.

Я использую это для проекта, и он работает очень хорошо.

0 голосов
/ 05 декабря 2009

Какой язык / рамки вы используете?

Вы должны иметь возможность создать свою собственную функцию, в которой вы передаете относительную страницу, и вы выводите из объекта HttpRequest и объекта Server (опять же, в зависимости от языка или структуры), что такое хост и URL, а затем просто перенаправить на этот URL, но с префиксом https.

...