ralus67
Goto Top

Zertifikate auf Remoter Arbeitsstation mittels Powershell installieren

Hallo Community

Ich habe folgende Herausforderung. Ich habe selbstsignierte Zertifikate, welche ich über Powershell auf die Arbeitsstation installieren möchte. Die Installation von selbstsignierten Zertifikate über eine GPO erachte ich, administrativ gesehen als nicht die geeignete Lösung.

Wie könnte so ein Powershell Skript aussehen?

Die Grundlagen sind folgende:

Windows 10 Maschinen. Powershell Skripte sind standardmässig nicht erlaubt.
Die Zertifikate sind in einem Verzeichnis auf einem Linux Server abgelegt, könnten aber auch auf einem Windows Server abgelegt werden.

Anscheinend kann man mit "Enter-PSSession -Computername ip-adresse" bzw "Enable-PSRemoting -Force" eine remote Powershell ausführen.

Hat jemand ein Skript Beispiel wie ich die Zertifikate über Powershell remote installieren könnte?

Danke im Voraus für Eure Hilfe

Content-ID: 667269

Url: https://administrator.de/contentid/667269

Ausgedruckt am: 19.11.2024 um 06:11 Uhr

Pjordorf
Pjordorf 02.06.2021 um 13:23:27 Uhr
Goto Top
Hallo,

Zitat von @Ralus67:
Ich habe folgende Herausforderung. Ich habe selbstsignierte Zertifikate, welche ich über Powershell auf die Arbeitsstation installieren möchte. Die Installation von selbstsignierten Zertifikate über eine GPO erachte ich, administrativ gesehen als nicht die geeignete Lösung.
Womit genau hast du Bauchschmerz?

Gruß,
Peter
Ralus67
Ralus67 02.06.2021 um 13:34:30 Uhr
Goto Top
Kenne mich mit Powershell zu wenig aus.
lcer00
lcer00 02.06.2021 um 13:46:50 Uhr
Goto Top
Hallo,
Zitat von @Ralus67:

Hallo Community

Die Installation von selbstsignierten Zertifikate über eine GPO erachte ich, administrativ gesehen als nicht die geeignete Lösung.

Warum nicht? Meiner Meinung nach ist das sogar die beste Lösung.

Von was für Zertifikaten reden wir eigentlich? A) Benutzerzertifikate B) Computerzertifikate C) Zertifikate vertrauenswürdiger Zertifizierungsstellen?

Grüße

lcer
Ralus67
Ralus67 02.06.2021 um 13:57:32 Uhr
Goto Top
Wir sprechen von Computer Zertifikate

Und im Skript müsste man sich auf dem UNC Pfad Authentifizieren
148656
148656 02.06.2021 um 14:35:30 Uhr
Goto Top
Zitat von @Ralus67:

Kenne mich mit Powershell zu wenig aus.
Wenn ich mir deine letzten Beiträge so durchlese... Kann es an der mangelnden Hilfe der Forummitglieder nicht liegen.
em-pie
em-pie 02.06.2021 um 14:41:17 Uhr
Goto Top
Moin,

Zitat von @Ralus67:
Kenne mich mit Powershell zu wenig aus.
Also spätestens dann wäre der Weg via GPO doch prädestiniert face-smile

https://www.gruppenrichtlinien.de/artikel/zertifikate-verteilen

Gruß
em-pie
Ralus67
Ralus67 02.06.2021 um 15:29:37 Uhr
Goto Top
Hab ich gesagt es sei mangelnde Hilfe der Formmitglieder?

Ich bin was Powershell angeht, noch Anfänger. Deswegen suche ich Hilfe. Wären meine Kenntnissse so toll, dann würde ich bestimmt keine Fragen stellen.
lcer00
lcer00 02.06.2021 um 16:25:10 Uhr
Goto Top
Hallo,
Zitat von @Ralus67:

Hab ich gesagt es sei mangelnde Hilfe der Formmitglieder?

