3

如何让 ASP.Net Core Razor 页面符合letsencrypt.com 对“握手”的要求?我曾尝试使用适用于 MVC 的解决方案,但完成路由的方式在 Razor Pages 中不起作用。

4

1 回答 1

5

我从 Royal Jay 网站上的这个优秀教程开始。向 Web 应用程序添加路由是我的解决方案与普通 MVC 应用程序不同的地方。由于您必须每 3 个月获得一个新的 SSL 证书,因此我将此解决方案配置为可配置,以便最终更改密钥非常容易。

在我的appsettings.json文件中,我为 LetsEncrypt 添加了以下条目:

"LetsEncrypt": {
    "Key": "the entire key from your letsencrypt initial session goes here"
  }

此处的条目是您从letsencrypt-auto可执行文件中收到的完整密钥(它是Royal Jay 教程中的第二个红色下划线部分)。

为了将配置属性传递到将处理来自 LetsEncrypt 的握手的页面,我创建了一个新的接口和一个保存密钥的小类:

界面:

using System;
using System.Collections.Generic;
using System.Text;

namespace Main.Interfaces
{
    public interface ILetsEncryptKey
    {
        string GetKey();
    }
}

班级:

using Main.Interfaces;

namespace Main.Models
{
    public class LetsEncryptKey : ILetsEncryptKey
    {
        private readonly string _key;

        public LetsEncryptKey(string key) => _key = key;

        public string GetKey() => _key;
    }
}

然后在startup.cs文件中,我将这些行添加到ConfigureServices部分:

    var letsEncryptInitialKey = Configuration["LetsEncrypt:Key"];

    services.AddMvc().AddRazorPagesOptions(options =>
    {
        options.Conventions.AddPageRoute("/LetsEncrypt", $".well-known/acme-challenge/{letsEncryptInitialKey.Split('.')[0]}");
    });

    services.AddSingleton<ILetsEncryptKey>(l => new LetsEncryptKey(letsEncryptInitialKey));

现在我们唯一要做的就是创建将处理握手请求并返回响应的页面。

LetsEncrypt.cshtml.cs:

using Main.Interfaces;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RazorPages.Pages
{
    public class LetsEncryptModel : PageModel
    {
        private readonly ILetsEncryptKey _letsEncryptKey;

        public LetsEncryptModel(ILetsEncryptKey letsEncryptKey)
        {
            _letsEncryptKey = letsEncryptKey;
        }

        public ContentResult OnGet()
        {
            var result = new ContentResult
            {
                ContentType = "text/plain",
                Content = _letsEncryptKey.GetKey()
            };

            return result;
        }
    }
}
于 2018-01-16T00:03:21.750 回答