judgelg
Goto Top

Zertifikate in die Exchange Online GAL hochladen

Hallo,

vieleicht kann mir einer helfen. Ich habe die glorreiche Aufgabe, Zertifikate (*.cert, *.pem) in die GAL von Exchange Online hoch zuladen. Es sind aber an die 700 Zertifikate. Jetzt ist meine Überlegung das ganze mit einem Skript zu realisieren. Alle Zertifkate einzeln hoch zu laden ist nen haufen Aufwand.

Nun zu meiner Frage, gibt es ein Skript oder kann man da was bauen, das man mehrere Zertifikate hochladen kann.

Befehl:
$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\temp\cert.cer")   
$certArray = New-Object System.Collections.ArrayList
$certArray.Insert(0,$cert.GetRawCertData())

 Set-Mailbox -Identity <Mailbox UPN> -UserCertificate $certArray

Ich kenne mich mit Skripten nicht so aus, hoffe etwaige Hilfe vieleicht durch euch.

Danke im Vorraus..

Grüße

Content-ID: 669578

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

Printed on: December 5, 2024 at 16:12 o'clock

150940
Solution 150940 Nov 18, 2024, updated at Nov 21, 2024 at 12:37:59 (UTC)
Goto Top
Wenn im Common Name (CN) der Certs die Haupt-Mailadresse der User-Mailboxen steht dann bspw. so
foreach($file in Get-ChildItem "D:\certs" -File -Filter *.pem){  
    $cert = [System.Security.Cryptography.X509Certificates.x509certificate2]::new($file.Fullname)
    $cn = $cert.Subject -replace '.*CN=([^,]+).*','$1'  
    Set-Mailbox -Identity $cn -UserCertificate (,$cert.GetRawCertData())
}

Ansonsten z.B. Liste der User mit ihren zugehörigen Certs in ne CSV packen und mit Import-CSV und Foreach-Object durchlaufen. Kommt halt drauf an wie du Benennung etc. bei dir regeln willst oder geregelt hast.

Gruß catrell
beck2oldschool
beck2oldschool Nov 18, 2024 at 15:26:08 (UTC)
Goto Top
OT: Oha, ein Lüneburger Aufklärer? Ich bin ein ehem. 12er face-wink
Judgelg
Judgelg Nov 19, 2024 at 05:44:24 (UTC)
Goto Top
Zitat von @beck2oldschool:

OT: Oha, ein Lüneburger Aufklärer? Ich bin ein ehem. 12er face-wink

DITO
Judgelg
Judgelg Nov 19, 2024 updated at 06:00:02 (UTC)
Goto Top
Zitat von @150940:

Wenn im Common Name (CN) der Certs die Haupt-Mailadresse der User-Mailboxen steht dann bspw. so
foreach($file in Get-ChildItem "D:\certs" -File -Filter *.pem){  
    $cert = [System.Security.Cryptography.X509Certificates.x509certificate2]::new($file.Fullname)
    $cn = $cert.Subject -replace '.*CN=([^,]+).*','$1'  
    Set-Mailbox $cn -UserCertificate (,$cert.GetRawCertData())
}

Ansonsten z.B. Liste der User mit ihren zugehörigen Certs in ne CSV packen und mit Import-CSV und Foreach-Object durchlaufen. Kommt halt drauf an wie du Benennung etc. bei dir regeln willst oder geregelt hast.

Gruß catrell

Vielen lieben Dank für deine Rückmeldung.
Kannst du mir das Prinzip ein wenig erklären, das ich die Installation verstehe.
Die zertifikate befinden sich unter C:\Cert\.... Ich habe eine Excelliste wo sämtliche Mailbox-UPN aufgelistet sind. Im CN steht es folgender maßen: Vorname.Zuname@domäne.de

Danke
150940
150940 Nov 19, 2024 updated at 07:02:39 (UTC)
Goto Top
Zeile 1, durchlaufe alle Zertifikate (*.pem) im angegebenen Verzeichnis.
Zeile 2, erstelle ein Certificate Object aus der jeweiligen Datei
Zeile 3, extrahiere den reinen CN aus dem Subject des Zertifikates
Zeile 4, nutze den CN als Usernamen der Mailbox und die Bytes des Zertifikates um es mit Set-Mailbox dem User zuzuordnen.

Wenn im CN schon der UPN steht ist die Excelliste als Zuordnung überflüssig, da wir diesen direkt aus dem Certificate extrahieren können.
Judgelg
Judgelg Nov 19, 2024 at 07:50:20 (UTC)
Goto Top
Ich danke dir für deine Unterstützung. Ich werde das ganze jetzt mal umsetzen und testen.

Mfg
Judgelg
Judgelg Nov 20, 2024 at 06:11:52 (UTC)
Goto Top
Zitat von @150940:

Zeile 1, durchlaufe alle Zertifikate (*.pem) im angegebenen Verzeichnis.
Zeile 2, erstelle ein Certificate Object aus der jeweiligen Datei
Zeile 3, extrahiere den reinen CN aus dem Subject des Zertifikates
Zeile 4, nutze den CN als Usernamen der Mailbox und die Bytes des Zertifikates um es mit Set-Mailbox dem User zuzuordnen.

