mirror of
https://github.com/Icinga/icinga-powershell-framework.git
synced 2025-12-21 07:10:15 -05:00
112 lines
No EOL
4 KiB
PowerShell
112 lines
No EOL
4 KiB
PowerShell
param($Config = $null);
|
|
|
|
function ClassCertificates()
|
|
{
|
|
param($Config = $null);
|
|
|
|
[hashtable]$CertStore = @{};
|
|
[hashtable]$CertLocation = @{};
|
|
[hashtable]$CertCounters = @{};
|
|
|
|
Set-Location 'cert:' | Out-Null;
|
|
$certs = Get-ChildItem -Recurse;
|
|
|
|
foreach ($cert in $certs) {
|
|
if ($cert.LocationName) {
|
|
if ($CertStore.ContainsKey($cert.LocationName) -eq $FALSE) {
|
|
$CertStore.Add($cert.LocationName, @{});
|
|
}
|
|
}
|
|
|
|
if ($cert.IssuerName) {
|
|
[hashtable]$Certificate = @{};
|
|
$Certificate.Add('Archived', $cert.Archived);
|
|
$Certificate.Add('HasPrivateKey', $cert.HasPrivateKey);
|
|
$Certificate.Add('IssuerName.Name', $cert.IssuerName.Name);
|
|
$Certificate.Add('IssuerName.Oid', $cert.IssuerName.Oid);
|
|
$Certificate.Add('NotAfter', $cert.NotAfter);
|
|
$Certificate.Add('NotBefore', $cert.NotBefore);
|
|
$Certificate.Add('SerialNumber', $cert.SerialNumber);
|
|
$Certificate.Add('SubjectName.Name', $cert.SubjectName.Name);
|
|
$Certificate.Add('SubjectOid.Oid', $cert.SubjectName.Oid);
|
|
$Certificate.Add('SignatureAlgorithm.Value', $cert.SignatureAlgorithm.Value);
|
|
$Certificate.Add('SignatureAlgorithm.FriendlyName', $cert.SignatureAlgorithm.FriendlyName);
|
|
$Certificate.Add('Thumbprint', $cert.Thumbprint);
|
|
$Certificate.Add('Version', $cert.Version);
|
|
$Certificate.Add('Issuer', $cert.Issuer);
|
|
$Certificate.Add('Subject', $cert.Subject);
|
|
$Certificate.Add('PSParentPath', $cert.PSParentPath);
|
|
$Certificate.Add('PSChildName', $cert.PSChildName);
|
|
$Certificate.Add('DnsNameList', $cert.DnsNameList);
|
|
|
|
[string]$cert_store = (GetCertStore -CertPath $cert.PSPath);
|
|
[string]$cert_location = (GetCertLocation -CertPath $cert.PSPath);
|
|
|
|
$Certificate.Add('CertStore', $cert_store);
|
|
$Certificate.Add('CertLocation', $cert_location);
|
|
|
|
if ($CertLocation.ContainsKey($cert_location)) {
|
|
$CertLocation[$cert_location] += $Certificate;
|
|
} else {
|
|
$CertLocation.Add($cert_location, @( $Certificate ));
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($cert_arr in $CertLocation.Keys) {
|
|
foreach ($cert in $CertLocation[$cert_arr]) {
|
|
[string]$CertFullPathCache = [string]::Format(
|
|
'{0}\{1}\{2}',
|
|
$cert.CertStore,
|
|
$cert.CertLocation,
|
|
$cert.Thumbprint
|
|
);
|
|
if ($CertCounters.ContainsKey($CertFullPathCache) -eq $FALSE) {
|
|
$CertCounters.Add($CertFullPathCache, 1);
|
|
} else {
|
|
$CertCounters[$CertFullPathCache] += 1;
|
|
}
|
|
if ($CertStore[$cert.CertStore].ContainsKey($cert.CertLocation)) {
|
|
[string]$CertThumbprintKey = $cert.Thumbprint;
|
|
if ($CertCounters[$CertFullPathCache] -gt 1) {
|
|
$CertThumbprintKey = [string]::Format(
|
|
'{0} ({1})',
|
|
$CertThumbprintKey,
|
|
$CertCounters[$CertFullPathCache]
|
|
);
|
|
}
|
|
$CertStore[$cert.CertStore][$cert.CertLocation].Add($CertThumbprintKey, $cert);
|
|
} else {
|
|
$CertStore[$cert.CertStore].Add($cert.CertLocation, @{ $cert.Thumbprint = $cert });
|
|
}
|
|
}
|
|
}
|
|
|
|
return $CertStore
|
|
}
|
|
|
|
function GetCertStore()
|
|
{
|
|
param([string]$CertPath);
|
|
|
|
$CertPath = $CertPath.Replace('Microsoft.PowerShell.Security\', '');
|
|
$CertPath = $CertPath.Replace('Certificate::', '');
|
|
|
|
[array]$path = $CertPath.Split('\');
|
|
|
|
return $path[0];
|
|
}
|
|
|
|
function GetCertLocation()
|
|
{
|
|
param([string]$CertPath);
|
|
|
|
$CertPath = $CertPath.Replace('Microsoft.PowerShell.Security\', '');
|
|
$CertPath = $CertPath.Replace('Certificate::', '');
|
|
|
|
[array]$path = $CertPath.Split('\');
|
|
|
|
return $path[1];
|
|
}
|
|
|
|
return ClassCertificates -Config $Config; |