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"