Wenn im CN schon der UPN steht ist die Excelliste als Zuordnung überflüssig, da wir diesen direkt aus dem Certificate extrahieren können.

Habe es getestet. Funktioniert super. Ich bedanke mich nochmals.

Mfg
Judgelg
Judgelg Nov 21, 2024 updated at 12:16:16 (UTC)
Goto Top
Zitat von @150940:

Wenn im Common Name (CN) der Certs die Haupt-Mailadresse der User-Mailboxen steht dann bspw. so
foreach($file in Get-ChildItem "D:\certs" -File -Filter *.pem){  
    $cert = [System.Security.Cryptography.X509Certificates.x509certificate2]::new($file.Fullname)
    $cn = $cert.Subject -replace '.*CN=([^,]+).*','$1'  
    Set-Mailbox $cn -UserCertificate (,$cert.GetRawCertData())
}

Ansonsten z.B. Liste der User mit ihren zugehörigen Certs in ne CSV packen und mit Import-CSV und Foreach-Object durchlaufen. Kommt halt drauf an wie du Benennung etc. bei dir regeln willst oder geregelt hast.

Gruß catrell

Ich habe doch nochmal eine Frage. Ein kleines Problem besteht doch noch. Er kommt mit umlauten wie ö,ü,ä nicht klar. Weil in der CN steht ja, ae, ue oder oe. Jetzt sind die ganzen User mit umlauten gecrasht. Kann man das mit "encoding" umgehen?

Danke nochmals für deine Hilfe.

Mfg
150940
Solution 150940 Nov 21, 2024 updated at 12:37:48 (UTC)
Goto Top
Echt jetzt ihr nutzt Umlaute im UPN?? Bähhh würde ich als erstes ändern ....
Kann man das mit "encoding" umgehen?
Nein ae,oe,ue sind keine Encodings sondern nur eine alternative Schreibweise im Deutschen. Aber naja hier ein Workaround wenn du nicht mit Listen arbeiten willst.
foreach($file in Get-ChildItem "D:\certs" -File -Filter *.pem){    
    $cert = [System.Security.Cryptography.X509Certificates.x509certificate2]::new($file.Fullname)
    $cn = $cert.Subject -replace '.*CN=([^,]+).*','$1' -replace 'oe','ö' -replace 'ae','ä' -replace 'ue','ü'  
    Set-Mailbox -Identity $cn -UserCertificate (,$cert.GetRawCertData())
}
Judgelg
Judgelg Nov 21, 2024 updated at 12:35:40 (UTC)
Goto Top
Echt jetzt ihr nutzt Umlaute im UPN?? Bähhh würde ich als erstes ändern ....

Fehler von mir UPN ist natürlich nicht mit umlauten, aber der Anzeigenname. Da scheint es zu chrashen. Ich hatte gestern mehrere Zertifikate hochgeladen mit deinem Befehl. Hat auch alles geklappt, nur die mit umlauten, hatten nicht funktioniert.
150940
150940 Nov 21, 2024 updated at 12:40:46 (UTC)
Goto Top
Zitat von @Judgelg:
Fehler von mir UPN ist natürlich nicht mit umlauten, aber der Anzeigenname. Da scheint es zu chrashen.
Der wird doch gar nicht im Skript genutzt! Als Identity akzeptiert Set-Mailbox mehrere Werte, und wenn der UPN bei euch gleich dem im Cert ist muss es damit laufen. Fehler kann ich hier auch nicht nachvollziehen.

Identity

Der Identity-Parameter gibt die Identität an, das Sie ändern möchten. Sie können jeden beliebigen Wert verwenden, sofern er das Postfach eindeutig kennzeichnet. Beispiel:

    Name
    Alias
    Distinguished Name (DN)
    Distinguished Name (DN)
    Domäne\benutzername
    E-Mail-Adresse
    GUID
    LegacyExchangeDN
    SamAccountName
    Benutzer-ID oder User Principal Name (UPN)

Im Skript kommt kein Anzeigename zum Zug! Ergo kann es nicht daran liegen, da wird was anderes bei euch nicht ganz koscher sein.
Judgelg
Judgelg Nov 21, 2024 at 12:43:34 (UTC)
Goto Top
ok, ich teste weiter. Danke trotzdem nochmals für deine Hilfe.
Judgelg
Judgelg Nov 21, 2024 at 12:50:17 (UTC)
Goto Top
foreach($file in Get-ChildItem "D:\certs" -File -Filter *.pem){
$cert = [System.Security.Cryptography.X509Certificates.x509certificate2]::new($file.Fullname)
$cn = $cert.Subject -replace '.*CN=([^,]+).*','$1' -replace 'oe','ö' -replace 'ae','ä' -replace 'ue','ü'
Set-Mailbox -Identity $cn -UserCertificate (,$cert.GetRawCertData())
}

Funktioniert jetzt auch damit

Ich kann dir nicht genug danken. Werde dich weiter empfehlen.

Mfg