ASP.Net MVC または Web フォームの場合、特定のルーティング構成を使用すると、この URL を静的ファイルの戻り値ではなく、ルーティング エンジンが MVC/フォーム ハンドラーに渡すものとして扱うことになります。結果は 404 または 503 になります。解決策は驚くほど簡単です。
チャレンジ ファイルをまだ配置していない場合は、配置します。
- 必要なディレクトリを作成するのは、主に Microsoft が怠惰なため
.well-known
難しい作業ですが、cmdline から行うか、フォルダを as で作成すると、Windows Explorer が回避策に気づき、末尾のピリオドを削除してくれます。.well-known.
- 内部
\.well-known\acme-challenge
に、適切な名前と内容のチャレンジ ファイルを配置します。この部分は好きなように進めて構いません。私はたまたまGit Bashを次のように使用していますecho "oo0acontents" > abcdefilename
次に、 acme-challenge dir に次の内容の Web.Config ファイルを作成します。
<?xml version = "1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<clear />
<mimeMap fileExtension = ".*" mimeType="text/json" />
</staticContent>
<handlers>
<clear />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule"
resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>
ソース: https://github.com/Lone-Coder/letsencrypt-win-simple/issues/37
終わり。404/503 の代わりにファイルが返され始め、チャレンジが完了します。これで、送信してドメインの検証を受けることができます。
余談: 上記のコード スニペットは content-type を json に設定します。これは、letsencrypt にはもはや関係のない歴史的な要件です。現在の要件は、要件がないことです。パンツレス/エレファントのコンテンツ タイプを送信でき、引き続き機能します。
Asp.Net の詳細
私は、すべての HTTP リクエストを HTTPS にリダイレクトして、ユーザーが尋ねることを知らなかった場合でも安全な接続を確保するのが好きです。LetsEncrypt を使用するまでは、これを行う簡単な方法がたくさんあります。次のように、クラスに静的メソッドを設定できます。
public static class HttpsHelper
{
public static bool AppLevelUseHttps =
#if DEBUG
false;
#else
true;
#endif
public static bool Application_BeginRequest(HttpRequest Request, HttpResponse Response)
{
if (!AppLevelUseHttps)
return false;
switch (Request.Url.Scheme)
{
case "https":
return false;
#if !DEBUG
case "http":
var reqUrl = Request.Url;
var pathAndQuery = reqUrl.PathAndQuery;
// Let's Encrypt exception
if (pathAndQuery.StartsWith("/.well-known"))
return false;
// http://stackoverflow.com/a/21226409/176877
var url = "https://" + reqUrl.Host + pathAndQuery;
Response.Redirect(url, true);
return true;
#endif
}
return false;
}
}
これで、LetsEncrypt がノックする場合を除いて、HTTPS にリダイレクトするという素晴らしい仕事を行うことができます。Global.asax.cs で結び付けます。
protected void Application_BeginRequest(object sender, EventArgs ev)
{
HttpsHelper.Application_BeginRequest(Request, Response);
}
返された bool はここで破棄されることに注意してください。リクエスト/レスポンスをすぐに終了するかどうか、本当の意味で終了するかどうかを決定したい場合に使用できます。
最後に、必要に応じて AppLevelUseHttps 変数を使用して、この動作をオフにすることができます。たとえば、HTTPS なしで動作しているかどうかをテストする場合などです。たとえば、Web.Config 変数の値に設定できます。