šifrování klíčů v klidovém Windows a Azure pomocí ASP.NET Core
Systém ochrany dat ve výchozím nastavení využívá mechanismus zjišťování , aby určil, jak by měly být šifrovací klíče zašifrované v klidovém stavu. Vývojář může přepsat mechanismus zjišťování a ručně zadat, jak by měly být klíče zašifrované v klidovém stavu.
Upozornění
Pokud zadáte explicitní umístění trvalosti klíčů, systém ochrany dat zruší registraci výchozího šifrování klíče v mechanismu REST. V důsledku toho klíče už nejsou zašifrované v klidovém stavu. Pro produkční nasazení doporučujeme zadat explicitní šifrovací mechanismus klíčů . V tomto tématu jsou popsány možnosti mechanismu šifrování v klidovém umístění.
Azure Key Vault
Pokud chcete ukládat klíče v Azure Key Vault, nakonfigurujte systém pomocí ProtectKeysWithAzureKeyVault ve Startup třídě:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"))
.ProtectKeysWithAzureKeyVault("<keyIdentifier>", "<clientId>", "<clientSecret>");
}
další informace najdete v tématu konfigurace ASP.NET Core ochrany dat: ProtectKeysWithAzureKeyVault.
Windows NEMOHL
vztahuje se pouze na nasazení Windows.
je-li použit Windows DPAPI, klíč materiálu je před trvalým uložením do úložiště zašifrovaný pomocí funkce CryptProtectData . DPAPI je vhodný šifrovací mechanismus pro data, která se nikdy nepřečetla mimo aktuální počítač (i když je možné tyto klíče do služby Active Directory obnovit). informace o řešení potíží s data Protection API (DPAPI)najdete v části rozhraní DPAPI a cestovní profily . Pokud chcete nakonfigurovat šifrování v rámci neaktivního klíče DPAPI, zavolejte jednu z metod rozšíření ProtectKeysWithDpapi :
public void ConfigureServices(IServiceCollection services)
{
// Only the local user account can decrypt the keys
services.AddDataProtection()
.ProtectKeysWithDpapi();
}
pokud ProtectKeysWithDpapi je zavolána bez parametrů, je možné trvale dešifrovat zadržený klíčový prstenec pouze v aktuálním Windowsm uživatelském účtu. Volitelně můžete určit, že každý uživatelský účet v počítači (nikoli jenom aktuální uživatelský účet) může dekódovat klíčového prstence:
public void ConfigureServices(IServiceCollection services)
{
// All user accounts on the machine can decrypt the keys
services.AddDataProtection()
.ProtectKeysWithDpapi(protectToLocalMachine: true);
}
Certifikát X. 509
Pokud je aplikace rozdělená mezi několik počítačů, může být vhodné distribuovat sdílený certifikát X. 509 napříč počítači a nakonfigurovat hostované aplikace tak, aby používaly certifikát pro šifrování neaktivních klíčů:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithCertificate("3BCE558E2AD3E0E34A7743EAB5AEA2A9BD2575A0");
}
vzhledem k omezením .NET Framework podporují se jenom certifikáty s privátními klíči CAPI. V níže uvedeném obsahu se můžete podívat na možná řešení těchto omezení.
Windows DPAPI – NG
tento mechanismus je k dispozici pouze v Windows 8/Windows Server 2012 nebo novějším.
počínaje Windows 8 Windows operační systém podporuje rozhraní dpapi-NG (označuje se také jako CNG DPAPI). Další informace najdete v tématu o CNG DPAPI.
Objekt zabezpečení je kódovaný jako pravidlo popisovače ochrany. V následujícím příkladu, který volá ProtectKeysWithDpapiNG, může dešifrovat klíč Ring jenom uživatel připojený k doméně se zadaným identifikátorem SID:
public void ConfigureServices(IServiceCollection services)
{
// Uses the descriptor rule "SID=S-1-5-21-..."
services.AddDataProtection()
.ProtectKeysWithDpapiNG("SID=S-1-5-21-...",
flags: DpapiNGProtectionDescriptorFlags.None);
}
Existuje také přetížení bez parametrů ProtectKeysWithDpapiNG . tuto metodu použijte k zadání pravidla "SID = {CURRENT_ACCOUNT_SID}", kde CURRENT_ACCOUNT_SID je identifikátor sid aktuálního Windows uživatelského účtu:
public void ConfigureServices(IServiceCollection services)
{
// Use the descriptor rule "SID={current account SID}"
services.AddDataProtection()
.ProtectKeysWithDpapiNG();
}
V tomto scénáři zodpovídá řadič domény služby AD za distribuci šifrovacích klíčů používaných operacemi DPAPI-NG. Cílový uživatel může dešifrovat šifrovanou datovou část z libovolného počítače připojeného k doméně (za předpokladu, že proces běží pod svou identitou).
šifrování založené na certifikátech s Windows DPAPI-NG
pokud je aplikace spuštěná na Windows 8.1/Windows Server 2012 R2 nebo novějším, můžete k provádění šifrování založeného na certifikátech použít Windows DPAPI-NG. Použijte řetězec deskriptoru pravidel "CERTIFICATE = HashId: kryptografický otisk", kde kryptografický otisk je hex kódovaný otisk certifikátu SHA1:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithDpapiNG("CERTIFICATE=HashId:3BCE558E2...B5AEA2A9BD2575A0",
flags: DpapiNGProtectionDescriptorFlags.None);
}
všechny aplikace, na které se odkazuje v tomto úložišti, musí běžet na Windows 8.1/Windows Server 2012 R2 nebo novějším, aby se klíče dešifroval.
Šifrování vlastních klíčů
Pokud nejsou mechanismy v krabici vhodné, může vývojář zadat vlastní šifrovací mechanismus klíče tím, že poskytuje vlastní IXmlEncryptor.