[TROUBLESHOOTING] – SCOM 2012 : Résoudre les problèmes de certificats SCOM 2012/2007 avec Powershell

4
69

Mettre en place un système de certificat pour une infrastructure SCOM 2007 ou SCOM 2012 n’est pas de tout repos. La team Microsoft a retrouvé un ancien script Powershell anciennement écrit pour SCOM 2007 mais toujours compatible avec SCOM 2012.

Le script ne requiert pas le module powershell SCOM pour son bon fonctionnement.

Voici le script en question :

# OMv3CertCheck.ps1
# 1/2009
#
# Update 2/2009
#    Fixes for subjectname validation
#    Typos
#    Modification for CA chain validation
#    Adds needed check for MachineKeyStore property on the private key
#
# Update 7/2009
#    Fix for workgroup machine subjectname validation
#

# Consider all certificates in the Local Machine "Personal" store
$certs = [Array] (dir cert:LocalMachinemy)

write-host "Checking that there are certs in the Local Machine Personal store..."
if ($certs -eq $null)
{
Write-Host "There are no certs in the Local Machine `"Personal`" store."
Write-Host "This is where the client authentication certificate should be imported."
Write-Host "Check if certificates were mistakenly imported to the Current User"
Write-Host "`"Personal`" store or the `"Operations Manager`" store."
exit
}

write-host "Verifying each cert..."
foreach ($cert in $certs)
{
write-host "`nExamining cert - Serial number $($cert.SerialNumber)"
write-host "---------------------------------------------------"

    $pass = $true

# Check subjectname

$pass = &{
$fqdn = $env:ComputerName
$fqdn += "." + [DirectoryServices.ActiveDirectory.Domain]::GetComputerDomain().Name
trap [DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException]
{
# Not part of a domain
continue;
}

$fqdnRegexPattern = "CN=" + $fqdn.Replace(".",".") + '(,.*)?$'

if (!( $cert.SubjectName.Name -match $fqdnRegexPattern ))
{
Write-Host "Cert subjectname" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tThe SubjectName of this cert does not match the FQDN of this machine."
Write-Host "`tActual - $($cert.SubjectName.Name)"
Write-Host "`tExpected (case insensitive)- CN=$fqdn"
$false
} else { $true; Write-Host "Cert subjectname" -BackgroundColor Green -ForegroundColor Black }
}

# Verify private key

if (!( $cert.HasPrivateKey ))
{
Write-Host "Private key" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tThis certificate does not have a private key."
Write-Host "`tVerify that proper steps were taken when installing this cert."
$pass = $false
} elseif (!($cert.PrivateKey.CspKeyContainerInfo.MachineKeyStore))
{
Write-Host "Private key" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tThis certificate's private key is not issued to a machine account."
Write-Host "`tOne possible cause of this is that the certificate"
Write-Host "`twas issued to a user account rather than the machine,"
Write-Host "`tthen copy/pasted from the Current User store to the Local"
Write-Host "`tMachine store.  A full export/import is required to switch"
Write-Host "`tbetween these stores."
$pass = $false
}
else { Write-Host "Private key" -BackgroundColor Green -ForegroundColor Black }

    # Check expiration dates

if (($cert.NotBefore -gt [DateTime]::Now) -or ($cert.NotAfter -lt [DateTime]::Now))
{
Write-Host "Expiration" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tThis certificate is not currently valid."
Write-Host "`tIt will be valid between $($cert.NotBefore) and $($cert.NotAfter)"
$pass = $false
} else { Write-Host "Expiration" -BackgroundColor Green -ForegroundColor Black }

# Enhanced key usage extension

$enhancedKeyUsageExtension = $cert.Extensions |? {$_.ToString() -match "X509EnhancedKeyUsageExtension"}
if ($enhancedKeyUsageExtension -eq $null)
{
Write-Host "Enhanced Key Usage Extension" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tNo enhanced key usage extension found.`n"
$pass = $false
}
else
{
$usages = $enhancedKeyUsageExtension.EnhancedKeyUsages
if ($usages -eq $null)
{
Write-Host "Enhanced Key Usage Extension" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tNo enhanced key usages found.`n"
$pass = $false
}
else
{
$srvAuth = $cliAuth = $false
foreach ($usage in $usages)
{
if ($usage.Value -eq "1.3.6.1.5.5.7.3.1") { $srvAuth = $true}
if ($usage.Value -eq "1.3.6.1.5.5.7.3.2") { $cliAuth = $true}
}
if ((!$srvAuth) -or (!$cliAuth))
{
Write-Host "Enhanced Key Usage Extension" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tEnhanced key usage extension does not meet requirements."
Write-Host "`tRequired EKUs are 1.3.6.1.5.5.7.3.1 and 1.3.6.1.5.5.7.3.2"
Write-Host "`tEKUs found on this cert are:"
$usages |%{ Write-Host "`t$($_.Value)" }
$pass = $false
}
else { Write-Host "Enhanced Key Usage Extension" -BackgroundColor Green -ForegroundColor Black }
}
}

