एक पूरी साइट के लिए https मजबूर करने के लिए asp.net में सबसे अच्छा तरीका है?


192

लगभग 6 महीने पहले मैंने एक ऐसी साइट निकाली, जहाँ हर अनुरोध पर https होना चाहिए। उस समय मुझे यह सुनिश्चित करने के लिए एक ही रास्ता मिल गया था कि पृष्ठ पर हर अनुरोध https खत्म हो गया था, उसे पृष्ठ लोड घटना में जांचना था। यदि अनुरोध http से अधिक नहीं था, तो मैं प्रतिसाद दे दूंगा। अप्रत्यक्ष (" https://example.com ")

वहाँ एक बेहतर तरीका है - आदर्श web.config में कुछ सेटिंग?


मेरे जवाब की जाँच करें यहाँ stackoverflow.com/questions/33882350/…
Shady Sherif

जवाबों:


250

कृपया HSTS (HTTP सख्त परिवहन सुरक्षा) का उपयोग करें

से http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
                        redirectType="Permanent" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
                    <match serverVariable="RESPONSE_Strict_Transport_Security"
                        pattern=".*" />
                    <conditions>
                        <add input="{HTTPS}" pattern="on" ignoreCase="true" />
                    </conditions>
                    <action type="Rewrite" value="max-age=31536000" />
                </rule>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

मूल उत्तर (4 दिसंबर 2015 को उपरोक्त के साथ प्रतिस्थापित)

मूल रूप से

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   if (HttpContext.Current.Request.IsSecureConnection.Equals(false) && HttpContext.Current.Request.IsLocal.Equals(false))
   {
    Response.Redirect("https://" + Request.ServerVariables["HTTP_HOST"]
+   HttpContext.Current.Request.RawUrl);
   }
}

यह Global.asax.cs (या global.asax.vb) में जाएगा

मैं web.config में इसे निर्दिष्ट करने का एक तरीका नहीं जानता


7
यह काम करता है, लेकिन यह मेरे लिए खतरनाक था: जब मैंने वीएस 2010 में स्थानीय रूप से इस कोड को चलाने का प्रयास किया, तो मेरा स्टार्ट पेज कभी लोड नहीं हुआ; इसके बजाय, मुझे सिर्फ एक "यह वेबपृष्ठ उपलब्ध नहीं है" संदेश मिला। ठीक करने के लिए, मैंने परीक्षण के लिए दूसरी शर्त जोड़ी कि अगर url में "लोकलहोस्ट" स्ट्रिंग शामिल है: यदि ऐसा नहीं होता है, तो https को बाध्य करें।
mg1075

3
यह मुझे एक अनुप्रेषित लूप दे रहा है। इससे पहले कि मैं कोड जोड़ा यह ठीक काम किया। कोई सुझाव?
जो

9
कृपया ध्यान दें कि यह कोई भी उपयोगी सुरक्षा प्रदान नहीं करता है। वास्तव में, यह केवल उन उपयोगकर्ताओं के कनेक्शन सुरक्षित करेगा जो पहले से ही सुरक्षित हैं, और उन लोगों को सुरक्षित करने में विफल होंगे जो हमला कर रहे हैं (यह इसलिए है क्योंकि एक MITM केवल पुनर्निर्देशन को पूरी तरह से छोड़ सकता है और आपकी "सुरक्षित" साइट पर सब कुछ अग्रेषित कर सकता है)। IMHO, पुनर्निर्देशित उपयोगकर्ता एजेंटों को सिर्फ अच्छा-अच्छा वूडू सुरक्षा है, और कभी-कभी सुरक्षा का खतरनाक भ्रम प्रदान करता है। जाने का एकमात्र तरीका उपयोगकर्ता एजेंटों को केवल सुरक्षित संसाधनों के लिए अनुरोध करना है, न कि उन्हें पुनर्निर्देशित करना। यह एचएसटीएस क्या करता है - नीचे दिए गए उत्तर देखें।
tne

2
इस उत्तर को 'हानिकारक' माना जाना चाहिए और इसका उपयोग नहीं किया जाना चाहिए। ऊपर @tne द्वारा टिप्पणी के अनुसार।
रोजी कासिम

2
@RosdiKasim क्या इस उत्तर को अभी भी हानिकारक माना जाना चाहिए क्योंकि 4 दिसंबर 15 को संपादित किया गया है?
एंड्रयू मॉर्टन

123

