Self hosted WEB API + HTTPS

shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Self hosted WEB API + HTTPS

Post by shadow7256 »

Уважаемые,

Построил self hosted WEB API, стоит задача чтобы все работало только через HTTPS.

Я создал self signed SSL сертификат. Натравил этот сертификат на мой WEB API согласно этой статье (в netsh командах понятное дело подставил мои данные):

https://chanmingman.wordpress.com/2015/ ... d-web-api/" onclick="window.open(this.href);return false;

Теперь через HTTPS все отлично работает. Но.. надо теперь запретить клиентам обращаться к сервису через HTTP протокол.

На данный момент если клиент обращается к сервису через просто HTTP то он получает ошибку 504 (Timeout) в ответ. То есть до ApiController даже вызов не доходит. Это плохо, потому что Timeout ответ занимает довольно долгое время и при желании можно сделать Denial of Service.

Я создал специальный класс:

Code: Select all

public class RequireHttpsAttribute : AuthorizationFilterAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
            {
                var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.HttpVersionNotSupported)
                {
                    ReasonPhrase = "HTTPS Required"
                };
                actionContext.Response = httpResponseMessage;
                return;
            }
            base.OnAuthorization(actionContext);
        }
    }
и поставил на мой класс контроллера этот аттрибут:

Code: Select all

[RequireHttps]
public class SubmissionsController : ApiController
{
}
но до класса RequireHttpsAttribute даже не доходит вызов.

Как быть в этой ситуации?

Спасибо
User avatar
Solnishko2010
Новичок
Posts: 67
Joined: 07 Jan 2014 02:14
Location: Peter, RU -- Seattle, US

Re: Self hosted WEB API + HTTPS

Post by Solnishko2010 »

Сдается мне - что надо еще в настройках IIS указать опцию "Require SSL", тогда через HTTP будет возвращаться 403 Forbidden.

http://www.iis.net/learn/manage/configu ... ssl-on-iis" onclick="window.open(this.href);return false;
http://technet.microsoft.com/en-us/library/cc732367" onclick="window.open(this.href);return false;
http://blogs.msdn.com/b/rakkimk/archive ... e-ssl.aspx" onclick="window.open(this.href);return false;
Everything is possible, the impossible just takes longer
XAOC
Уже с Приветом
Posts: 1657
Joined: 26 Jan 2006 20:42

Re: Self hosted WEB API + HTTPS

Post by XAOC »

Solnishko2010 wrote:Сдается мне - что надо еще в настройках IIS указать опцию "Require SSL", тогда через HTTP будет возвращаться 403 Forbidden.
какое к черту IIS в Self-Hosted?

shadow7256, что бы доходили запросы до контроллера по 80, нужно слушать этот порт. Вы же слушаете только 443. Я не знаю, можно ли слушать эти порты одновременно в self-hosted, но если нет, то можно поднять еще один self-hosted app на 80 порту, который будет или ошибку возвращать, или редиректить на 443.
StrangerR
Уже с Приветом
Posts: 38016
Joined: 14 Dec 2006 20:13
Location: USA

Re: Self hosted WEB API + HTTPS

Post by StrangerR »

У него еще веселее, он похоже зафайреволлил порт 80, иначе бы не получал таймаут.

А по сути все верно, нужно поднять нечто на порту 80 и это нечто должно попросту редиректить на https на порту 443, и все.
shadow7256
Уже с Приветом
Posts: 9392
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: Self hosted WEB API + HTTPS

Post by shadow7256 »

мой сервис слушает порт 7080. То есть URL выглядит как - https://address:7080/" onclick="window.open(this.href);return false;
XAOC
Уже с Приветом
Posts: 1657
Joined: 26 Jan 2006 20:42

Re: Self hosted WEB API + HTTPS

Post by XAOC »

shadow7256 wrote:мой сервис слушает порт 7080. То есть URL выглядит как - https://address:7080/" onclick="window.open(this.href);return false;
Если речь идет о https://address:7080" onclick="window.open(this.href);return false; vs http://address:7080" onclick="window.open(this.href);return false;, то не заниматесь ерундой. Оставляйте как есть. Никто не имплементирут то, что вы хотите. Я проверил с пяток сайтов на ssl, убрав S и указав 443 явно, все ведут себя так как вы описали.

Return to “Вопросы и новости IT”