Ich bin was Powershell angeht, noch Anfänger. Deswegen suche ich Hilfe. Wären meine Kenntnissse so toll, dann würde ich bestimmt keine Fragen stellen.
Wir wollen ja auch alle helfen. Aber niemand hier scheint Zertifikate auf Windows System über diesen Weg verteilen zu wollen. Mir fallen hier auch kaum sinnvolle Anwendungen ein. Mach das ordentlich über GPOs.

Womit hast Du denn die Zertifikate erstellt?

Grüße

lcer
Ralus67
Ralus67 02.06.2021 um 16:36:09 Uhr
Goto Top
Hallo Icer

Die Geschichte ist so, dass die Zeretifikate über eine externe PKI erstellt wurden. Die Erstellung der Zertifikate wurde automatisch durchgeführt. Nun muss ich einen Weg finden, wie diese Zertifikate dann automatisch auf die Maschine kommen und installiert werden. Deswegen sehe ich Powershell als einzige Lösung.
em-pie
em-pie 02.06.2021 um 16:43:36 Uhr
Goto Top
Zitat von @Ralus67:

Hallo Icer

Die Geschichte ist so, dass die Zeretifikate über eine externe PKI erstellt wurden. Die Erstellung der Zertifikate wurde automatisch durchgeführt. Nun muss ich einen Weg finden, wie diese Zertifikate dann automatisch auf die Maschine kommen und installiert werden.
Also eine Allerweltsaufgabe face-smile

Deswegen sehe ich Powershell als einzige Lösung.
Und weshalb?

Hast du das Zertifikat als Datei vorliegen?
Wenn ja, siehe meinen Link oben!
Wenn Nein, wird dir die PS auch nicht sonderlich helfen face-smile
colinardo
colinardo 02.06.2021 aktualisiert um 17:27:17 Uhr
Goto Top
Servus.
Zitat von @Ralus67:
Die Geschichte ist so, dass die Zeretifikate über eine externe PKI erstellt wurden. Die Erstellung der Zertifikate wurde automatisch durchgeführt. Nun muss ich einen Weg finden, wie diese Zertifikate dann automatisch auf die Maschine kommen und installiert werden. Deswegen sehe ich Powershell als einzige Lösung.
Genau dafür ist die GPO-Verteilung doch perfekt?! Wenn du es warum auch immer noch immer mit der PS machen willst, kein Problem aber eigentlich überflüssige Arbeit die du dir da aufbürdest und sind wir nicht alle immer voll ausgelastet? Du anscheinend nicht face-smile

Entweder als Startskript auf den Clients per GPO zugewiesen (welches automatisch elevated ausgeführt wird)
Import-Certificate -FilePath '\\Server\Share\cert.cer' -CertStoreLocation cert:\LocalMachine\My  
Bitte daran denken das das Computerobjekt auf das Share und in den NTFS Berechtigungen Leserechte auf den Pfad bekommen muss.

Oder als Beispiel von einer Remote-Maschine aus mit entsprechend berechtigtem Account ausgeführt, jetzt als Beispiel nur für einen Computer, kann man ja dann über eine Schleife auf die gewünschten Maschinen abfeuern.
$computer = 'ComputerXYZ'  
$certpath = 'C:\certs\mycert.cer'  
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store "\\$computer\My",'LocalMachine'  
$store.Open('ReadWrite')  
$store.Add([System.Security.Cryptography.X509Certificates.X509Certificate2]::CreateFromCertFile($certpath))
$store.Close()
Na denn viel Spaß wünsche ich.

Grüße Uwe
Ralus67
Ralus67 02.06.2021 um 16:50:53 Uhr
Goto Top
Danke Uwe

Ich probier das mal aus
lcer00
lcer00 02.06.2021 um 16:53:40 Uhr
Goto Top
Hallo,
Zitat von @colinardo:
Na denn viel Spaß wünsche ich.

Infos gibts auch noch hier: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell. ...

Powershell kann den Zertifikatsstore nämlich wie das normale Dateisystem oder die Registry direkt adressieren. Dann geht z.B. so etwas

Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
  -Destination cert:\LocalMachine\WebHosting

Grüße

