Zertifikate mittels certreq und Powershell von CA ausstellen lassen
Guten Morgen zusammen,
wir bauen hier gerade unsere interne PKI Struktur um bzw. neu auf.
Dabei kommt eine Offline Root CA mittels Server 2025 zum Einsatz und derzeit eine Online SubCA (Server 2025) für das ausstellen von Webserver Zertifikaten.
Eine weitere SubCA ist gerade noch in Arbeit für unsere Firewall, da SSL Encryption erfolgt und eine weitere SubCA soll für die FAS / SAML Konfiguration auf unserer Citrix VDI zum Einsatz kommen.
Da wir stand jetzt so ca. 300 Webserver Zertifikate haben, möchte ich das erneuern ein bisschen "schöner" gestalten.
Bislang gehen die Kollegen immer in die MMC.exe machen sich die "Persönlichen Zertifikate" auf und erstellen darin ein neues Zertifikat mit dem Assistenten...alles andere als Komfort!
Nun habe ich mich daran versucht mittels certreq das beantragen und ausstellen etwas zu vereinfachen...grundsätzlich haben wir drei Kollegen die mit entsprechenden Berechtigungen ausgestattet sind mittels einer Zertifikatsvorlage entsprechende zu beantragen und auszustellen.
Powershell Skript zum erstellen der "INF Datei"
So daraus erhalte ich dann die Ausgabe als INF Datei
Nun zu meinen eigentlichen Problemen:
Sollte ich den Weg mit dem einreichen des Requests, dem submit an die CA und das accepten ebenfalls in das PS Skript integrieren? Fände ich eigentlich schöner.
Sodass die Kollegen nur noch das PS Srkipt ausführen, nach den DNS-namen gefragt werden und alles automatisch auf dem Fileserver abgelegt wird...
Könnte mir da ggf. jemand mit Powershell Erfahrung helfen? Langsam verzweifele ich an meinen Experimenten mit ChatGPT, was mir bis hierhin gut geholfen hat. Aber wenn man davon zu wenig Ahnung hat und nicht weiß was man die KI Fragen soll...
Ps.
Vielleicht mag der ein oder andere mal eine Rückmeldung geben, wie das bei Ihm mit dem Ausstellen von Zertifikaten umgesetzt ist / wird.
Ich kann mir nicht vorstellen, dass es spaßig ist über die Zertifikats MMC 200x den FirmenNamen, Abteilung, DNS Namen usw. einzutragen...
Beste Grüße
wir bauen hier gerade unsere interne PKI Struktur um bzw. neu auf.
Dabei kommt eine Offline Root CA mittels Server 2025 zum Einsatz und derzeit eine Online SubCA (Server 2025) für das ausstellen von Webserver Zertifikaten.
Eine weitere SubCA ist gerade noch in Arbeit für unsere Firewall, da SSL Encryption erfolgt und eine weitere SubCA soll für die FAS / SAML Konfiguration auf unserer Citrix VDI zum Einsatz kommen.
Da wir stand jetzt so ca. 300 Webserver Zertifikate haben, möchte ich das erneuern ein bisschen "schöner" gestalten.
Bislang gehen die Kollegen immer in die MMC.exe machen sich die "Persönlichen Zertifikate" auf und erstellen darin ein neues Zertifikat mit dem Assistenten...alles andere als Komfort!
Nun habe ich mich daran versucht mittels certreq das beantragen und ausstellen etwas zu vereinfachen...grundsätzlich haben wir drei Kollegen die mit entsprechenden Berechtigungen ausgestattet sind mittels einer Zertifikatsvorlage entsprechende zu beantragen und auszustellen.
Powershell Skript zum erstellen der "INF Datei"
# Define the variables
$dnsNames = Read-Host "Enter the DNS Names (comma-separated, e.g., example.com,www.example.com)" # Multiple DNS names
$dnsNamesArray = $dnsNames.Split(',') # Split the input string into an array
$company = "Meine Firma GmbH" # Modify to your company name
$department = "Geschäftsbereich IT" # Modify to your department
$city = "Meine Stadt" # Modify to your city
$state = "Mein Bundesland" # Modify to your state
$country = "DE" # Modify to your country code, e.g., DE for Germany
$Template = "Custom - Webserver" (so heißt meine Vorlage in der CA)
# Define the file path for the INF file
$infFilePath = ".\request.inf"
# Start creating the INF content
$infContent = @"
[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "CN=$($dnsNamesArray[0]), O=$company, OU=$department, L=$city, S=$state, C=$country"
KeySpec = 1
KeyLength = 4096
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
RequestType = PKCS10
Exportable = TRUE
Template = "$Template"
[Extensions]
2.5.29.17 = "{text}"
"@
# Add each DNS name as a SAN entry
foreach ($dns in $dnsNamesArray) {
$infContent += "_continue_ = 'dns=$dns'" + "`n"
}
# Write the content to the INF file
$infContent | Out-File -FilePath $infFilePath -Encoding ASCII
Write-Host "INF file created successfully at $infFilePath"
So daraus erhalte ich dann die Ausgabe als INF Datei
[Version]
Signature=" NT$"
[NewRequest]
Subject = "CN=commonname.domain.tld, O=Meine Firma GmbH, OU=Geschäftsbereich IT, L=Meine Stadt, S=Mein Bundesland, C=DE"
KeySpec = 1
KeyLength = 4096
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
RequestType = PKCS10
Exportable = TRUE
Template = "Custom - Webserver"
[Extensions]
2.5.29.17 = "{text}"_continue_ = 'dns=commonname.domain.tld'
_continue_ = 'dns=commonname'
_continue_ = 'dns=dnsalias'
Nun zu meinen eigentlichen Problemen:
- Wie bekomme ich es hin, dass meine erstelle INF Datei den Namen "commonname.INF" erhält?
- Bei dem versuch einen Request an die CA zu geben erhalten wir folgende Meldung:
- Dabei fällt auf, dass die erzeugte INF Datei die Formatierung falsch aufschlüsselt.
[Extensions]
2.5.29.17 = "{text}"_continue_ = 'dns=commonname.domain.tld'
_continue_ = 'dns=commonname'
- Wenn ich nun nur einen DNS Namen habe und damit arbeite kommt die Meldung, dass das "Template" (Custom - Webserver) ungültig sei.
Sollte ich den Weg mit dem einreichen des Requests, dem submit an die CA und das accepten ebenfalls in das PS Skript integrieren? Fände ich eigentlich schöner.
Sodass die Kollegen nur noch das PS Srkipt ausführen, nach den DNS-namen gefragt werden und alles automatisch auf dem Fileserver abgelegt wird...
Könnte mir da ggf. jemand mit Powershell Erfahrung helfen? Langsam verzweifele ich an meinen Experimenten mit ChatGPT, was mir bis hierhin gut geholfen hat. Aber wenn man davon zu wenig Ahnung hat und nicht weiß was man die KI Fragen soll...
Ps.
Vielleicht mag der ein oder andere mal eine Rückmeldung geben, wie das bei Ihm mit dem Ausstellen von Zertifikaten umgesetzt ist / wird.
Ich kann mir nicht vorstellen, dass es spaßig ist über die Zertifikats MMC 200x den FirmenNamen, Abteilung, DNS Namen usw. einzutragen...
Beste Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 672187
Url: https://administrator.de/forum/zertifikate-mittels-certreq-und-powershell-von-ca-ausstellen-lassen-672187.html
Ausgedruckt am: 30.03.2025 um 14:03 Uhr
1 Kommentar
Wenn ich nun nur einen DNS Namen habe und damit arbeite kommt die Meldung, dass das "Template" (Custom - Webserver) ungültig sei.
das ist vermutlich hier das Problem:
$dnsNames = Read-Host "Enter the DNS Names (comma-separated, e.g., example.com,www.example.com)" # Multiple DNS names
$dnsNamesArray = $dnsNames.Split(',') # Split the input string into an array
es garnicht mehrere Werte gibt, und er Splitet dann?
Und dann kanns hier auch zum Problem kommen:
foreach ($dns in $dnsNamesArray) {
$infContent += "_continue_ = 'dns=$dns'" + "`n"
}
bedeutet logischerweise wenn du nur einen DNS Namen hast hat er schon ein Problem oben beim Split befehl und dein Array ist ggf. leer oder zustand unbekannt.
Du musst quasi If Else machen
If $dnsNames beinhaltet "," dann das Array erstellen wie du es machst mit Split.
Else
$dnsNamesArray = '$dnsName' >> Weil ja nur 1 Wert ins Array kommt
Dann existiert nur im Array das [0] er Element.
Dann klappt unten das auch mit dem foreeach.... schleife von dir.
Aber Powershell sprech ich nicht fliessend daher musst code selbst rausbasteln
kannst auch den Array Inhalt ausgeben lassen, also wieviele Werte drin sind zur Kontrolle:
$dnsNamesArray.count
Wenn da eine 0 zurückkommt, haste ein leeres Array oder ein $Null Array was dann nicht benutzt werden kann mit deiner foreach schleife.