Creatie van een self-signed certificaat via PowerShell
De creatie van een self-signed certificaat via PowerShell kun je eenvoudig doen en is handig voor testomgevingen of interne toepassingen. Hier volgt een stapsgewijze uitleg over hoe je dit kunt doen en wat de voordelen zijn.
Stap 1: Open PowerShell Start PowerShell als beheerder om een self-signed certificaat te maken. Dit is belangrijk omdat je anders mogelijk niet de juiste rechten hebt om certificaten aan te maken.
Stap 2: Gebruik de New-SelfSignedCertificate cmdlet Voer de volgende opdracht uit om een self-signed certificaat aan te maken:
$cert = New-SelfSignedCertificate -DnsName "jouw.domein.com" -CertStoreLocation "Cert:\LocalMachine\My"
Deze opdracht creëert een self-signed certificaat voor “jouw.domein.com” en slaat het op in de lokale machinecertificaatopslag.
Stap 3: Exporteer het certificaat (optioneel) Als je het certificaat wilt exporteren, gebruik dan de volgende opdrachten:
$pwd = ConvertTo-SecureString -String "jouwWachtwoord" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "C:\pad\naar\certificaat.pfx" -Password $pwd
Hiermee exporteer je het certificaat naar een PFX-bestand, beveiligd met een wachtwoord.
Voordelen van creatie self-signed certificaten via PowerShell
- Kostenbesparing: Self-signed certificaten zijn gratis, in tegenstelling tot certificaten van commerciële certificeringsinstanties (CA’s).
- Gemakkelijk te maken: Zoals hierboven beschreven, kun je met een paar eenvoudige PowerShell-opdrachten snel een certificaat aanmaken.
- Handig voor testen: Voor ontwikkel- en testomgevingen zijn self-signed certificaten ideaal omdat ze geen kosten met zich meebrengen en snel kunnen worden gegenereerd.
- Interne toepassingen: Voor interne toepassingen binnen een organisatie, waar de communicatie niet naar buiten gaat, kunnen self-signed certificaten voldoende zijn.
Nadelen van self-singned certificaten:
- Schaalbaarheidsproblemen: In grote infrastructuren kunnen self-signed certificaten problemen veroorzaken, vooral bij het bijwerken van rootcertificaten over verschillende systemen.
- Beperkte Vertrouwenswaardigheid: Self-signed certificaten worden niet gevalideerd door een vertrouwde derde partij, zoals een Certificate Authority (CA). Hierdoor vertrouwen webbrowsers, besturingssystemen en andere software deze certificaten niet automatisch.
- Browser Waarschuwingen: Moderne webbrowsers tonen waarschuwingen wanneer ze een self-signed certificaat tegenkomen. Dit kan gebruikers afschrikken en het vertrouwen in je website of applicatie verminderen.
- Geen Revocatie Mogelijkheid: Self-signed certificaten kunnen niet worden ingetrokken. Als een certificaat wordt gecompromitteerd, kun je het niet ongeldig maken, wat een beveiligingsrisico vormt.
- Beveiligingsrisico’s: Zonder validatie door een CA bieden self-signed certificaten niet hetzelfde niveau van beveiliging. Dit kan een potentieel toegangspunt voor aanvallers creëren.
- Handmatige Configuratie: Het gebruik van self-signed certificaten vereist vaak handmatige configuratie en beheer. Dit kan foutgevoelig zijn en leiden tot zwakke cryptografische standaarden.
Hoewel self-signed certificaten niet geschikt zijn voor productieomgevingen waar beveiliging en vertrouwen cruciaal zijn, bieden ze een snelle en kosteneffectieve oplossing voor interne en testdoeleinden. Door PowerShell te gebruiken, kun je deze certificaten eenvoudig en efficiënt aanmaken, wat je ontwikkelproces kan versnellen.
Hieronder volgt een voorbeeldscript:
# Definiëren variabelen inclusief het account om de private key te beheren
$FriendlyName = "Friendly name"
$DNS = "domain.com"
$TEMP = "$env:TEMP"
$CertStorePersonal = "Cert:\LocalMachine\My"
$CertStoreTrusted = "Cert:\LocalMachine\Root"
$Credential = Get-Credential
$Password = $Credential.password
$UserName = $Credential.username
# Aanmaken self-signed certificaat
$cert = New-SelfSignedCertificate -KeyUsage KeyAgreement -KeyExportPolicy Exportable -KeyDescription $FriendlyName `
-KeyFriendlyName $FriendlyName -FriendlyName $FriendlyName -Subject $DNS -DnsName $DNS -CertStoreLocation `
$CertStorePersonal
# Exporteren van PFX zodat we die in de Trusted Root Store kunnen importeren
Export-PfxCertificate -Cert $cert -FilePath "$TEMP\$FriendlyName.pfx" -Password $Password
Import-PfxCertificate -Password $Password -CertStoreLocation $CertStoreTrusted -FilePath "$TEMP\$FriendlyName.pfx"
# Toevoegen ACL aan de private key
$SSLCert = Get-ChildItem $CertStorePersonal | Where-Object { $_.Thumbprint -eq $thumbprint }
$privKey = ([System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($Cert)).key.UniqueName
$keyPath = "$($env:ProgramData)\Microsoft\Crypto\Keys\"
$privKeyPath = (Get-Item "$keyPath\$privKey")
$Acl = Get-Acl $privKeyPath
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule($UserName, "Read", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $privKeyPath.FullName $Acl
# Verwijderen van een self-signed certificaat gaat op dezelfde manier
Get-ChildItem $CertStorePersonal | Where-Object {$_.FriendlyName -match $FriendlyName} | Remove-Item
Get-ChildItem $CertStoreTrusted | Where-Object {$_.FriendlyName -match $FriendlyName} | Remove-Item
Meer informatie over PowerShell vind je hier. Meer informatie over de auteur van deze blog post vind je hier.