दूसरी चीज जो आप कर सकते हैं वह है ब्राउज़र के "स्ट्रिक्ट-ट्रांसपोर्ट-सिक्योरिटी" हेडर को वापस करके एचएसटीएस का उपयोग करना । ब्राउज़र को इसका समर्थन करना होगा (और वर्तमान में, यह मुख्य रूप से क्रोम और फ़ायरफ़ॉक्स है जो करते हैं), लेकिन इसका मतलब है कि एक बार सेट होने पर, ब्राउज़र HTTP पर साइट पर अनुरोध नहीं करेगा और इसके बजाय उन्हें जारी करने से पहले HTTPS अनुरोधों का अनुवाद करेगा। । HTTP से रीडायरेक्ट के साथ संयोजन में इसे आज़माएँ:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
  switch (Request.Url.Scheme)
  {
    case "https":
      Response.AddHeader("Strict-Transport-Security", "max-age=300");
      break;
    case "http":
      var path = "https://" + Request.Url.Host + Request.Url.PathAndQuery;
      Response.Status = "301 Moved Permanently";
      Response.AddHeader("Location", path);
      break;
  }
}

जिन ब्राउज़रों को HSTS की जानकारी नहीं है वे सिर्फ हेडर को अनदेखा करेंगे लेकिन फिर भी स्विच स्टेटमेंट द्वारा पकड़े जाएंगे और HTTPS को भेजे जाएंगे।


6
HSTS हेडर के बारे में पहले कभी नहीं सुना, लेकिन बहुत अच्छा लग रहा है। क्या इस तरह के छोटे-से-अधिकतम मूल्य (5 मिनट) का उपयोग करने का कोई कारण है? विकिपीडिया लेख जिसे आप एक बड़े मूल्य (6-12 महीने) में स्थापित करने के सुझाव से जोड़ते हैं।
दान

5
+1। ट्रॉय के ब्लॉग पर इस बहुत व्यापक लेख को देखें, जिसमें इस बात का विवरण शामिल है कि केवल रीडायरेक्ट का उपयोग करने से सुरक्षा को कम क्यों किया जा सकता है। संकेत: यह आपको अन्य चीजों के अलावा एसएसएल स्ट्रिप टूल के लिए असुरक्षित बना सकता है। troyhunt.com/2011/11/…
ओरान डेनिसन 20

3
इसके अलावा NWebsec की जाँच करने के लायक है , जो इसे (और अधिक) बहुत आसान बनाता है।
टिसन टी।

16
आप स्विच को लपेटना चाहते हैं, if(!Request.IsLocal)ताकि यह डीबगिंग को न तोड़े।
जस्टिन जे स्टार्क

1
अच्छा उत्तर। एक सूक्ष्मता - Http हेडर ("स्ट्रक्ट-ट्रांसपोर्ट-सिक्योरिटी") के लिए NWebSec जैसी लाइब्रेरी का उपयोग करना बेहतर है क्योंकि कई विकल्प हैं जो कॉन्फ़िगरेशन के एक स्थान पर केंद्रित होते हैं, बल्कि फिर यहां और वहां फैल जाते हैं।
ओग्यान दिमित्रोव

89

IIS7 मॉड्यूल आपको पुनर्निर्देशित करेगा।

    <rewrite>
        <rules>
            <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
                <match url="(.*)"/>
                <conditions>
                    <add input="{HTTPS}" pattern="^OFF$"/>
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>
            </rule>
        </rules>
    </rewrite>

12
इसके अलावा, IIS 7.0 के लिए, आपको
क्रिस

मैंने इस लिंक को केवल https अनुरोधों को स्वीकार करने के लिए किसी विशेष पेज को बनाने में सरल और सहायक पाया - support.microsoft.com/kb/239875
मानिक अरोरा

21

ASP.NET MVC का उपयोग करने वालों के लिए। आप निम्न तरीकों से पूरी साइट पर HTTPS पर SSL / TLS को लागू करने के लिए निम्नलिखित का उपयोग कर सकते हैं:

मुश्किल रास्ता

1 - वैश्विक फ़िल्टर्स में आवश्यकताएँ जोड़ें के साथ योगदान करें:

GlobalFilters.Filters.Add(new RequireHttpsAttribute());

2 - एसएसएल / टीएलएस का उपयोग करने के लिए फोर्स एंटी-फोर्जरी टोकन:

AntiForgeryConfig.RequireSsl = true;

3 - Web.config फ़ाइल को बदलकर डिफ़ॉल्ट रूप से HTTPS के लिए कुकीज़ की आवश्यकता होती है:

<system.web>
    <httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>