# KeyUsage extension

$keyUsageExtension = $cert.Extensions |? {$_.ToString() -match "X509KeyUsageExtension"}
if ($keyUsageExtension -eq $null)
{
Write-Host "Key Usage Extensions" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tNo key usage extension found."
Write-Host "`tA KeyUsage extension matching 0xA0 (Digital Signature, Key Encipherment)"
Write-Host "`tor better is required."
$pass = $false
}
else
{
$usages = $keyUsageExtension.KeyUsages
if ($usages -eq $null)
{
Write-Host "Key Usage Extensions" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tNo key usages found."
Write-Host "`tA KeyUsage extension matching 0xA0 (DigitalSignature, KeyEncipherment)"
Write-Host "`tor better is required."
$pass = $false
}
else
{
if (($usages.value__ -band 0xA0) -ne 0xA0)
{
Write-Host "Key Usage Extensions" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tKey usage extension exists but does not meet requirements."
Write-Host "`tA KeyUsage extension matching 0xA0 (Digital Signature, Key Encipherment)"
Write-Host "`tor better is required."
Write-Host "`tKeyUsage found on this cert matches:"
Write-Host "`t$usages"
$pass = $false
} else { Write-Host "Key Usage Extensions" -BackgroundColor Green -ForegroundColor Black }
}
}

# KeySpec

$keySpec = $cert.PrivateKey.CspKeyContainerInfo.KeyNumber
if ($keySpec -eq $null)
{
Write-Host "KeySpec" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tKeyspec not found.  A KeySpec of 1 is required"
$pass = $false
}
elseif ($keySpec.value__ -ne 1)
{
Write-Host "KeySpec" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tKeyspec exists but does not meet requirements."
Write-Host "`tA KeySpec of 1 is required."
Write-Host "`tKeySpec for this cert: $($keySpec.value__)"
$pass = $false
} else {Write-Host "KeySpec" -BackgroundColor Green -ForegroundColor Black}

# Check that serial is written to proper reg

$certSerial = $cert.SerialNumber
$certSerialReversed = ""
-1..-10 |% {$certSerialReversed += $certSerial[2*$_] + $certSerial[2*$_ + 1]}

if (! (Test-Path "HKLM:SOFTWAREMicrosoftMicrosoft Operations Manager3.0Machine Settings"))
{
Write-Host "Serial number written to registry" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tThe cert serial number is not written to registry."
Write-Host "`tNeed to run MomCertImport.exe"
$pass = $false
}
else
{
$regKeys = get-itemproperty -path "HKLM:SOFTWAREMicrosoftMicrosoft Operations Manager3.0Machine Settings"
if ($regKeys.ChannelCertificateSerialNumber -eq $null)
{
Write-Host "Serial number written to registry" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tThe cert serial number is not written to registry."
Write-Host "`tNeed to run MomCertImport.exe"
$pass = $false
}
else
{
$regSerial = ""
$regKeys.ChannelCertificateSerialNumber |% {$regSerial += $_.ToString("X2")}

if ($regSerial -ne $certSerialReversed)
{
Write-Host "Serial number written to registry" -BackgroundColor Red -ForegroundColor Black
Write-Host "`tThe serial number written to the registry does not match this certificate"
Write-Host "`tExpected registry entry: $certSerialReversed"
Write-Host "`tActual registry entry:   $regSerial"
$pass = $false
} else { Write-Host "Serial number written to registry" -BackgroundColor Green -ForegroundColor Black }
}
}
    # Check that the cert's issuing CA is trusted (This is not technically required
# as it is the remote machine cert's CA that must be trusted.  Most users leverage
# the same CA for all machines, though, so it's worth checking

    $chain = new-object Security.Cryptography.X509Certificates.X509Chain
