Nøkkelferdig passordfjase

Som sikkert de fleste av oss har jeg diverse (windows)skript og greier liggende i mer eller mindre offentlig tilgjengelige git-repoer og slikt, som av og til trenger å vite passord for å autentisere mot ymse tjenester.  Dersom man kjører skriptene med en dedikert bruker kan man enkelt ivareta passordsikkerheten ved å foreksempel dumpe et PSCredential-object, men det er kanskje ikke det mest elegante.  I mange tilfeller ønsker man å la jobbene kjøres av task scheduler som en av de innebygde kontoene i windows (network system el.l.), og da kan man ikke lenger bruke PSCredential, siden den inneholder passord som securestring, som igjen er kryptert med en eller annen bruker-spesifik nøkkel (tror jeg).

Enter RSA Key Containers.

Opprett først en RSA Key Container:

PS C:\Windows\Microsoft.NET\Framework\v4.0.30319> aspnet_regiis -pc "MyContainer" -exp

exporter public key

PS C:\Windows\Microsoft.NET\Framework\v4.0.30319> aspnet_regiis -px "MyContainer" mykey.xml

For å kryptere noe hemmelig med denne nøkkelen:

PS M:\> $key = [xml](get-content .\mykey.xml)
PS M:\> $rsa = New-Object System.Security.Cryptography.RSACryptoServiceProvider
PS M:\> $rsa.FromXmlString($key)
PS M:\> $enc = [System.Text.Encoding]::UTF8
PS M:\> $txt = "fjodor riktig blasert sørensen"
PS M:\> $rsa.Encrypt($enc.GetBytes($txt), $true) | Out-File garble.foo -Encoding ascii

garble.foo skulle nå være trygg å putte på github eller whatever.

for å dekryptere:

PS M:\> $csp = New-Object System.Security.Cryptography.CspParameters
PS M:\> $csp.KeyContainerName = "MyContainer"
PS M:\> $csp.Flags = [System.Security.Cryptography.CspProviderFlags]::UseMachineKeyStore -bor [System.Security.Cryptography.CspProviderFlags]::UseExistingKey
PS M:\> $rsa = [System.Security.Cryptography.RSACryptoServiceProvider]::new($csp)
PS M:\> $enc = [System.Text.Encoding]::UTF8
PS M:\> $enc.GetString($rsa.Decrypt((Get-Content .\garble.foo), $true))
fjodor riktig blasert sørensen

Kool, hæ?

 

Emneord: crypto, powershell, powerhell, securitythird
Publisert 23. juni 2017 13:47 - Sist endret 23. juni 2017 14:12
Legg til kommentar

Logg inn for å kommentere

Ikke UiO- eller Feide-bruker?
Opprett en WebID-bruker for å kommentere