zoukankan      html  css  js  c++  java
  • 消除 ASP.NET Core 告警 "No XML encryptor configured. Key may be persisted to storage in unencrypted form"

    在 ASP.NET Core 中如果在 DataProtection 中使用了 PersistKeysToFileSystem 或 PersistKeysToFileSystem

    services.AddDataProtection().PersistKeysToFileSystem();
    services.AddDataProtection().PersistKeysToRedis();
    

    会在日志中出现下面的告警:

    warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
          No XML encryptor configured. Key {08f8b6bf-e57a-440b-9fa7-39f319725b58} may be persisted to storage in unencrypted form.
    

    这是由于 DataProtection 所用到的密钥本身没有被加密存储,要消除这个告警,需要一个专门用来加密“密钥”的密钥。

    首先用 openssl 命令创建密钥,得到 cnblogs.pfx 文件

    # openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout cnblogs.key -out cnblogs.crt -subj "/CN=cnblogs.com" -days 3650
    # openssl pkcs12 -export -out cnblogs.pfx -inkey cnblogs.key -in cnblogs.crt -certfile cnblogs.crt -passout pass:
    

    然后在 .csproj 项目文件中添加资源文件 Resource.resx ,将 cnblogs.pfx 添加到 Resource.resx ,并将 "Build Action" 设置为 “Embedded resource” 。

    <ItemGroup>
      <None Remove="Resourcescnblogs.pfx" />
    </ItemGroup>
    
    <ItemGroup>
      <EmbeddedResource Include="Resourcescnblogs.pfx" />
    </ItemGroup>
    

    最后在 Startup 中添加下面的代码就可以成功消除告警。

    public void ConfigureServices(IServiceCollection services)
    {
        //..
        services.AddDataProtection()
            .PersistKeysToFileSystem(new System.IO.DirectoryInfo(@"./"))
            .ProtectKeysWithCertificate(GetCertificate());
    }
    
    private X509Certificate2 GetCertificate()
    {
        var assembly = typeof(Startup).GetTypeInfo().Assembly;
        using (var stream = assembly.GetManifestResourceStream(
            assembly.GetManifestResourceNames().First(r => r.EndsWith("cnblogs.pfx"))))
        {
            if (stream == null)
                throw new ArgumentNullException(nameof(stream));
    
            var bytes = new byte[stream.Length];
            stream.Read(bytes, 0, bytes.Length);
            return new X509Certificate2(bytes);
        }
    }
    
  • 相关阅读:
    关于css兼容性问题及一些常见问题汇总
    CSS3使用transition属性实现过渡效果
    CSS3 画基本图形,圆形、椭圆形、三角形等
    总结30个CSS3选择器
    javascript中call()、apply()的区别
    JavaScript面试技巧之数组的一些不low操作
    详解bootstrap-fileinput文件上传控件的亲身实践
    js控制随机数生成概率代码实例
    jQuery 第十章 工具方法-高级方法 $.ajax() $.Callbacks() .....
    jQuery 第九章 工具方法之插件扩展 $.extend() 和 $.fn.extend()
  • 原文地址:https://www.cnblogs.com/dudu/p/9589012.html
Copyright © 2011-2022 走看看