আইআইএস 7 ওয়েব সার্ভারে HTTP স্ট্রাইক ট্রান্সপোর্ট সিকিউরিটি চালু করার সর্বোত্তম উপায় কী ?
আমি কি কেবল জিইউআইয়ের মাধ্যমে যথাযথ এইচটিটিপি রেসপন্স শিরোলেখ যুক্ত করতে পারি বা আমার অ্যাপ্লিকেশন সিএমডি ব্যবহার করা উচিত এবং যদি তাই হয় তবে কী স্যুইচ?
আইআইএস 7 ওয়েব সার্ভারে HTTP স্ট্রাইক ট্রান্সপোর্ট সিকিউরিটি চালু করার সর্বোত্তম উপায় কী ?
আমি কি কেবল জিইউআইয়ের মাধ্যমে যথাযথ এইচটিটিপি রেসপন্স শিরোলেখ যুক্ত করতে পারি বা আমার অ্যাপ্লিকেশন সিএমডি ব্যবহার করা উচিত এবং যদি তাই হয় তবে কী স্যুইচ?
উত্তর:
আইআইএসের প্রতিক্রিয়াগুলিতে কাস্টম শিরোনাম যুক্ত করার ক্ষমতা রয়েছে । এটি এটি সম্পর্কে সবচেয়ে সহজ উপায় বলে মনে হয়।
আইআইএসএন- র ডকুমেন্টেশন অনুসারে আপনি আইআইএস ম্যানেজারের মাধ্যমে এই শিরোনামগুলি যুক্ত করতে পারেন:
- সংযোগগুলি ফলকে, সেই সাইট, অ্যাপ্লিকেশন বা ডিরেক্টরিতে যান যার জন্য আপনি একটি কাস্টম এইচটিটিপি শিরোনাম সেট করতে চান।
- হোম ফলকে, HTTP প্রতিক্রিয়া শিরোনামগুলিতে ডাবল ক্লিক করুন।
- HTTP রেসপন্স শিরোনাম ফলকটিতে, ক্রিয়া ফলকটিতে যুক্ত করুন ... ক্লিক করুন।
- কাস্টম এইচটিটিপি রেসপন্স শিরোনাম যুক্ত করুন ডায়ালগ বাক্সে, আপনার কাস্টম শিরোনামের জন্য নাম এবং মান সেট করুন এবং তারপরে ওকে ক্লিক করুন।
এটি আমাদের এইচটিটিপি পুনঃনির্দেশ উভয়ই পরিচালনা করতে দেয় এবং একক আইআইএস সাইটের সাথে এইচটিটিপিএস প্রতিক্রিয়াগুলিতে কঠোর-পরিবহন-সুরক্ষা শিরোনাম যুক্ত করতে দেয় (ইউআরএল পুনর্লিখন মডিউল ইনস্টল করতে হবে):
<?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}{REQUEST_URI}"
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; includeSubDomains; preload" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
<action type="Rewrite" value="max-age=31536000 ;includeSubDomains; preload" />
পেতে
https://somedomain.com/https://somedomain.com/relatedpath
এবং ফলাফলটি ছেড়ে দেওয়া হয়েছে।
Voretaq7 এর উত্তর পরিপূরক করতে , আপনি ওয়েবকনফিগ ফাইলটিও ব্যবহার করতে পারেন (এনবি: কেবল এসএসএল সাইটগুলির জন্য ব্যবহার করতে, যেহেতু এটি এইচটিটিপি এবং এইচটিটিপিএস উভয় প্রতিক্রিয়াগুলির জন্য শিরোনাম যোগ করবে, যা আরএফসি 6797 স্পেসিফিকেশনের বিপরীতে রয়েছে, দয়া করে নীচের ব্যাখ্যাটি দেখুন) - নীচে একটি ব্লক যুক্ত করুন:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000"/>
</customHeaders>
</httpProtocol>
</system.webServer>
স্পষ্টতই, system.webServer
আপনার ওয়েবকনফিগটিতে ইতিমধ্যে আপনার একটি ব্লক থাকতে পারে , তাই এটিতে এটি যুক্ত করুন, যদি তা হয়। আমরা জিইউআইয়ের চেয়ে ওয়েবকনফাইগের জিনিসগুলি হ্যান্ডলিং করতে পছন্দ করি কারণ এর অর্থ কনফিগার পরিবর্তনগুলি আমাদের গিট সংগ্রহস্থলের প্রতি প্রতিশ্রুতিবদ্ধ হতে পারে।
গ্রেগ অ্যাস্কিউ উল্লিখিত হিসাবে আপনি যদি এইচটিটিপি-টু-এসএসএল পুনঃনির্দেশ পরিচালনা করতে চান, তবে আইআইএসে একটি পৃথক ওয়েবসাইটের সাহায্যে এটি করা আপনার পক্ষে আরও সহজ হতে পারে। কিছু ক্লায়েন্ট সাইটগুলির জন্য আমরা এসএসএল প্রয়োজনীয় এটি পরিচালনা করি। এই সাইটে কেবলমাত্র একটি এইচটিটিপি পুনর্নির্দেশ এবং কিছু তথ্য-প্রকাশের ফিক্স রয়েছে যা সমস্ত ওয়েবকনফাইগে রয়েছে:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" enableVersionHeader="false" />
</system.web>
<system.webServer>
<httpRedirect enabled="true" destination="https://www.domain.co.uk/"
httpResponseStatus="Permanent" />
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
<rewrite>
<outboundRules>
<rule name="Remove RESPONSE_Server">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
এটি বেশ কয়েকটি কারণে আমাদের পছন্দের সমাধান - আমরা সহজেই পুনঃনির্দেশিত ট্র্যাফিকটি আলাদাভাবে লগ করতে পারি (এটি ভিন্ন আইআইএস লগের মতো), এটি Global.asax.cs এ আরও কোড জড়িত না (আমাদের কোনও কোড নেই) সেখানে, যা কোনও আমব্রাকো সাইটের পক্ষে কিছুটা সুবিধাজনক) এবং গুরুত্বপূর্ণ, এর অর্থ এই যে সমস্ত কনফিগারেশন এখনও আমাদের জিআইটি রেপোতে রয়েছে।
যোগ করার জন্য সম্পাদিত: পরিষ্কার করা, অর্ডার দিয়ে পালন করার জন্য বোঝায় যা RFC 6797 , Strict-Transport-Security
কাস্টম হেডার না এনক্রিপ্ট না HTTP- র দ্বারা তৈরি অনুরোধ যোগ করা। আরএফসি 6797-অনুবর্তী হতে, আপনার আইআইএসে দুটি সাইট থাকা উচিত, আমি প্রথম কোড ব্লকের পরে বর্ণনা করেছি। ক্রিস যেমন উল্লেখ করেছেন, আরএফসি 6797 এর মধ্যে রয়েছে:
কোনও এইচএসটিএস হোস্টকে এইচটিটিপি হেডের ক্ষেত্রটি এইচটিটিপি-র সুরক্ষিত নিরাপদ পরিবহণের বিষয়ে দেওয়া প্রতিক্রিয়াগুলিতে অন্তর্ভুক্ত করা উচিত নয় ।
সুতরাং Strict-Transport-Security
একটি নন-এসএসএল অনুরোধের প্রতিক্রিয়া হিসাবে গ্রাহক শিরোনাম প্রেরণ স্পেসিফিকেশন মেনে চলবে না।
আপনি উল্লিখিত উইকিপিডিয়া লিঙ্কের উদাহরণটি ব্যবহার করব এবং সাইটের জন্য Global.asax এ ক্রিয়াকলাপটি করব। এটি অনুরোধটিকে কোনও https url এ পুনঃনির্দেশ সক্ষম করে এবং এরপরে প্রতিক্রিয়ার মধ্যে শিরোনামটি সন্নিবেশ করে।
এটি এইচটিএসটিএসের কারণে এটি কোনও https প্রতিক্রিয়াতে না থাকলে অবশ্যই তা উপেক্ষা করা উচিত।
protected void Application_BeginRequest()
{
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;
}
}
এটি এটির পক্ষে বেশ ব্যর্থ নিরাপদ উপায় বলে মনে হচ্ছে। গ্লোবাল.এক্সএক্সে এই কোডটি যুক্ত করুন - অ্যাপ্লিকেশন_বেগিনরেখা ইভেন্টটি Asp.net অনুরোধ লাইফসাইকে প্রথমে আগুন: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest(v=vs। 110) .aspx
প্রতিবেদন অনুসারে, HTTP অনুরোধগুলি অবশ্যই শিরোনামের সাথে প্রতিক্রিয়া জানাতে পারে না - সুতরাং এই কোডটি এটি কেবলমাত্র https অনুরোধগুলির জন্য যুক্ত করে। সর্বাধিক বয়স সেকেন্ডের সংখ্যায় হয় এবং এখানে সাধারণত একটি বড় মান রাখা ভাল ধারণা (IE - 31536000 ইঙ্গিত দেয় যে সাইটটি কেবলমাত্র পরবর্তী ৩5৫ দিনের জন্য এসএসএল চালাবে)
protected void Application_BeginRequest(Object sender, EventArgs e)
{
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;
}
}
ডগ উইলসনের দেওয়া উদাহরণ ব্যবহার করে আমি এইচটিটিপিএসে পুনঃনির্দেশের জন্য এবং এইচএসটিএস শিরোনাম যুক্ত করার জন্য url পুনর্লিখনের নিয়ম যুক্ত করতে নিম্নলিখিত দুটি পাওয়ারশেল ফাংশন তৈরি করেছি।
এগুলি উইন্ডোজ 2012 এবং উইন্ডোজ 2012 আর 2 এ পরীক্ষা করা হয়েছে।
আপনাকে যা করতে হবে তা হ'ল ওয়েবসাইটের নাম সরবরাহ করা। আপনি যদি ডিফল্ট পছন্দ না করেন তবে আপনি নিয়মগুলি nameচ্ছিকভাবে একটি আলাদা নাম দিতে পারেন।
একটি বিষয় লক্ষনীয় যে আমার পরীক্ষা থেকে সার্ভার ভেরিয়েবলগুলি প্রতিক্রিয়া শিরোনামে আসার আগে অনুমতি তালিকায় যুক্ত করা দরকার। ফাংশনগুলি আপনার জন্য এটি করে।
সম্পাদনা: HTTP- র শিরোলেখ জন্য URL লেখা উপর রেফারেন্স এখানে দেখুন http://www.iis.net/learn/extensions/url-rewrite-module/setting-http-request-headers-and-iis-server-variables
Function Add-HTTPSRedirectRewriteRule()
{
<#
.SYNOPSIS
This function is used to create a URL Rewrite Rule that redirects HTTP requests to HTTPS using a 301
RuleName is optional and will default to "Redirect to HTTPS"
.SYNTAX
Add-HTTPSRedirectRewriteRule -WebsiteName "www.mywebsite.com"
.EXAMPLES
Add-HTTPSRedirectRewriteRule -WebsiteName "www.mywebsite.com"
Add-HTTPSRedirectRewriteRule -WebsiteName "www.mywebsite.com" -RuleName "my rule name"
#>
[cmdletbinding(positionalbinding=$false)]
Param
(
[parameter(mandatory=$true)][String] [ValidateNotNullOrEmpty()] $WebsiteName,
[parameter(mandatory=$false)][String] $RuleName="Redirect to HTTPS"
)
Write-Verbose -Message "Creating the Url Rewrite rule ""$RuleName"" in website ""$WebsiteName"""
Remove-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location "$WebsiteName" -filter "system.webServer/rewrite/rules" -name "." -AtElement @{name="$RuleName"} -ErrorAction SilentlyContinue
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$WebsiteName" -filter "system.webServer/rewrite/rules" -name "." -value @{name="$RuleName";stopProcessing='True'}
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$WebsiteName" -filter "system.webServer/rewrite/rules/rule[@name='$RuleName']/match" -name "url" -value "(.*)"
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$WebsiteName" -filter "system.webServer/rewrite/rules/rule[@name='$RuleName']/conditions" -name "." -value @{input='{HTTPS}';pattern='off'}
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$WebsiteName" -filter "system.webServer/rewrite/rules/rule[@name='$RuleName']/action" -name "type" -value "Redirect"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$WebsiteName" -filter "system.webServer/rewrite/rules/rule[@name='$RuleName']/action" -name "url" -value "https://{HTTP_HOST}/{R:1}"
}
Function Add-HSTSHeaderRewriteRule()
{
<#
.SYNOPSIS
This function is used to create a URL Rewrite Rule that sets an HTTP Response Header for Strict-Transport-Security
when the protocol requested is HTTPS
RuleName is optional and will default to "Add Strict-Transport-Security header when request is HTTPS"
.SYNTAX
Add-HSTSHeaderRewriteRule -WebsiteName "www.mywebsite.com"
.EXAMPLES
Add-HSTSHeaderRewriteRule -WebsiteName "www.mywebsite.com"
Add-HSTSHeaderRewriteRule -WebsiteName "www.mywebsite.com" -RuleName "my rule name"
#>
[cmdletbinding(positionalbinding=$false)]
Param
(
[parameter(mandatory=$true)][String] [ValidateNotNullOrEmpty()] $WebsiteName,
[parameter(mandatory=$false)][String]$RuleName="Add Strict-Transport-Security header when request is HTTPS"
)
$serverVariable = "RESPONSE_Strict_Transport_Security"
Write-Verbose -Message "Creating the HSTS Header rule ""$RuleName"" in website ""$WebsiteName"""
Remove-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$WebsiteName" -filter "system.webServer/rewrite/allowedServerVariables" -name "." -AtElement @{name="$serverVariable"} -ErrorAction SilentlyContinue
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$WebsiteName" -filter "system.webServer/rewrite/allowedServerVariables" -name "." -value @{name="$serverVariable"}
Remove-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location "$WebsiteName" -name "." -filter "system.webServer/rewrite/outboundRules" -AtElement @{name="$RuleName"} -ErrorAction SilentlyContinue
Add-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location "$WebsiteName" -filter "system.webServer/rewrite/outboundRules" -name "." -value @{name="$RuleName"}
Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location "$WebsiteName" -filter "system.webServer/rewrite/outboundRules/rule[@name='$RuleName']/match" -name "serverVariable" -value $serverVariable
Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location "$WebsiteName" -filter "system.webServer/rewrite/outboundRules/rule[@name='$RuleName']/match" -name "pattern" -value ".*"
Add-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location "$WebsiteName" -filter "system.webServer/rewrite/outboundRules/rule[@name='$RuleName']/conditions" -name "." -value @{input='{HTTPS}';pattern='on'}
Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location "$WebsiteName" -filter "system.webServer/rewrite/outboundRules/rule[@name='$RuleName']/action" -name "type" -value "Rewrite"
Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -location "$WebsiteName" -filter "system.webServer/rewrite/outboundRules/rule[@name='$RuleName']/action" -name "value" -value "max-age=31536000"
}
এইচটিটিপি স্ট্রাইক ট্রান্সপোর্ট সিকিউরিটি আইআইএস মডিউলটির নির্মাতাদের মতে, কাস্টম শিরোনামটি খসড়া স্পেসিফিকেশন (আরএফসি 6797) এর সাথে সম্মতিযুক্ত নয়।
আইআইএস on-তে এইচএসটিএস চালু করার জন্য আপনাকে এই আইআইএস মডিউলটি ইনস্টল করতে হবে ।
আপডেট 26 অক্টোবর 2014 : নীচের মন্তব্যকারীকে ধন্যবাদ, আমি আবার মডিউল পৃষ্ঠাটি এবং বিশেষত সেই অংশটি পড়ি যা কাস্টম হেডার যুক্ত করার পরে মডিউলটির ব্যবহারকে ন্যায়সঙ্গত করে।
কোনও এইচএসটিএস হোস্টকে এইচটিটিপি হেডের ক্ষেত্রটি এইচটিটিপি-র সুরক্ষিত নিরাপদ পরিবহণের বিষয়ে দেওয়া প্রতিক্রিয়াগুলিতে অন্তর্ভুক্ত করা উচিত নয়।
আপনি যদি এইচডিটিপিএসে এবং এইচটিটিপি-তে না শিরোনামগুলি যুক্ত করার বিষয়ে নিশ্চিত হন তবে আপনার এই মডিউলটির প্রয়োজন নেই এবং আপনি ডগ উইলসনের উত্তরটি ব্যবহার করতে পারেন। ওউন ব্ল্যাকারের উত্তরটি ব্যবহার করবেন না কারণ এর https শর্ত নেই।
এটি ওয়েব.কনফাইগে নিম্নলিখিত ব্লক যুক্ত করে করা যেতে পারে:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name ="CustomName" value="MyCustomValue"/>
</customHeaders>
</httpProtocol>
</system.webServer>
আমাদের আইআইএসে কনফিগার করতে হবে যা প্রতিক্রিয়া জানাতে কাস্টম শিরোনামের ক্ষমতা রাখে:
কেবল যোগ করার জন্য, আমি মন্তব্যে 2 জন লোক 500 টি ত্রুটি সম্পর্কে কথা বলছি যখন আপনি এটি করেন। আমি এই ছিল।
আইআইএস-এ যদি আপনি 500 টি ত্রুটি পান তবে এটি হতে পারে কারণ আপনি শীর্ষ স্তরে নিয়মটি যুক্ত করেছেন, উত্তরাধিকার সূত্রে সেট করেছেন এবং সাইট স্তরে।
যেমন
Default Web Site <- here
Some Web Site <- here
আইআইএস / ব্রাউজার আপনার ত্রুটি পরিচালনা করার সেটিংস বিবেচনা না করেই আপনি কোনও কাজ করেছেন এমন কোনও তথ্য আপনাকে বলে মনে হচ্ছে না