4 - NWebSec.Owin NuGet पैकेज का उपयोग करें और साइट के पार सख्त परिवहन सुरक्षा को सक्षम करने के लिए कोड की निम्नलिखित पंक्ति जोड़ें। नीचे दिए गए प्रीलोड निर्देश को जोड़ना न भूलें और अपनी साइट को एचएसटीएस प्रीलोड साइट पर जमा करें । अधिक जानकारी यहाँ और यहाँ । ध्यान दें कि यदि आप OWIN का उपयोग नहीं कर रहे हैं, तो एक Web.config विधि है जिसे आप NWebSec साइट पर पढ़ सकते हैं ।

// app is your OWIN IAppBuilder app in Startup.cs
app.UseHsts(options => options.MaxAge(days: 30).Preload());

5 - NWebSec.Owin NuGet पैकेज का उपयोग करें और साइट पर सार्वजनिक कुंजी पिनिंग (HPKP) को सक्षम करने के लिए कोड की निम्नलिखित पंक्ति जोड़ें। अधिक जानकारी यहाँ और यहाँ

// app is your OWIN IAppBuilder app in Startup.cs
app.UseHpkp(options => options
    .Sha256Pins(
        "Base64 encoded SHA-256 hash of your first certificate e.g. cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=",
        "Base64 encoded SHA-256 hash of your second backup certificate e.g. M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=")
    .MaxAge(days: 30));

6 - किसी भी URL के इस्तेमाल में https स्कीम शामिल करें। जब आप कुछ ब्राउज़रों में स्कीम की नकल करते हैं तो कंटेंट सिक्योरिटी पॉलिसी (CSP) HTTP हेडर और सबसोर्स इंटीग्रिटी (SRI) अच्छा नहीं खेलता है। HTTPS के बारे में स्पष्ट होना बेहतर है। जैसे

<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js"></script>

आसान तरीका

इस सब के साथ एक परियोजना उत्पन्न करने के लिए ASP.NET MVC बॉयलरप्लेट विज़ुअल स्टूडियो प्रोजेक्ट टेम्पलेट का उपयोग करें और बहुत अधिक बिल्ट इन। आप GitHub पर कोड भी देख सकते हैं ।


3
इसके अलावा यदि उपयोग कर रहे हैं <authentication mode="Forms">, तो आपके अंदर होना चाहिए<forms requireSSL="true">
प्लूटो

1
@ muhammad-rehan-saeed मैं mvc5 बॉयलरप्लेट का उपयोग कर रहा हूं, लेकिन साइट http से https को स्वचालित रूप से उत्पादन सर्वर पर पुनर्निर्देशित नहीं करता है, इसलिए यह केवल स्थानीयहोस्ट पर ऐसा करता है क्या मुझे कुछ याद आ रहा है?
दीव

यह सवाल पूछने का सही मंच नहीं है। GitHub साइट पर एक समस्या पोस्ट करें। RequireHttpsAttributeरीडायरेक्ट करता है। जब तक आपके पास यह है कि यह ठीक होना चाहिए।
मुहम्मद रेहान सईद

@MuhammadRehanSaeed, अपने जवाब से प्यार करें। लेकिन ... मुझे MakeCert के साथ बनाए गए प्रमाणपत्र का SHA256 हैश कैसे मिलेगा? मेरे पास एक SHA-1 थंबप्रिंट है ... क्या आपको पता है?
डायना

1
@ डायना यह लिंक आपको दिखा सकती है कि कैसे।
मुहम्मद रेहान सईद

13

यदि आप इसे किसी कारण से IIS में सेट करने में असमर्थ हैं, तो मैं एक HTTP मॉड्यूल बनाऊंगा जो आपके लिए रीडायरेक्ट करता है:

using System;
using System.Web;

namespace HttpsOnly
{
    /// <summary>
    /// Redirects the Request to HTTPS if it comes in on an insecure channel.
    /// </summary>
    public class HttpsOnlyModule : IHttpModule
    {
        public void Init(HttpApplication app)
        {
            // Note we cannot trust IsSecureConnection when 
            // in a webfarm, because usually only the load balancer 
            // will come in on a secure port the request will be then 
            // internally redirected to local machine on a specified port.

            // Move this to a config file, if your behind a farm, 
            // set this to the local port used internally.
            int specialPort = 443;

            if (!app.Context.Request.IsSecureConnection 
               || app.Context.Request.Url.Port != specialPort)
            {
               app.Context.Response.Redirect("https://" 
                  + app.Context.Request.ServerVariables["HTTP_HOST"] 
                  + app.Context.Request.RawUrl);    
            }
        }

