【发布时间】:2021-01-06 12:29:45
【问题描述】:
它说“如果未配置数据保护,则密钥将保存在内存中,并在应用重新启动时丢弃。”,我不希望这种情况发生,所以我配置了数据startup.cs 中的保护:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"PATH-HERE"))
当我启动应用程序对其进行测试时,日志中会显示一条警告:No XML encryptor configured. Key {GUID} may be persisted to storage in unencrypted form.。
我发现我需要使用ProtectKeysWith* 来加密密钥。但是因为我正在尝试将应用程序发布到 Linux 服务器,所以我不能使用 ProtectKeysWithDpapi 或 ProtectKeysWithDpapiNG(因为它们只能在 Windows 服务器上使用),所以剩下的唯一选择是 X.509。
基本上,我做了一些搜索,发现我可以使用这些命令来创建一个自签名的X.509 证书:
"C:\Program Files\Git\usr\bin\openssl.exe" genrsa -out private.key 2048
"C:\Program Files\Git\usr\bin\openssl.exe" req -new -x509 -key private.key -out publickey.cer -days 2000
"C:\Program Files\Git\usr\bin\openssl.exe" pkcs12 -export -out idp.pfx -inkey private.key -in publickey.cer
我可以像这样在启动时添加这个证书:
services
.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"PATH-TO-SAVE-KEYS"))
.SetDefaultKeyLifetime(new TimeSpan(90, 0, 0, 0, 0))
.SetApplicationName("APPNAME-HERE")
.ProtectKeysWithCertificate(new X509Certificate2(@"CERTIFICATE-PATH", "CERTIFICATE-PASSWORD"));
所以我的问题是我什至需要加密密钥吗?如果我应该,我的解决方案是否有效?我可以在生产中毫无问题地使用这个解决方案吗? (请记住,我将为我的应用程序使用 Linux 服务器)
更新 1: 我在 StackOverflow 问题中做了更多的挖掘,我发现了这个: https://stackoverflow.com/a/48867984/14951696.
显然,只要您在内部使用它,就可以使用自签名证书(就像我正在做的那样)。我会在发布我的应用后再次更新,以防有人有同样的问题。
更新 2: 我决定使用 Windows 服务器,我发现使用自签名证书加密密钥没有问题。有什么事我会再更新的。
【问题讨论】:
标签: asp.net-core data-protection