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/forum/zertifikate-in-die-exchange-online-gal-hochladen-669578.html

Ausgedruckt am: 22.12.2024 um 08:12 Uhr

150940
150940 18.11.2024, aktualisiert am 21.11.2024 um 13:37:59 Uhr
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 18.11.2024 um 16:26:08 Uhr
Goto Top
OT: Oha, ein Lüneburger Aufklärer? Ich bin ein ehem. 12er face-wink
Judgelg
Judgelg 19.11.2024 um 06:44:24 Uhr
Goto Top
Zitat von @beck2oldschool:

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

DITO
Judgelg
Judgelg 19.11.2024 aktualisiert um 07:00:02 Uhr
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 19.11.2024 aktualisiert um 08:02:39 Uhr
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 19.11.2024 um 08:50:20 Uhr
Goto Top
Ich danke dir für deine Unterstützung. Ich werde das ganze jetzt mal umsetzen und testen.

Mfg
Judgelg
Judgelg 20.11.2024 um 07:11:52 Uhr
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 21.11.2024 aktualisiert um 13:16:16 Uhr
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
150940 21.11.2024 aktualisiert um 13:37:48 Uhr
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 21.11.2024 aktualisiert um 13:35:40 Uhr
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 21.11.2024 aktualisiert um 13:40:46 Uhr
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 21.11.2024 um 13:43:34 Uhr
Goto Top
ok, ich teste weiter. Danke trotzdem nochmals für deine Hilfe.
Judgelg
Judgelg 21.11.2024 um 13:50:17 Uhr
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
Judgelg
Judgelg 09.12.2024 aktualisiert um 09:37:06 Uhr
Goto Top
Zitat von @150940:

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())
}

Hallo,
ich nochmal. Gibt es auch die möglichkeit den UPN raus zu suchen, anstatt den CN? Er findet teilweise den CN (weil dort teilweise Prof.Name und Dr. Name steht) nicht und müsste besser mit der E-Mail Adresse arbeiten.

Mfg
Judgelg
Judgelg 11.12.2024 um 06:58:46 Uhr
Goto Top
Hallo,

keiner mehr nen Tipp?

Mfg