        public void Dispose()
        {
            // Needed for IHttpModule
        }
    }
}

फिर इसे एक DLL में संकलित करें, इसे अपनी परियोजना के संदर्भ के रूप में जोड़ें और इसे web.config में रखें:

 <httpModules>
      <add name="HttpsOnlyModule" type="HttpsOnly.HttpsOnlyModule, HttpsOnly" />
 </httpModules>

ऐसा लगता है कि वैश्विकता में इसे चिपकाने की तुलना में यह अधिक शामिल है - सिर्फ जिज्ञासु, क्या कोई फायदा है?
ब्रायन मैकके

1
इसका फायदा यह होगा, जब आप इसका उपयोग नहीं करना चाहते हैं, तो बस अपने web.config में मॉड्यूल पर टिप्पणी करें। यह समाधान है , जबकि अन्य नहीं है, विन्यास।
बॉब यैक्ले

2
मैं थोड़ा उलझन में हूं। मुझे उम्मीद है app.BeginRequest += new OnBeginRequest;कि Initविधि में कुछ ऐसा OnBeginRequestहोगा और इसमें वर्तमान Initपद्धति शामिल होगी। क्या आप सुनिश्चित हैं कि यह मॉड्यूल उम्मीद के मुताबिक काम करता है?
जैकब cturc

यह काम नहीं करता। आपको OnBeginRequest इवेंट आदि को जोड़ने की आवश्यकता है, फिर यह काम करता है।
SnAzBaZ

मैं इस दोषपूर्ण कोड को संपादित करूंगा, लेकिन इसे सुरक्षित बनाने के लिए आपको HSTS का उपयोग करना होगा। बस ट्रॉय हंट के जवाब के साथ जाएं और इसे एक मॉड्यूल बनाएं; देख support.microsoft.com/en-us/kb/307996 (एक oldie, लेकिन goodie)।
मार्क एल।

4

आपको क्या करने की आवश्यकता है:

1) नीचे की तरह उत्पादन या मंच सर्वर के आधार पर web.config के अंदर एक कुंजी जोड़ें

<add key="HttpsServer" value="stage"/>
             or
<add key="HttpsServer" value="prod"/>

2) अपने Global.asax फ़ाइल के अंदर विधि नीचे जोड़ें।

void Application_BeginRequest(Object sender, EventArgs e)
{
    //if (ConfigurationManager.AppSettings["HttpsServer"].ToString() == "prod")
    if (ConfigurationManager.AppSettings["HttpsServer"].ToString() == "stage")
    {
        if (!HttpContext.Current.Request.IsSecureConnection)
        {
            if (!Request.Url.GetLeftPart(UriPartial.Authority).Contains("www"))
            {
                HttpContext.Current.Response.Redirect(
                    Request.Url.GetLeftPart(UriPartial.Authority).Replace("http://", "https://www."), true);
            }
            else
            {
                HttpContext.Current.Response.Redirect(
                    Request.Url.GetLeftPart(UriPartial.Authority).Replace("http://", "https://"), true);
            }
        }
    }
}

3

यदि आपकी साइट में SSL समर्थन कॉन्फ़िगर करने योग्य नहीं है (यानी, https को चालू / बंद करने में सक्षम होना चाहिए) - आप जिस भी नियंत्रक / नियंत्रक कार्रवाई को सुरक्षित करना चाहते हैं, उस पर [आवश्यकताएँ] विशेषता का उपयोग कर सकते हैं।


2

यह आपके बैलेंसर के ब्रांड पर भी निर्भर करता है, वेब मक्स के लिए, आपको यह जानने के लिए http हैडर की तलाश करनी होगी X-WebMux-SSL-termination: trueकि आने वाला ट्रैफिक एसएसएल था। यहाँ विवरण: http://www.cainetworks.com/support/redirect2ssl.html


2

ऊपर @Joe के लिए, "यह मुझे एक अनुप्रेषित लूप दे रहा है। इससे पहले कि मैंने कोड जोड़ा यह ठीक काम करता है। कोई सुझाव? - 4:13 बजे जो 8 नवंबर '11

यह मेरे साथ भी हो रहा था और मेरा मानना ​​है कि ऐसा हो रहा था कि वेब सर्वर के सामने एसएसएल अनुरोध को लोड करने वाला एक बैलेंसर था। इसलिए, मेरी वेब साइट हमेशा "http" अनुरोध को सोच रही थी, भले ही मूल ब्राउज़र ने "https" होने का अनुरोध किया हो।

