ASP.NET Core를 사용하여 Windows 및 Azure에서 rest 키 암호화
데이터 보호 시스템은 기본적으로 검색 메커니즘을 사용하여 암호화 키를 암호화 rest하는 방법을 결정합니다. 개발자는 검색 메커니즘을 재정의하고 키를 암호화하는 방법을 수동으로 지정할 수 있습니다 rest.
Warning
명시적 키 지속성 위치를 지정하는 경우 데이터 보호 시스템은 메커니즘에서 rest 기본 키 암호화를 등록 취소합니다. 따라서 키는 더 이상 .에서 rest암호화되지 않습니다. 프로덕션 배포에 대한 명시적 키 암호화 메커니즘을 지정하는 것이 좋습니다. 암호화 메커니즘rest 옵션은 이 항목에서 설명합니다.
Azure Key Vault
Azure Key Vault에 키를 저장하려면 클래스에서 Startup
시스템을 ProtectKeysWithAzureKeyVault 구성합니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(new Uri("<blobUriWithSasToken>"))
.ProtectKeysWithAzureKeyVault("<keyIdentifier>", "<clientId>", "<clientSecret>");
}
자세한 내용은 ASP.NET Core 데이터 보호 구성: ProtectKeysWithAzureKeyVault를 참조하세요.
Windows DPAPI
Windows 배포에만 적용됩니다.
Windows DPAPI를 사용하는 경우 키 자료는 스토리지에 유지되기 전에 CryptProtectData를 사용하여 암호화됩니다. DPAPI는 현재 컴퓨터 외부에서 읽지 않는 데이터에 적합한 암호화 메커니즘입니다(이러한 키를 Active Directory로 백업할 수는 있지만). 암호화에서rest DPAPI 키를 구성하려면 ) 확장 메서드 중 ProtectKeysWithDpapi하나를 호출합니다.
public void ConfigureServices(IServiceCollection services)
{
// Only the local user account can decrypt the keys
services.AddDataProtection()
.ProtectKeysWithDpapi();
}
매개 변수 없이 ProtectKeysWithDpapi
를 호출하면 현재 Windows 사용자 계정만 지속형 키 링을 해독할 수 있습니다. 필요에 따라 현재 사용자 계정뿐만 아니라 머신의 모든 사용자 계정이 키 링을 해독할 수 있도록 지정할 수 있습니다.
public void ConfigureServices(IServiceCollection services)
{
// All user accounts on the machine can decrypt the keys
services.AddDataProtection()
.ProtectKeysWithDpapi(protectToLocalMachine: true);
}
X.509 인증서
앱이 여러 컴퓨터에 분산되어 있는 경우 컴퓨터 간에 공유 X.509 인증서를 배포하고 다음 위치에서 rest키 암호화에 인증서를 사용하도록 호스트된 앱을 구성하는 것이 편리할 수 있습니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithCertificate("3BCE558E2AD3E0E34A7743EAB5AEA2A9BD2575A0");
}
.NET Framework 제한으로 인해 CAPI 프라이빗 키가 있는 인증서만 지원됩니다. 이러한 제한 사항에 대한 가능한 해결 방법은 아래 콘텐츠를 참조하세요.
Windows DPAPI-NG
이 메커니즘은 Windows 8/Windows Server 2012 이상에서만 사용할 수 있습니다.
Windows 8부터 Windows OS는 DPAPI-NG(CNG DPAPI라고도 함)를 지원합니다. 자세한 내용은 CNG DPAPI 정보를 참조하세요.
보안 주체는 보호 설명자 규칙으로 인코딩됩니다. 다음 예제에서는 ProtectKeysWithDpapiNG지정된 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);
}
매개 변수가 없는 ProtectKeysWithDpapiNG
오버로드도 있습니다. 이 편리한 방법을 사용하여 "SID={CURRENT_ACCOUNT_SID}" 규칙을 지정합니다. 여기서 CURRENT_ACCOUNT_SID는 현재 Windows 사용자 계정의 SID입니다.
public void ConfigureServices(IServiceCollection services)
{
// Use the descriptor rule "SID={current account SID}"
services.AddDataProtection()
.ProtectKeysWithDpapiNG();
}
이 시나리오에서 AD 도메인 컨트롤러는 DPAPI-NG 작업에서 사용하는 암호화 키를 배포합니다. 대상 사용자는 도메인에 가입된 컴퓨터에서 암호화된 페이로드를 해독할 수 있습니다(프로세스가 해당 컴퓨터 identity에서 실행되는 경우).
Windows DPAPI-NG를 사용하는 인증서 기반 암호화
앱이 Windows 8.1/Windows Server 2012 R2 이상에서 실행되는 경우 Windows DPAPI-NG를 사용하여 인증서 기반 암호화를 수행할 수 있습니다. 규칙 설명자 문자열 "CERTIFICATE=HashId:THUMBPRINT"를 사용합니다. 여기서 THUMBPRINT는 인증서의 16진수로 인코딩된 SHA1 지문입니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.ProtectKeysWithDpapiNG("CERTIFICATE=HashId:3BCE558E2...B5AEA2A9BD2575A0",
flags: DpapiNGProtectionDescriptorFlags.None);
}
키를 해독하려면 이 리포지토리를 가리키는 앱이 Windows 8.1/Windows Server 2012 R2 이상에서 실행되고 있어야 합니다.
사용자 지정 키 암호화
기본 제공 메커니즘이 적절하지 않은 경우 개발자는 사용자 지정 IXmlEncryptor을 제공하여 자체 키 암호화 메커니즘을 지정할 수 있습니다.
ASP.NET Core