$chain.ChainPolicy.RevocationMode = 0
if ($chain.Build($cert) -eq $false )
{
Write-Host "Certification chain" -BackgroundColor Yellow -ForegroundColor Black
Write-Host "`tThe following error occurred building a certification chain with this cert:"
Write-Host "`t$($chain.ChainStatus[0].StatusInformation)"
write-host "`tThis is an error if the certificates on the remote machines are issued"
write-host "`tfrom this same CA - $($cert.Issuer)"
write-host "`tPlease ensure the certificates for the CAs which issued the certificates configured"
write-host "`ton the remote machines is installed to the Local Machine Trusted Root Authorities"
write-host "`tstore on this machine."
}
else
{
$rootCaCert = $chain.ChainElements | select -property Certificate -last 1
$localMachineRootCert = dir cert:LocalMachineRoot |? {$_ -eq $rootCaCert.Certificate}
if ($localMachineRootCert -eq $null)
{
Write-Host "Certification chain" -BackgroundColor Yellow -ForegroundColor Black
Write-Host "`tThis certificate has a valid certification chain installed, but"
Write-Host "`ta root CA certificate verifying the issuer $($cert.Issuer)"
Write-Host "`twas not found in the Local Machine Trusted Root Authorities store."
Write-Host "`tMake sure the proper root CA certificate is installed there, and not in"
Write-Host "`tthe Current User Trusted Root Authorities store."
}
else
{
Write-Host "Certification chain" -BackgroundColor Green -ForegroundColor Black
Write-Host "`tThere is a valid certification chain installed for this cert,"
Write-Host "`tbut the remote machines' certificates could potentially be issued from"
Write-Host "`tdifferent CAs.  Make sure the proper CA certificates are installed"
Write-Host "`tfor these CAs."
}

    }

    if ($pass) { Write-Host "`n***This certificate is properly configured and imported for Ops Manager use.***" }
}

pause

 

Source : MicrosoftTouch Technet

4 Commentaires

  1. Big Candy Casino provides 24/7 customer support via live chat and email, ensuring assistance
    whenever players need help with accounts, payments, or games.
    The mobile platform runs perfectly on any modern device, allowing Australian players to enjoy their favorite games
    wherever they go. A Big Candy represents more than a gaming platform, it’s a complete entertainment ecosystem engineered
    for maximum player satisfaction through quality games, generous rewards, and operational transparency.

    Discover intelligent gaming where every element works cohesively, creating an experience greater
    than the sum of individual features through seamless
    integration across games, bonuses, banking, and support infrastructure.
    A Big Candy casino has established itself as a modern platform
    where Australian players can enjoy hundreds of games, fair promotions, and a secure
    environment. Regular players also benefit from weekly
    reload bonuses, cashback offers, and free spin promotions.

    The sign up process is straightforward, and Aussie players will appreciate the
    local touches. However, table games like blackjack or roulette offer a
    classic taste if you’re feeling less sugary and more strategic.
    Licensing details, responsible gaming tools, and fair-play certifications back up
    the casino’s legitimacy. If you’re an Aussie player, these deals might just be the perfect way to sample
    the smorgasbord before deciding whether you want to indulge further.

    In essence, a Big Candy Casino no deposit bonus is your golden ticket to test-drive the platform.

    You might even stumble upon references to a big
    candy casino real money opportunity, offering
    you a shot at legitimate payouts without risking your wallet.

    References:
    https://blackcoin.co/no-deposit-casino-bonuses-for-australia-free-spins-signup-cash-offers/

  2. Starte mit einem 100 % Match bis zu €500, plus 200
    Freispiele und einem Bonus Crab, wenn du mindestens €20 einzahlst.
    Speichere unsere Seite einfach auf dem Startbildschirm deines Geräts, um sofort die mobile
    Webversion zu erleben. Egal, ob du strategisches Spiel bevorzugst oder schnelle Runden suchst – der Tischspielbereich hält dich immer unterhalten. Im Bereich Live
    Games bei TikiTaka Casino kommen klassische Tischspiele nie aus der Mode.
    Wenn du mehr als nur automatische Walzen willst,
    bringt unser Live-Casino das echte Casinoerlebnis zu dir
    nach Hause. Wir arbeiten eng mit Providern wie Pragmatic
    Play, Novomatic, 3OAKS, ELK und Thunderkick zusammen, um kontinuierlich frische Erlebnisse zu bieten.
    Zusätzlich erhältst du 200 Freispiele und einen Bonus Crab.

    Unsere Transaktionen sind schnell, zuverlässig und unterstützen 100 %
    deines Einzahlungsbetrags für berechtigte Boni. Wir empfehlen, immer die neueste
    Browserversion zu verwenden, um das beste
    mobile Spielerlebnis zu genießen. Unsere mobile Webversion passt sich allen Bildschirmgrößen an,
    ist stabil und schnell. Speichere unsere Website einfach auf
    deinem Startbildschirm (Android oder iOS) und genieße ein natives App-Erlebnis.

    References:
    https://online-spielhallen.de/lukki-casino-promo-code-maximaler-spielspas-bonusse/

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici