私はこれを解決するためにGoogleとStackOverflowを検索しましたが、それらはすべてASP.NETなどに関連しているようです。
私はたいてい私のサーバー上でLinuxを走らせていますが、この一つのクライアントのために私はIIS 7.5(そしてPlesk 10)でWindowsを使っています。これが、私がIISおよびweb.configに少し慣れていないファイルである理由です。 .htaccess
ファイルでは、書き換え条件を使用してプロトコルがHTTPSかどうかを検出し、それに応じてリダイレクトできます。 web.configファイルを使ってこれを実現する単純な方法、あるいは私がインストールした 'RL Rewrite'モジュールを使うことさえありますか?
私は持っていますASP.NETの経験はありませんそのため、これが解決策に関わっている場合は、実装方法の明確な手順を含めてください。
Web.configとnot PHPを使ってこれを行うのは、サイト内のすべてのアセットにHTTPSを強制したいからです。
URL Rewriteモジュール、できればv2が必要です(私はv1をインストールしていないので、そこで動作することを保証できませんが、そうするべきです)。
これはそのような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>
PS URLリライティングモジュールのみを使用しているため、この特定のソリューションはASP.NET/PHPやその他のテクノロジとは関係ありません - リクエストの前に、初期レベルまたは下位レベルのいずれかで処理されます。あなたのコードが実行されるポイントに到達します。
ASP.NET MVCを使用している人のために。すべての応答をHTTPSにするには、RequireHttpsAttributeを使用します。
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
あなたのサイトを安全にするためにあなたがしたいと思うかもしれない他のこと:
偽造防止トークンにSSL/TLSの使用を強制します。
AntiForgeryConfig.RequireSsl = true;
Web.configファイルを変更して、デフォルトでCookieがHTTPSを要求するようにします。
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>
NWebSec.OwinNuGetパッケージを使用して、サイト全体で厳密なトランスポートセキュリティ(HSTS)を有効にする次のコード行を追加します。以下にPreloadディレクティブを追加して、あなたのサイトを HSTS Preloadサイト に送信することを忘れないでください。さらに詳しい情報 こちら および こちら 。 OWINを使用していない場合は、 NWebSec のサイトで確認できるWeb.configメソッドがあります。
// app is your OWIN IAppBuilder app in Startup.cs
app.UseHsts(options => options.MaxAge(days: 720).Preload());
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));
使用されているURLにhttpsスキームを含めます。 Content Security Policy(CSP) HTTPヘッダーおよび Subresource Integrity(SRI) 一部のブラウザでこの方式を模倣すると、うまく動作しません。 HTTPSについてはっきりと述べたほうがよいでしょう。例えば.
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js">
</script>
ASP.NET MVC Boilerplate 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は消えます。まあ、それはただ一つの条件です(しかしそれが本当であることを確認してください)。もしそうなら、http://www.foobar.com/whatever?else=the#url-contains
でクライアントに301 Permanentリダイレクトを送り返してください。それがクエリ文字列を複製するので、その最後にクエリ文字列を追加しないでください。
これが、プロパティ、属性、および一部の値の意味です。
MatchAll
)、またはいずれかの条件が真(MatchAny
)である必要があります。 AND vs ORに似ています。match
とそのconditions
がすべて真ならばどうするか。redirect
(クライアント側)またはrewrite
(サーバー側)です。https://
を2つのサーバー変数と連結します。url
の最後にクエリ文字列を追加するかどうか。この場合は{REQUEST_URI}
に既に含まれているので、falseに設定しています。サーバー変数は
{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
受け入れられた答えは私のために働かなかった。私はこれについての手順に従った blog 。
私にとって欠けていた重要な点は、IIS用のURL書き換えツールをダウンロードしてインストールする必要があるということでした。私はそれを見つけました ここ 。結果は以下の通りです。
<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://docs.Microsoft.com/ja-jp/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);
私は自分の環境に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
リダイレクトを行うHTMLファイル(redirectToHttps.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>
私は他の場所では一箇所にすべての部分を見つけることができなかったので、誰かがこれが有用であることを願っています。
優れた NWebsec ライブラリは、upgrade-insecure-requests
内のWeb.config
タグを使用して、リクエストをHTTPからHTTPSにアップグレードできます。
<nwebsec>
<httpHeaderSecurityModule>
<securityHttpHeaders>
<content-Security-Policy enabled="true">
<upgrade-insecure-requests enabled="true" />
</content-Security-Policy>
</securityHttpHeaders>
</httpHeaderSecurityModule>
</nwebsec>