मैं मानता हूं कि यह थोड़ा हैकैपी है, लेकिन मेरे लिए जो काम किया गया था वह "जस्टरेडायरेक्टेड" प्रॉपर्टी को लागू करने के लिए था जिसे मैं समझ सकता था कि व्यक्ति पहले से ही एक बार रीडायरेक्ट हो गया था। इसलिए, मैं उन विशिष्ट स्थितियों के लिए परीक्षण करता हूं जो पुनर्निर्देशित को वारंट करती हैं और, यदि वे मिलते हैं, तो मैं इस संपत्ति (सत्र में संग्रहीत मूल्य) को पुनर्निर्देशन से पहले सेट करता हूं। भले ही पुनर्निर्देशन के लिए http / https स्थितियां दूसरी बार मिलें, मैं पुनर्निर्देशन तर्क को दरकिनार कर देता हूं और "JustRedirected" सत्र मान को गलत पर रीसेट करता हूं। आपको अपने सशर्त परीक्षण तर्क की आवश्यकता होगी, लेकिन यहां संपत्ति का एक सरल कार्यान्वयन है:

    public bool JustRedirected
    {
        get
        {
            if (Session[RosadaConst.JUSTREDIRECTED] == null)
                return false;

            return (bool)Session[RosadaConst.JUSTREDIRECTED];
        }
        set
        {
            Session[RosadaConst.JUSTREDIRECTED] = value;
        }
    }

2

मैं अपने दो सेंट फेंकने जा रहा हूं। यदि आपके पास IIS सर्वर की पहुंच है, तो आप प्रोटोकॉल बाइंडिंग के उपयोग से HTTPS को बाध्य कर सकते हैं। उदाहरण के लिए, आपके पास Blah नाम की एक वेबसाइट है । IIS में आप दो साइट सेटअप करेंगे: ब्ला , और ब्लाह (रीडायरेक्ट) । के लिए ब्ला केवल कॉन्फ़िगर HTTPSबंधन (और FTPआप अच्छी तरह से किसी सुरक्षित कनेक्शन पर यह मजबूर करने के लिए, यह सुनिश्चित कर लें की जरूरत है)। के लिए ब्ला (पुनर्निर्देशन) केवल कॉन्फ़िगर HTTPबंधन। अंत में, ब्लाह (पुनर्निर्देशन) के लिए HTTP रीडायरेक्ट सेक्शन में 301 रीडायरेक्ट को पर सेट करना सुनिश्चित करेंhttps://blah.com सटीक गंतव्य के साथ । सुनिश्चित करें कि IIS की प्रत्येक साइट इसकी ओर इशारा कर रही हैस्वयं रूट फ़ोल्डर अन्यथा Web.configसभी खराब हो जाएगा। यह भी सुनिश्चित करें कि HSTSआपके HTTPSed साइट पर कॉन्फ़िगर किया गया है ताकि ब्राउज़र द्वारा बाद के अनुरोध हमेशा HTTPS के लिए मजबूर हो और कोई पुनर्निर्देशन न हो।


2

यह एक पूर्ण उत्तर है जो @ ट्रॉय हंट्स पर आधारित है। इस फ़ंक्शन को अपनी WebApplicationकक्षा में जोड़ें Global.asax.cs:

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        // Allow https pages in debugging
        if (Request.IsLocal)
        {
            if (Request.Url.Scheme == "http")
            {
                int localSslPort = 44362; // Your local IIS port for HTTPS

                var path = "https://" + Request.Url.Host + ":" + localSslPort + Request.Url.PathAndQuery;

                Response.Status = "301 Moved Permanently";
                Response.AddHeader("Location", path);
            }
        }
        else
        {
            switch (Request.Url.Scheme)
            {
                case "https":
                    Response.AddHeader("Strict-Transport-Security", "max-age=31536000");
                    break;
                case "http":
                    var path = "https://" + Request.Url.Host + Request.Url.PathAndQuery;
                    Response.Status = "301 Moved Permanently";
                    Response.AddHeader("Location", path);
                    break;
            }
        }
    }

(अपने स्थानीय बिल्ड पर एसएसएल को सक्षम करने के लिए प्रोजेक्ट के लिए गुण गोदी में सक्षम करें)


1

-> सार्वजनिक वर्ग के शीर्ष पर बस ADD [आवश्यकताएँ] गृह नियंत्रक: नियंत्रक।