lcer
Ralus67
Ralus67 02.06.2021 um 16:58:58 Uhr
Goto Top
Danke Icer

Ich probier das auch mal aus.....

Ist für mich noch ein langer Weg, bis ich Powershell begreife :-S
erikro
erikro 02.06.2021 um 19:59:54 Uhr
Goto Top
Moin,

Zitat von @colinardo:

Servus.
Zitat von @Ralus67:
Die Geschichte ist so, dass die Zeretifikate über eine externe PKI erstellt wurden. Die Erstellung der Zertifikate wurde automatisch durchgeführt. Nun muss ich einen Weg finden, wie diese Zertifikate dann automatisch auf die Maschine kommen und installiert werden. Deswegen sehe ich Powershell als einzige Lösung.
Genau dafür ist die GPO-Verteilung doch perfekt?! Wenn du es warum auch immer noch immer mit der PS machen willst, kein Problem aber eigentlich überflüssige Arbeit die du dir da aufbürdest und sind wir nicht alle immer voll ausgelastet? Du anscheinend nicht face-smile

Wenn schon der große @colinardo, Herr der Powershell, Meister des Editors, Helfer aller Skriptkids in Not sagt: "Nimm doch GPOs!", dann solltest Du wirklich darüber nachdenken, ob Dein Weg der richtige ist. face-wink Und wenn Du Deiner Unkenntnis Abhilfe schaffen möchtest, hier ein wenig Lektüre für den Anfang:
https://docs.microsoft.com/de-de/powershell/
https://www.martinlehmann.de/wp/download/powershell-openbook/

Liebe Grüße

Erik
colinardo
colinardo 02.06.2021 aktualisiert um 21:31:39 Uhr
Goto Top
[OT]
Wenn schon der große @colinardo, Herr der Powershell, Meister des Editors, Helfer aller Skriptkids
Groß ist bei mir nur mein Snüffelstück, und jetzt bloß keine Kommentare ala "Wie die Nase des Mannes so auch sein ..." 🙈
[/OT]
Ralus67
Ralus67 03.06.2021 um 08:09:36 Uhr
Goto Top
Hallo Uwe

mit dem store.open Befehl stimmt etwas nicht. Ich erhalte folgende Fehlermeldung

Exception calling "Open" with "1" argument(s): "The parameter is incorrect.
"
At line:3 char:1

back-to-top$store.Open('ReadWrite')

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : CryptographicException

Was ist die Ursache?
148656
148656 03.06.2021 aktualisiert um 08:36:19 Uhr
Goto Top
Zitat von @Ralus67:
...
Was ist die Ursache?

vage Vermutung .
Der Schüler/Anfänger will sich nicht mit den Grundlagen beschäftigen.
"Debug" lautet der Suchbegriff.
https://docs.microsoft.com/de-de/powershell/scripting/windows-powershell ...
colinardo
colinardo 03.06.2021 aktualisiert um 10:38:27 Uhr
Goto Top
Zitat von @Ralus67:

Hallo Uwe

mit dem store.open Befehl stimmt etwas nicht.
Der Aufruf an sich ist korrekt .
Wenn du es genauer schreiben willst indem man die Enumeration nutzt sieht das so aus
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
Das obige mit 'ReadWrite' ist einfach nur eine Abkürzung und ebenfalls gültig.
Ich erhalte folgende Fehlermeldung

Exception calling "Open" with "1" argument(s): "The parameter is incorrect.
"
At line:3 char:1

back-to-top$store.Open('ReadWrite')

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : CryptographicException

Was ist die Ursache?
Die "CryptographicException" deutet auf unterschiedliche Fehlerquellen hin als da wären
  • Ungenügende Berechtigungen für den Schreibzugriff auf den Machine-Store des Ziel-Computers
  • Der Client vertraut einem Zertifikat des Remote-Computers nicht.
  • Client- und Remote-Computer besitzen unterschiedliche Patchstände bzw. TLS mismatches.
  • Firewall am Remote-Rechner zu restriktiv

Funktioniert hier im Test auch problemlos