7

Let's Encrypt を使用して会社のセキュリティ証明書を生成しようとしましたが、うまくいきませんでした。私の会社はメインの Web サイトに WordPress 3.9.7 を使用していますが、新しいバージョンはサードパーティの会社によって処理されているため、新しいバージョンにアップグレードすることはできません。この Web サイトは、Windows Server 2008 R2 上のインターネット インフォメーション サービス 7.5 上で実行されています。私の質問は次のとおりです: wordpressで処理する方法は ? 新しい空のページと、暗号化が期待するものを正確に返す新しいテンプレートを既に作成しましたが、wordpress はそのページに対して 404 を返し続けます。私の推測では、ルートの先頭にあるドット(。)(「.well-known」)で問題が発生すると思いますが、ワードプレスでそれを解決する方法がわかりません。

また、asp.net mvc Web サイトを使用して、IIS がその Web サイトをしばらく指すようにすることもできます。クライアントが数分間当社の Web サイトにアクセスできない可能性があるため、お勧めできませんが、それでもオプションです。問題は、名前の先頭にドット (".") を含むコントローラーまたはルートを作成するにはどうすればよいかということです。助けていただければ幸いです。

4

1 に答える 1

13

ASP.Net MVC または Web フォームの場合、特定のルーティング構成を使用すると、この URL を静的ファイルの戻り値ではなく、ルーティング エンジンが MVC/フォーム ハンドラーに渡すものとして扱うことになります。結果は 404 または 503 になります。解決策は驚くほど簡単です。

チャレンジ ファイルをまだ配置していない場合は、配置します。

  1. 必要なディレクトリを作成するのは、主に Microsoft が怠惰なため.well-known難しい作業ですが、cmdline から行うか、フォルダを as で作成すると、Windows Explorer が回避策に気づき、末尾のピリオドを削除してくれます.well-known.
  2. 内部\.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 変数の値に設定できます。

于 2016-04-28T18:41:26.967 に答える