-> और GlobalFilters.Filters.Add (नई आवश्यकताएं जोड़ें) को वितरित करें ()); Global.asax.cs फ़ाइल में 'संरक्षित शून्य Application_Start ()' विधि।

जो आपके संपूर्ण एप्लिकेशन को HTTPS के लिए मजबूर करता है।


मुझे विश्वास नहीं है कि यह WebForms या WebAPI के साथ बनाए गए किसी भी APIs का उपयोग करते हुए किसी भी पेज के लिए काम करेगा। यह केवल एमवीसी नियंत्रकों को कवर करेगा।
मार्क एल।

1

मैंने कुछ समय सर्वश्रेष्ठ अभ्यास की तलाश में बिताया जो समझ में आता है और निम्नलिखित पाया जो मेरे लिए पूर्णता का काम करता है। मुझे उम्मीद है कि यह आपको कुछ समय बचाएगा।

का उपयोग करते हुए विन्यास फाइल (उदाहरण के लिए एक asp.net वेबसाइट) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and- उच्च /

या अपने स्वयं के सर्वर https://www.sslshopper.com/iis7-redirect-http-to-https.html पर

[लघु उत्तर] बस नीचे दिए गए कोड के अंदर चला जाता है

<system.webServer> 
 <rewrite>
     <rules>
       <rule name="HTTP/S to HTTPS Redirect" enabled="true" 
           stopProcessing="true">
       <match url="(.*)" />
        <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
       </conditions>
       <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
        redirectType="Permanent" />
        </rule>
       </rules>
 </rewrite>

1

IIS10 (विंडोज 10 और सर्वर 2016) में, संस्करण 1709 से, वेबसाइट के लिए HSTS को सक्षम करने के लिए एक नया, सरल विकल्प है।

Microsoft यहां नए दृष्टिकोण के फायदों का वर्णन करता है , और प्रोग्राम को व्यावहारिक रूप से लागू करने या सीधे सीधे ApplicationHost.config फ़ाइल (जो web.config की तरह है) को संपादित करने के कई अलग-अलग उदाहरण प्रदान करता है, लेकिन व्यक्तिगत स्तर के बजाय IIS स्तर पर संचालित होता है। )। ApplicationHost.config C: \ Windows \ System32 \ inetsrv \ config में पाया जा सकता है।

मैंने लिंक रोट से बचने के लिए यहां दो उदाहरण विधियों की रूपरेखा तैयार की है।

विधि 1 - सीधे ApplicationHost.config फ़ाइल संपादित करें <site>टैग के बीच , इस पंक्ति को जोड़ें:

<hsts enabled="true" max-age="31536000" includeSubDomains="true" redirectHttpToHttps="true" />

विधि 2 - कमांड लाइन: एक उन्नत कमांड प्रॉम्प्ट (यानी सीएमडी पर दाएं माउस और व्यवस्थापक के रूप में चलाएं) से निम्नलिखित को निष्पादित करें। अपनी साइट के नाम के साथ कॉन्टोसो को स्वैप करना याद रखें जैसा कि यह IIS प्रबंधक में दिखाई देता है।

c:
cd C:\WINDOWS\system32\inetsrv\
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.enabled:True" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.max-age:31536000" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.includeSubDomains:True" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites "/[name='Contoso'].hsts.redirectHttpToHttps:True" /commit:apphost

यदि आप एक सीमित वातावरण में हैं जहाँ आपके पास सीमित पहुँच है, तो Microsoft द्वारा उस लेख में दिए गए अन्य तरीके बेहतर विकल्प हो सकते हैं।

ध्यान रखें कि IIS10 संस्करण 1709 अब विंडोज 10 पर उपलब्ध है, लेकिन विंडोज सर्वर 2016 के लिए यह एक अलग रिलीज ट्रैक पर है, और इसे पैच या सर्विस पैक के रूप में जारी नहीं किया जाएगा। 1709 के विवरण के लिए यहां देखें ।


0

यदि आप ASP.NET Core का उपयोग कर रहे हैं, तो आप nuget पैकेज SaidOut.AspNetCore.HttpsWithStrictTransportSecurity को आज़मा सकते हैं।

फिर आपको केवल जोड़ना होगा

app.UseHttpsWithHsts(HttpsMode.AllowedRedirectForGet, configureRoutes: routeAction);

यह https स्कीम का उपयोग करके किए गए सभी अनुरोधों में HTTP StrictTransportSecurity हैडर भी जोड़ देगा।

उदाहरण कोड और प्रलेखन https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.