Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do LDAP query using Powershell and PKI

I'm new to Powershell, and I'm trying to do a secure LDAP query using PKI authentication. I'm getting stuck on how to set the certificate and key. Based on Googling/research, I have some of the basics, e.g.:

$connection = new-object System.DirectoryServices.Protocols.LDAPConnection('$domainName:$portNum')
[string[] $get] = "$attribute1", "$attribute2", "attribute3"
$request = new-object System.DirectoryServices.Protocol.SearchRequest("$targetOu", "$filter", "subtree", $get)
$response = new-object $connection.SendRequest($request)

Like I said, I'm getting stuck on how to set/send the certificate and key. I thought I could do $connection.ClientCertificates = $path, but that property is read-only. I also thought I had to do something with $System.Net.NetworkCredential, but I'm not sure if the cert and key actually correspond to username and password. I referred to a Perl script that did an LDAP query and used PKI, and you could do:

clientcert => '/path/to/cert.pem'
clientkey => '/path/to/key.pem'

What's the equivalent for Powershell? Do I have to do something with System.Security.Cryptography.X509Certificates.X509Certificate?

Any help would be appreciated!

like image 237
nomad8 Avatar asked Feb 12 '26 15:02

nomad8


1 Answers

$connection.ClientCertificates.Add($cert)

the $cert must be X509Certificate class and get certificates from store using

$allPersonalCerts = @( Get-ChildItem -Path 'Cert:\CurrentUser\my' )

It returns array of X509Certificate objects (or X509Certificate2 which is child class for X509Certificate )

NB: When doing PowerShell programming, you can always search for help by googling C# or VB.net solutions. This is .Net and examples on .net-oriented languages just differ on syntax

like image 54
filimonic Avatar answered Feb 15 '26 09:02

filimonic