web.config 파일을 사용하여 HTTPS를 강제 적용하는 방법
이에 대한 해결책을 찾기 위해 구글과 StackOverflow를 검색해봤지만 모두 ASP.NET 등과 관련이 있는 것 같습니다.
저는 보통 서버에서 Linux를 실행하지만 이 한 클라이언트에서는 IIS 7.5(및 Plesk 10)가 설치된 Windows를 사용합니다.이것이 제가 IIS와 web.config 파일에 약간 익숙하지 않은 이유입니다.인안.htaccess파일 다시 쓰기 조건을 사용하여 프로토콜이 HTTPS인지 여부를 탐지하고 그에 따라 리디렉션할 수 있습니다.web.config 파일을 사용하거나 내가 설치한 'URL 다시 쓰기' 모듈을 사용하여 이를 달성할 수 있는 간단한 방법이 있습니까?
저는 ASP.NET에 대한 경험이 없으므로 솔루션과 관련된 경우 구현 방법에 대한 명확한 단계를 포함해 주십시오.
제가 PHP가 아닌 web.config로 이 작업을 하는 이유는 사이트 내의 모든 자산에 HTTPS를 적용하고 싶기 때문입니다.
URL Rewrite 모듈이 필요합니다. 가급적이면 v2(v1이 설치되어 있지 않기 때문에 v1이 설치되어 있는지 보장할 수 없지만 v2에서 작동해야 합니다.
다음은 web.config의 예입니다. 모든 리소스에 대해 HTTPS를 적용합니다(301 영구 리디렉션 사용).
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
추신. 이 특정 솔루션은 URL 재작성 모듈만 사용하여 수행되므로 ASP.NET/PHP 또는 다른 기술과는 아무런 관련이 없습니다. 요청이 코드가 실행되는 지점에 도달하기 전에 초기/하위 수준 중 하나에서 처리됩니다.
ASP.NET MVC를 사용하는 경우.RequireHttpsAttribute를 사용하여 모든 응답을 HTTPS로 설정할 수 있습니다.
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
사이트 보안을 위해 수행해야 할 다른 작업:
위조 방지 토큰이 SSL/TLS를 사용하도록 강제 적용:
AntiForgeryConfig.RequireSsl = true;Web.config 파일을 변경하여 기본적으로 쿠키에 HTTPS가 필요합니다.
<system.web> <httpCookies httpOnlyCookies="true" requireSSL="true" /> </system.web>NWebSec을 사용합니다.NuGet 패키지를 Owin하고 사이트 전체에서 엄격한 전송 보안(HSTS)을 활성화하기 위해 다음 코드 줄을 추가합니다.아래에 사전 로드 지침을 추가하고 HSTS 사전 로드 사이트에 사이트를 제출하는 것을 잊지 마십시오.자세한 내용은 여기와 여기를 참조하십시오.OWIN을 사용하지 않는 경우 NWebSec 사이트에서 읽을 수 있는 Web.config 메서드가 있습니다.
// app is your OWIN IAppBuilder app in Startup.cs app.UseHsts(options => options.MaxAge(days: 720).Preload());NWebSec을 사용합니다.NuGet 패키지를 Owin하고 사이트 전체에서 공개 키 고정(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));사용되는 모든 URL에 https 구성을 포함합니다.일부 브라우저에서 구성표를 모방할 때 CSP(Content Security Policy) HTTP 헤더 및 SRI(Subresource Integrity)가 제대로 작동하지 않습니다.예를 들어 HTTPS에 대해 명시적으로 말하는 것이 좋습니다.
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js"> </script>ASP.NET MVC Bilerplate Visual Studio 프로젝트 템플릿을 사용하여 이 모든 것과 훨씬 더 많은 기능이 내장된 프로젝트를 생성할 수 있습니다.GitHub에서 코드를 볼 수도 있습니다.
LazyOne의 답변을 늘리기 위해, 여기 주석이 달린 답변 버전이 있습니다.
<rewrite>
<rules>
<clear />
<rule name="Redirect all requests to https" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action
type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}"
redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
이 서버에 이미 정의되어 있는 다른 모든 규칙을 지웁니다.새 규칙을 만들어 "모든 요청을 https로 리디렉션"이라는 이름을 지정합니다.이 규칙을 처리한 후에는 더 이상 규칙을 처리하지 마십시오!들어오는 모든 URL과 일치합니다.그런 다음 HTTPS가 꺼져 있다는 다른 조건이 모두 참인지 확인합니다.글쎄요, 그것은 단지 한 가지 조건일 뿐입니다(그러나 그것이 사실인지 확인하십시오).만약 그렇다면, 301 영구 리디렉션을 클라이언트로 다시 보냅니다.http://www.foobar.com/whatever?else=the#url-contains쿼리 문자열이 중복될 수 있으므로 쿼리 문자열을 끝에 추가하지 마십시오!
이것이 속성, 속성 및 일부 값의 의미입니다.
- clear를 선택하면 상속할 수 있는 모든 서버 규칙이 제거됩니다.
- 규칙은 규칙을 정의합니다.
- 규칙의 이름을 지정합니다(단, 고유한 이름임).
- 요청을 IIS 요청 파이프라인으로 즉시 전달할지 또는 추가 규칙을 먼저 처리할지 여부를 처리하는 중을 중지합니다.
- 이 규칙을 실행할 시기와 일치합니다.
- url URL을 평가하는 데 사용할 패턴
- 조건: 이 규칙을 실행할 시기에 대한 추가 조건. 조건은 처음에 일치하는 경우에만 처리됩니다.
- 논리적 모든 조건이 참이어야 하는지 여부 그룹화(
MatchAll중 ().MatchAnyvs OR. AND vs OR과 합니다.
- 논리적 모든 조건이 참이어야 하는지 여부 그룹화(
- add는 충족해야 하는 조건을 추가합니다.
- 조건이 평가 중인 입력을 입력합니다. 입력은 서버 변수일 수 있습니다.
- 입력을 평가하는 기준을 패턴화합니다.
- 대문자화 여부에 관계없이 ignoreCase.
- 조치 만약에 무엇을 할 것인가.
match그리고 그것들conditions모두 사실입니다.- 유형은 일반적으로 다음과 같을 수 있습니다.
redirect측) (클라이언트 측) 또는rewrite(서버 측). - url 이 규칙의 결과로 생성할 내용, 이 경우 연결
https://두 개의 서버 변수를 사용합니다. - redirect HTTP 리디렉션에서 사용할 항목을 입력합니다. 이 항목은 301 Permanent입니다.
- appendQueryString 결과의 끝에 쿼리 문자열을 추가할지 여부
url아니면 그렇지 않습니다; 이 경우, 우리는 그것을 거짓으로 설정하고 있습니다, 왜냐하면{REQUEST_URI}이미 포함되어 있습니다.
- 유형은 일반적으로 다음과 같을 수 있습니다.
서버 변수는 다음과 같습니다.
{HTTPS}어느 쪽인가 하면OFF또는ON.{HTTP_HOST}이라www.mysite.com,그리고.{REQUEST_URI}URI의 나머지 부분을 포함합니다./home?key=value- 브라우저가 처리합니다.
#fragment(LazyOne의 댓글 참조).
- 브라우저가 처리합니다.
참고 항목: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
수락된 답변은 저에게 효과가 없었습니다.저는 이 블로그의 단계를 따랐습니다.
제가 놓친 핵심은 IIS용 URL Rewrite Tool을 다운로드하여 설치해야 한다는 것이었습니다. 여기서 찾았어요.결과는 다음과 같습니다.
<rewrite>
<rules>
<remove name="Http to Https" />
<rule name="Http to Https" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<serverVariables />
<action type="Redirect" url="https://{HTTPS_HOST}{REQUEST_URI}" />
</rule>
</rules>
</rewrite>
.Net Core에서 https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl 의 지침을 따릅니다.
startup.cs 에서 다음을 추가합니다.
// Requires using Microsoft.AspNetCore.Mvc;
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});`enter code here`
Http를 Https로 리디렉션하려면 startup.cs 에 다음을 추가합니다.
// Requires using Microsoft.AspNetCore.Rewrite;
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
var options = new RewriteOptions()
.AddRedirectToHttps();
app.UseRewriter(options);
우수한 NWebsec 라이브러리는 다음을 사용하여 HTTP에서 HTTPS로 요청을 업그레이드할 수 있습니다.upgrade-insecure-requests내 태그Web.config:
<nwebsec>
<httpHeaderSecurityModule>
<securityHttpHeaders>
<content-Security-Policy enabled="true">
<upgrade-insecure-requests enabled="true" />
</content-Security-Policy>
</securityHttpHeaders>
</httpHeaderSecurityModule>
</nwebsec>
저는 아래 코드를 사용하고 있으며 저에게 완벽하게 적용됩니다. 도움이 되길 바랍니다.
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Force redirect to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
제 환경에서 URL Rewrite를 설치할 수 없어서 다른 경로를 찾았습니다.
이것을 내 web.config에 추가하면 다시 쓰기 오류가 추가되고 IIS 7.5에서 작동합니다.
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="C:\WebSites\yoursite\" >
<remove statusCode="403" subStatusCode="4" />
<error statusCode="403" subStatusCode="4" responseMode="File" path="redirectToHttps.html" />
</httpErrors>
그러면 여기에 있는 조언에 따라 https://www.sslshopper.com/iis7-redirect-http-to-https.html .
SSL을 요구하도록 IIS 웹 사이트를 구성하고 403(금지됨) 오류 시 리디렉션(redirectToHttps.html)을 수행하는 html 파일을 만들었습니다.
<html>
<head><title>Redirecting...</title></head>
<script language="JavaScript">
function redirectHttpToHttps()
{
var httpURL= window.location.hostname + window.location.pathname + window.location.search;
var httpsURL= "https://" + httpURL;
window.location = httpsURL;
}
redirectHttpToHttps();
</script>
<body>
</body>
</html>
다른 곳에서는 모든 조각을 한 곳에서 찾을 수 없었기 때문에 누군가 이것을 유용하게 찾았으면 좋겠습니다.
AWS에서 애플리케이션 로드 밸런서와 함께 IIS 10을 사용하는 경우 아래와 같이 리디렉션을 구성해야 합니다.
<rule name="Force HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_X_Forwarded_Proto}" pattern="^https$" negate="true" />
<add input="{HTTP_HOST}" pattern="^(www\.)?dname\.com$" />
</conditions>
<action type="Redirect" url="https://www.dname.com{REQUEST_URI}" />
</rule>
하위 도메인 리디렉션이 있는 경우 아래를 사용하십시오.
<!--START REDIRECT TO HTTPS-->
<rule name="Force HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_X_Forwarded_Proto}" pattern="^https$" negate="true" />
<add input="{HTTP_HOST}" pattern="subdomain\.domain\.com$" />
</conditions>
<action type="Redirect" url="https://subdomain.domain.com{REQUEST_URI}" />
</rule>
<!--END REDIRECT TO HTTPS-->
간단한 방법은 IIS에 HTTP 요청에 대한 사용자 정의 오류 파일을 보내도록 지시하는 것입니다.그런 다음 파일에 메타 리디렉션, JavaScript 리디렉션 및 링크가 포함된 명령 등이 포함될 수 있습니다.중요한 것은 사이트(또는 폴더)에 대해 "SSL 필요"를 계속 선택할 수 있다는 것입니다.
</configuration>
</system.webServer>
<httpErrors>
<clear/>
<!--redirect if connected without SSL-->
<error statusCode="403" subStatusCode="4" path="errors\403.4_requiressl.html" responseMode="File"/>
</httpErrors>
</system.webServer>
</configuration>
언급URL : https://stackoverflow.com/questions/9823010/how-to-force-https-using-a-web-config-file
'programing' 카테고리의 다른 글
| Android 기본 사항: UI 스레드에서 코드 실행 (0) | 2023.06.03 |
|---|---|
| 포드 설정을 실행하면 "잘못된 통역사:해당 파일 또는 디렉터리 없음" 오류 (0) | 2023.06.03 |
| wpf 창에 사용자 컨트롤 추가 (0) | 2023.06.03 |
| UI 이미지를 가져와서 검은색 테두리를 지정하려면 어떻게 해야 합니까? (0) | 2023.06.03 |
| Android: 키보드 입력 버튼을 "검색"이라고 말하고 클릭을 처리하는 방법은 무엇입니까? (0) | 2023.06.03 |