Kolomhoofdsleutels maken en opslaan voor Always Encrypted
van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Kolomhoofdsleutels zijn sleutelbeschermingssleutels die in Always Encrypted worden gebruikt om kolomversleutelingssleutels te versleutelen. Kolomhoofdsleutels moeten worden opgeslagen in een vertrouwd sleutelarchief en de sleutels moeten toegankelijk zijn voor toepassingen die gegevens moeten versleutelen of ontsleutelen, en hulpprogramma's voor het configureren van Always Encrypted en het beheren van Always Encrypted-sleutels.
Dit artikel bevat informatie over het selecteren van een sleutelarchief en het maken van kolomhoofdsleutels voor Always Encrypted. Zie Overzicht van Sleutelbeheer voor Always Encryptedvoor een gedetailleerd overzicht.
Een sleutelarchief voor uw kolomhoofdsleutel selecteren
Always Encrypted ondersteunt meerdere sleutelarchieven voor het opslaan van always encrypted-kolomhoofdsleutels. Ondersteunde sleutelarchieven variëren, afhankelijk van het stuurprogramma en de versie die u gebruikt.
Er zijn twee belangrijke opslagcategorieën van hoog niveau: lokale sleutelarchievenen gecentraliseerde sleutelarchieven.
Lokaal of gecentraliseerd sleutelarchief?
Lokale sleutelarchieven: kan alleen worden gebruikt door toepassingen op computers die het lokale sleutelarchief bevatten. Met andere woorden, u moet het sleutelarchief en de sleutel repliceren naar elke computer waarop uw toepassing wordt uitgevoerd. Een voorbeeld van een lokaal sleutelarchief is Windows Certificate Store. Wanneer u een lokaal sleutelarchief gebruikt, moet u ervoor zorgen dat het sleutelarchief bestaat op elke computer die als host fungeert voor uw toepassing en dat de computer de kolomhoofdsleutels bevat die uw toepassing nodig heeft voor toegang tot gegevens die zijn beveiligd met Always Encrypted. Wanneer u een kolomhoofdsleutel voor de eerste keer inricht of wanneer u de sleutel wijzigt (roteert), moet u ervoor zorgen dat de sleutel wordt geïmplementeerd op alle computers die als host fungeren voor uw toepassing(en).
Gecentraliseerde sleutelarchieven - dienen toepassingen op meerdere computers. Een voorbeeld van een gecentraliseerd sleutelarchief is Azure Key Vault-. Een gecentraliseerd sleutelarchief maakt sleutelbeheer meestal eenvoudiger omdat u niet meerdere kopieën van uw kolomhoofdsleutels op meerdere computers hoeft te onderhouden. Zorg ervoor dat uw toepassingen zijn geconfigureerd om verbinding te maken met het gecentraliseerde sleutelarchief.
Welke sleutelarchieven worden ondersteund in clientstuurprogramma's met Always Encrypted-functionaliteit?
Always Encrypted-clientstuurprogramma's zijn SQL Server-clientstuurprogramma's die ingebouwde ondersteuning hebben voor het opnemen van Always Encrypted in uw clienttoepassingen. Stuurprogramma's met Always Encrypted-functionaliteit bevatten enkele ingebouwde providers voor populaire sleutelarchieven. Met sommige stuurprogramma's kunt u ook een aangepaste kolom-hoofdsleutelkastprovider implementeren en registreren, zodat u elke sleutelkast kunt gebruiken, zelfs als er geen ingebouwde provider voor is. Wanneer u besluit tussen een ingebouwde provider en een aangepaste provider, moet u overwegen dat het gebruik van een ingebouwde provider doorgaans minder wijzigingen in uw toepassingen betekent (in sommige gevallen is alleen het wijzigen van een databaseverbindingsreeks vereist).
De beschikbare ingebouwde providers zijn afhankelijk van welk stuurprogramma, welke stuurprogrammaversie en welk besturingssysteem is geselecteerd. Raadpleeg de Always Encrypted-documentatie voor uw specifieke stuurprogramma om te bepalen welke sleutelarchieven out-of-the-box worden ondersteund en of uw stuurprogramma aangepaste sleutelarchiefproviders ondersteunt: Toepassingen ontwikkelen met Always Encrypted.
Welke sleutelopslagplaatsen worden ondersteund in SQL Tools?
SQL Server Management Studio, Azure Data Studio en de SqlServer PowerShell-module ondersteunen kolomhoofdsleutels die zijn opgeslagen in:
Sleutelkluizen en beheerde HSM's in Azure Key Vault.
Notitie
Voor beheerde HSM's is SSMS 18.9 of hoger en de SqlServer PowerShell-module versie 21.18235 of hoger vereist. Azure Data Studio biedt momenteel geen ondersteuning voor beheerde HSM's.
Windows-certificatenopslagplaats.
Sleutelopslagplaatsen, zoals hardwarebeveiligingsmodules, die de CNG-API (Cryptography Next Generation) of de CAPI (Cryptografie-API) bieden.
Kolomhoofdsleutels maken in Het Windows-certificaatarchief
Een kolomhoofdsleutel kan een certificaat zijn dat is opgeslagen in het Windows-certificaatarchief. Een stuurprogramma met Always Encrypted-functionaliteit verifieert geen vervaldatum of een keten van certificeringsinstanties. Een certificaat wordt gewoon gebruikt als een sleutelpaar dat bestaat uit een openbare en persoonlijke sleutel.
Om een geldige kolomhoofdsleutel te zijn, moet een certificaat:
- een X.509-certificaat zijn.
- worden opgeslagen op een van de twee locaties van het certificaatarchief: lokale computer of huidige gebruiker. (Als u een certificaat wilt maken op de locatie van het certificaatarchief van de lokale computer, moet u een beheerder zijn op de doelcomputer.)
- een persoonlijke sleutel bevatten (de aanbevolen lengte van de sleutels in het certificaat is 2048 bits of hoger).
- worden gemaakt voor sleuteluitwisseling.
Er zijn meerdere manieren om een certificaat te maken dat een geldige kolomhoofdsleutel is, maar de eenvoudigste optie is om een zelfondertekend certificaat te maken.
Een zelfondertekend certificaat maken met PowerShell
Gebruik de cmdlet New-SelfSignedCertificate om een zelfondertekend certificaat te maken. In het volgende voorbeeld ziet u hoe u een certificaat genereert dat kan worden gebruikt als een kolomhoofdsleutel voor Always Encrypted.
# New-SelfSignedCertificate is a Windows PowerShell cmdlet that creates a self-signed certificate. The below examples show how to generate a certificate that can be used as a column master key for Always Encrypted.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:CurrentUser\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
# To create a certificate in the local machine certificate store location you need to run the cmdlet as an administrator.
$cert = New-SelfSignedCertificate -Subject "AlwaysEncryptedCert" -CertStoreLocation Cert:LocalMachine\My -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048
Een zelfondertekend certificaat maken met behulp van SQL Server Management Studio (SSMS)
Zie Always Encrypted-sleutels inrichten met behulp van SQL Server Management Studiovoor meer informatie. Voor een stapsgewijze zelfstudie die gebruikmaakt van SSMS en Always Encrypted-sleutels opslaat in het Windows-certificaatarchief, raadpleegt u zelfstudie over de wizard Always Encrypted (Windows Certificate Store).
Certificaten beschikbaar maken voor toepassingen en gebruikers
Als uw kolomhoofdsleutel een certificaat is dat is opgeslagen in de lokale computer locatie van het certificaatarchief, moet u het certificaat exporteren met de persoonlijke sleutel en het importeren naar alle computers die toepassingen hosten die naar verwachting gegevens moeten versleutelen of ontsleutelen die zijn opgeslagen in versleutelde kolommen, of hulpprogramma's voor het configureren van Always Encrypted en voor het beheren van de Always Encrypted-sleutels. Elke gebruiker moet ook een leesmachtiging krijgen voor het certificaat dat is opgeslagen op de locatie van het certificaatarchief van de lokale computer om het certificaat als een kolomhoofdsleutel te kunnen gebruiken.
Als uw kolomhoofdsleutel een certificaat is dat is opgeslagen in de huidige gebruiker locatie van het certificaatarchief, moet u het certificaat exporteren met de persoonlijke sleutel en het importeren in de huidige locatie van het certificaatarchief van gebruikersaccounts van alle gebruikersaccounts met toepassingen die naar verwachting gegevens moeten versleutelen of ontsleutelen die zijn opgeslagen in versleutelde kolommen, of hulpprogramma's voor het configureren van Always Encrypted en het beheren van Always Encrypted-sleutels (op alle computers die deze toepassingen/hulpprogramma's bevatten). Er is geen machtigingsconfiguratie vereist. Nadat een gebruiker zich heeft aangemeld bij een computer, heeft een gebruiker toegang tot alle certificaten op de huidige locatie van het certificaatarchief van de gebruiker.
PowerShell gebruiken
Gebruik de Import-PfxCertificate en Export-PfxCertificate cmdlets om een certificaat te importeren en te exporteren.
Microsoft Management Console gebruiken
Als u een gebruiker de machtiging Lezen wilt verlenen voor een certificaat dat is opgeslagen op de locatie van het certificaatarchief van de lokale computer, voert u de volgende stappen uit:
- Open een opdrachtprompt en typ mmc-.
- Klik in de MMC-console in het menu Bestand op Module toevoegen/verwijderen.
- Klik in het dialoogvenster Module toevoegen/verwijderen op toevoegen.
- Klik in het dialoogvenster Zelfstandige invoegtoepassing op Certificaten, en klik vervolgens op Toevoegen.
- Klik in het dialoogvenster Certificaten module op Computeraccounten klik vervolgens op voltooien.
- Klik in het dialoogvenster Zelfstandige module toevoegen op sluiten.
- Klik in het dialoogvenster Module toevoegen/verwijderen op OK.
- Zoek in de module Certificaten het certificaat in de map Certificaten > Persoonlijke, klik met de rechtermuisknop op het certificaat, wijs naar Alle takenen klik vervolgens op Privésleutels beheren.
- Voeg in het dialoogvenster Security leesmachtiging toe voor een gebruikersaccount, indien nodig.
Kolomhoofdsleutels aanmaken in Azure Key Vault
Azure Key Vault helpt cryptografische sleutels en geheimen te beveiligen en het is een handige optie voor het opslaan van kolomhoofdsleutels voor Always Encrypted, met name als uw toepassingen worden gehost in Azure. Als u een sleutel wilt maken in Azure Key Vault-, hebt u een Azure-abonnement nodig en een Azure Key Vault. Een sleutel kan worden opgeslagen in een sleutelkluis of in een beheerde HSM-. Als u een geldige kolomhoofdsleutel wilt zijn, moet de sleutel die in Azure Key Vault wordt beheerd, een RSA-sleutel zijn.
Azure CLI, Portal of PowerShell gebruiken
Zie voor meer informatie over het maken van een sleutel in een sleutelkluis:
- quickstart: Een sleutel instellen en ophalen uit Azure Key Vault met behulp van Azure CLI
- quickstart: Een sleutel instellen en ophalen uit Azure Key Vault met behulp van Azure PowerShell
- quickstart: Een sleutel instellen en ophalen uit Azure Key Vault met behulp van de Azure-portal
Zie voor meer informatie over het maken van een sleutel in een beheerde HSM:
SQL Server Management Studio (SSMS)
Voor meer informatie over het maken van een kolommeestersleutel in een sleutelkluis of een beheerde HSM in Azure Key Vault met behulp van SSMS, zie Always Encrypted-sleutels inrichten met behulp van SQL Server Management Studio. Voor een stapsgewijze zelfstudie waarin SSMS wordt gebruikt en Always Encrypted-sleutels in een sleutelkluis opslaat, raadpleegt u zelfstudie over de wizard Always Encrypted (Azure Key Vault).
Azure Key Vault-sleutels beschikbaar maken voor toepassingen en gebruikers
Als u toegang wilt krijgen tot een versleutelde kolom, moet uw toepassing toegang hebben tot Azure Key Vault en moet deze ook specifieke machtigingen voor de kolomhoofdsleutel hebben om de kolomversleutelingssleutel te ontsleutelen die de kolom beveiligt.
Als u sleutels voor Always Encrypted wilt beheren, hebt u machtigingen nodig om kolomhoofdsleutels in Azure Key Vault weer te geven en te maken en cryptografische bewerkingen uit te voeren met behulp van de sleutels.
Sleutelkluizen
Als u uw kolomhoofdsleutels opslaat in een sleutelkluis en u rolmachtigingen gebruikt voor autorisatie:
De identiteit van uw toepassing moet lid zijn van rollen die de volgende acties voor het gegevensvlak in de sleutelkluis toestaan:
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/verify/action
De eenvoudigste manier om de toepassing de vereiste machtiging te verlenen, is door de identiteit toe te voegen aan de Key Vault Crypto User rol. U kunt ook een aangepaste rol maken met de vereiste machtigingen.
Een gebruiker die sleutels voor Always Encrypted beheert, moet lid zijn van rollen die de volgende datavlak acties in de sleutelkluis toestaan.
- Microsoft.KeyVault/vaults/keys/create/action
- Microsoft.KeyVault/vaults/keys/decrypt/action
- Microsoft.KeyVault/vaults/keys/encrypt/action
- Microsoft.KeyVault/vaults/keys/read
- Microsoft.KeyVault/vaults/keys/sign/action
- Microsoft.KeyVault/vaults/keys/verify/action
De eenvoudigste manier om de gebruiker de vereiste machtiging te verlenen, is door de gebruiker toe te voegen aan de Key Vault Crypto User rol. U kunt ook een aangepaste rol maken met de vereiste machtigingen.
Als u uw kolomhoofdsleutels opslaat in een sleutelkluis en u toegangsbeleid gebruikt voor autorisatie:
- De identiteit van uw toepassing heeft de volgende toegangsbeleidsmachtigingen voor de sleutelkluis nodig: ophalen, sleutel uitpakkenen verifiëren.
- Een gebruiker die sleutels voor Always Encrypted beheert, heeft de volgende toegangsbeleidsmachtigingen nodig voor de sleutelkluis: maken, , lijst, ondertekenen, unwrapKey, wrapKey, verifiëren.
Zie Een beveiligingsprincipaal machtigen voor toegang tot Key Vault-voor algemene informatie over het configureren van verificatie en autorisatie voor sleutelkluizen.
Beheerde HSM's
De identiteit van uw toepassing moet lid zijn van rollen die de volgende gegevensvlakacties op uw beheerde HSM toestaan:
- Microsoft.KeyVault/managedHsm/keys/decrypt/action
- Microsoft.KeyVault/managedHsm/keys/read/action
- Microsoft.KeyVault/managedHsm/keys/verify/action
Microsoft raadt u aan een aangepaste rol te maken met alleen de bovenstaande machtigingen.
Een gebruiker die sleutels voor Always Encrypted beheert, moet lid of rollen zijn die de volgende acties voor het gegevensvlak op de sleutel toestaan:
- Microsoft.KeyVault/managedHsm/keys/create/action
- Microsoft.KeyVault/managedHsm/keys/decrypt/action
- Microsoft.KeyVault/managedHsm/keys/encrypt/action
- Microsoft.KeyVault/managedHsm/keys/read
- Microsoft.KeyVault/managedHsm/keys/sign/action
- Microsoft.KeyVault/managedHsm/keys/verify/action
De eenvoudigste manier om de gebruiker de bovenstaande machtigingen te verlenen, is door de gebruiker toe te voegen aan de Managed HSM Crypto User-rol. U kunt ook een aangepaste rol maken met de vereiste machtigingen.
Zie voor meer informatie over toegangsbeheer voor beheerde HSM's:
Kolomhoofdsleutels maken in hardwarebeveiligingsmodules met behulp van CNG
Een kolomhoofdsleutel voor Always Encrypted kan worden opgeslagen in een sleutelarchief met de CNG-API (Cryptography Next Generation). Dit type opslag is doorgaans een hardware security module (HSM). Een HSM is een fysiek apparaat dat digitale sleutels beschermt en beheert en cryptoverwerking biedt. HSM's worden traditioneel geleverd in de vorm van een invoegtoepassingskaart of een extern apparaat dat rechtstreeks is gekoppeld aan een computer (lokale HSM's) of een netwerkserver.
Als u een HSM beschikbaar wilt maken voor toepassingen op een bepaalde computer, moet een Key Storage Provider (KSP), die CNG implementeert, worden geïnstalleerd en geconfigureerd op de computer. Een Always Encrypted-clientstuurprogramma (een provider van opslag voor kolomhoofdsleutels binnen het stuurprogramma) gebruikt de KSP om kolomversleutelingssleutels te versleutelen en te ontsleutelen, die beveiligd zijn met een kolomhoofdsleutel opgeslagen in het sleutelarchief.
Windows bevat Microsoft Software Key Storage Provider- een op software gebaseerde KSP, die u kunt gebruiken voor testdoeleinden. Zie CNG-sleutelopslagproviders.
Kolomhoofdsleutels maken in een sleutelarchief met behulp van CNG/KSP
Een kolomhoofdsleutel moet een asymmetrische sleutel (een openbaar/persoonlijk sleutelpaar) zijn met behulp van het RSA-algoritme. De aanbevolen sleutellengte is 2048 of hoger.
HSM-specifieke hulpprogramma's gebruiken
Raadpleeg de documentatie voor uw HSM.
PowerShell gebruiken
U kunt .NET-API's gebruiken om een sleutel te maken in een sleutelarchief met behulp van CNG in PowerShell.
$cngProviderName = "Microsoft Software Key Storage Provider" # If you have an HSM, you can use a KSP for your HSM instead of a Microsoft KSP
$cngAlgorithmName = "RSA"
$cngKeySize = 2048 # Recommended key size for Always Encrypted column master keys
$cngKeyName = "AlwaysEncryptedKey" # Name identifying your new key in the KSP
$cngProvider = New-Object System.Security.Cryptography.CngProvider($cngProviderName)
$cngKeyParams = New-Object System.Security.Cryptography.CngKeyCreationParameters
$cngKeyParams.provider = $cngProvider
$cngKeyParams.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::OverwriteExistingKey
$keySizeProperty = New-Object System.Security.Cryptography.CngProperty("Length", [System.BitConverter]::GetBytes($cngKeySize), [System.Security.Cryptography.CngPropertyOptions]::None);
$cngKeyParams.Parameters.Add($keySizeProperty)
$cngAlgorithm = New-Object System.Security.Cryptography.CngAlgorithm($cngAlgorithmName)
$cngKey = [System.Security.Cryptography.CngKey]::Create($cngAlgorithm, $cngKeyName, $cngKeyParams)
SQL Server Management Studio gebruiken
Zie Always Encrypted-sleutels inrichten met behulp van SQL Server Management Studio.
CNG-sleutels beschikbaar maken voor toepassingen en gebruikers
Raadpleeg uw HSM- en KSP-documentatie voor het configureren van de KSP op een computer en hoe u toepassingen en gebruikers toegang verleent tot de HSM.
Kolomhoofdsleutels maken in hardwarebeveiligingsmodules met behulp van CAPI
Een kolomhoofdsleutel voor Always Encrypted kan worden opgeslagen in een sleutelarchief waarmee de Cryptografie-API (CAPI) wordt geïmplementeerd. Normaal gesproken is een dergelijke winkel een HSM (Hardware Security Module): een fysiek apparaat dat digitale sleutels beschermt en beheert en cryptoverwerking biedt. HSM's worden traditioneel geleverd in de vorm van een invoegtoepassingskaart of een extern apparaat dat rechtstreeks is gekoppeld aan een computer (lokale HSM's) of een netwerkserver.
Als u een HSM beschikbaar wilt maken voor toepassingen op een bepaalde computer, moet een Cryptografieserviceprovider (CSP), die CAPI implementeert, worden geïnstalleerd en geconfigureerd op de computer. Een Always Encrypted-clientstuurprogramma (een provider van het hoofdsleutelarchief in het stuurprogramma), gebruikt de CSP om kolomversleutelingssleutels te versleutelen en ontsleutelen, beveiligd met kolomhoofdsleutel die is opgeslagen in het sleutelarchief.
Notitie
CAPI is een verouderde, afgeschafte API. Als een KSP beschikbaar is voor uw HSM, moet u deze gebruiken in plaats van een CSP/CAPI.
Een CSP moet het RSA-algoritme ondersteunen voor gebruik met Always Encrypted.
Windows bevat de volgende softwaregebaseerde CSP's (niet ondersteund door een HSM) CSP's die RSA ondersteunen en kunnen worden gebruikt voor testdoeleinden: Microsoft Enhanced RSA en AES Cryptographic Provider.
Kolomhoofdsleutels genereren in een sleutelopslag met CAPI/CSP
Een kolomhoofdsleutel moet een asymmetrische sleutel (een openbaar/persoonlijk sleutelpaar) zijn met behulp van het RSA-algoritme. De aanbevolen sleutellengte is 2048 of hoger.
HSM-specifieke hulpprogramma's gebruiken
Raadpleeg de documentatie voor uw HSM.
SQL Server Management Studio (SSMS) gebruiken
Zie Always Encrypted-sleutels inrichten met behulp van SQL Server Management Studio.
CNG-sleutels beschikbaar maken voor toepassingen en gebruikers
Raadpleeg de documentatie voor uw HSM en CSP voor het configureren van de CSP op een computer en hoe u toepassingen en gebruikers toegang verleent tot de HSM.
Volgende stappen
- Always Encrypted-sleutels inrichten met behulp van SQL Server Management Studio
- Always Encrypted-sleutels inrichten met Behulp van PowerShell