Sturbi's Home

  • Gallery
  • Modellflug
  • Datenschutz
  • Impressum

Blog

  • Allgemein (14)
    • Sprüche (6)
  • Angeln (2)
  • Computer (25)
    • Linux (16)
      • Nagios (5)
      • Nginx (4)
      • Postfix (3)
      • Subversion (1)
    • VMware (3)
    • Windows (9)
      • Powershell (8)
  • Fotografie (26)
  • Reise (8)
    • Hawaii (4)
    • Irland (1)
    • USA (5)
Wenn du etwas so machst,
wie du es seit zehn Jahren gemacht hast,
dann sind die Chancen groß,
daß du es falsch machst.

Charles F. Kettering amerikanischer Ingenieur * 29.08.1876, † 25.11.1958

Credentials in Powershell aus KeePass laden

28. November 2013 by Sturbi Kategorie: Powershell, Windows

benötigt werden:

  • KeepPass http://keepass.com/
  • KeePassREST http://www.smartftp.com/keepassrest ( auf passende Version achten!)
  • ein Benutzerzertifikat im Windows Certificatestore z.B. von http://www.startssl.com/

Wir brauchen den Thumbprint des zu verwendenden Zertifikates:

dir cert:\CurrentUser\My

Die UUID des Eintrages aus der KeePass Datenbank

2D993D3EE140572AAC40F91804E3E383CC51BFAA

Der Code zum benutzen eines Usercertificate durch den Webclient ist von http://stackoverflow.com/questions/5621954/how-can-you-add-a-certificate-to-webclient-in-powershell

ACHTUNG:

Die Credentials stehen im Klartext in der Variable $keepasscred. Die Variable sollte so schnell wie möglich wieder gelöscht werden!

Remove-variable "keepasscred"

Zum Schluss haben wir mit $admincredentials ein Object vom Type System.Management.Automation.PSCredential

Hier der gesammte Code:

$def = @"
public class ClientCertWebClient : System.Net.WebClient
{
   System.Net.HttpWebRequest request = null;
   System.Security.Cryptography.X509Certificates.X509CertificateCollection certificates = null;

    protected override System.Net.WebRequest GetWebRequest(System.Uri address)
    {
        request = (System.Net.HttpWebRequest)base.GetWebRequest(address);
        if (certificates != null)
        {
            request.ClientCertificates.AddRange(certificates);
        }
        return request;
    }

    public void AddCerts(System.Security.Cryptography.X509Certificates.X509Certificate[] certs)
    {
        if (certificates == null)
        {
            certificates = new System.Security.Cryptography.X509Certificates.X509CertificateCollection();
        }
        if (request != null)
        {
            request.ClientCertificates.AddRange(certs);
        }
        certificates.AddRange(certs);
    }
}
"@

Add-Type -TypeDefinition $def

$wc = New-Object ClientCertWebClient
$certs = dir cert:\CurrentUser\My | ?{$_.Thumbprint -eq "2D993D3EE140572AAC40F91804E3E383CC51BFAA"}
$wc.AddCerts($certs)
$keepasscred = $wc.DownloadString("https://localhost:12984/keepass/entry/70B660CF23658D4C8F24B60B17017372") | ConvertFrom-Json

$username = $keepasscred.Username
$password = $keepasscred.Password
$admincredentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))

# remove all temporary variables with Cleartextpasswords!
Remove-Variable "keepasscred"
Remove-Variable "username"
Remove-Variable "password"

 

© 2025 · Sturbi's Home