Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Common Name (CN) in String suchen und ausgeben

Mitglied: PSaR04

PSaR04 (Level 1) - Jetzt verbinden

07.10.2013 um 18:45 Uhr, 1754 Aufrufe, 12 Kommentare, 2 Danke

Hallo,

ein Bisschen Hintergrundwissen (für die eigentliche Frage nicht unbedingt notwendig):
Ich betreibe OpenVPN auf einem Router mit DD-Wrt-Firmware und möchte die "tls-verify"-Option nutzen, um festzulegen mit welchen Zertifikaten ein Zugriff möglich ist. Hierzu werden von OpenVPN Zertifikatsinformationen an ein Skript übergeben, welches überprüft, ob der Client Zugriff bekommt oder nicht. Die Entscheidung ja/nein wird OpenVPN dann per Return-Code mitgeteilt.

Im Netz habe ich bereits ein Shell-Skript gefunden, so wie ich mir das vorstelle: http://robert.penz.name/21/ovpncncheck-an-openvpn-tls-verify-script/

Leider passt die Regular Expression bei mir nicht.
Übergeben werden Zertifikatsinformationen, die etwa so aussehen:

C=DE, ST=North Rine-Westphalia, L=Stadt, O=Martin Muster, OU=IT, CN=Max Muster, emailAddress=max@muster.com

Für eine Überprüfung wird nur der Common Name (also alles zwischen "CN=" und ",emailAddress=....") benötigt.


Wie erhalte ich den Wert des CN? Ich habe schon ein paar Stunden probiert, bin aber noch nicht zum Ziel gekommen. Bisher habe ich folgende RegEx, bei der zumindest die Mailadresse nicht mehr mit ausgegeben wird: '.*CN=([^,]*)'

Aufgrund der Betriebsumgebung kann nur mit der Linux-Shell und Standard-Tools wie grep gearbeitet werden, Python oder ähnliches steht nicht zur Verfügung.

Gruß
PSaR04
Mitglied: Endoro
07.10.2013 um 19:49 Uhr
Hi, ich hab kein Python am Laufen, aber mit sed geht das:
.*CN=([^,]*).*
lg.
Bitte warten ..
Mitglied: PSaR04
07.10.2013, aktualisiert um 20:04 Uhr
Zitat von Endoro:
Hi, ich hab kein Python am Laufen, aber mit sed geht das:
.*CN=([^,]*).*
lg.

Hi,

danke für den Tipp. Ich habe jetzt mal folgendes gemacht:

echo $t | sed '.*CN=([^,]*).*'
Aber dann wird gar nichts ausgegeben. In $t steckt übrigens der übergebene String.
Bitte warten ..
Mitglied: Endoro
07.10.2013, aktualisiert um 20:21 Uhr
Hi, der geklammerte Teil vom String muss ja wieder in den replace pattern:
01.
echo $t | sed -r 's/.*CN=([^,]*).*/\1/'
Getestet mit GNU sed.
lg.
Bitte warten ..
Mitglied: PSaR04
07.10.2013 um 20:27 Uhr
Zitat von Endoro:
Hi, der geklammerte Teil vom String muss ja wieder in den replace pattern:
01.
> echo $t | sed -r 's/.*CN=([^,]*).*/\1/'
02.
> 
Getestet mit GNU sed.
lg.

Perfekt, so läufts!

Vielen, vielen Dank. Da habe ich jetzt schon ewig dran gesessen...
Bitte warten ..
Mitglied: PSaR04
07.10.2013 um 20:53 Uhr
Bekommt man es auch noch hin, dass der vollständige CN ausgegeben wird, wenn ein Komma darin steckt? Z. B. folgendem String:

C=DE, ST=North Rine-Westphalia, L=Stadt, O=Martin Muster, OU=IT, CN=Muster, Max, emailAddress=max@muster.com


Ich hätte gedacht, die RegEx noch ein Bisschen zu erweitern, z. B. so:

echo $t | sed -r 's/.*CN=(([^a-z]+[^A-Z]+[^=])*).*/\1/'
Mir wird dann aber nur "Muster, " ausgegeben, der Rest fehlt.
Bitte warten ..
Mitglied: Endoro
08.10.2013, aktualisiert um 02:31 Uhr
Hi, wenn in den Daten neue Muster auftauchen, muss Regex halt angepasst werden.
ZB so:
01.
| sed -r 's/.*CN=(.*),\s?email.*/\1/'
Vor allem da das Komma ja ein wichtiger Anker im vorherigen Regex war.
Und hier auch wieder ist. Es ginge deshalb auch so, was mir fast noch besser gefällt:
01.
| sed -r 's/.*CN=([[:alnum:]]+,?\s[[:alnum:]]+),?\s.*/\1/'
Das geht davon aus, dass CN immer zwei Wörter sind.
lg.
Bitte warten ..
Mitglied: PSaR04
08.10.2013 um 14:23 Uhr
Zitat von Endoro:
Hi, wenn in den Daten neue Muster auftauchen, muss Regex halt angepasst werden.
ZB so:
01.
| sed -r 's/.*CN=(.*),\s?email.*/\1/'
Vor allem da das Komma ja ein wichtiger Anker im vorherigen Regex war.
Und hier auch wieder ist. Es ginge deshalb auch so, was mir fast noch besser gefällt:
01.
| sed -r 's/.*CN=([[:alnum:]]+,?\s[[:alnum:]]+),?\s.*/\1/'
Das geht davon aus, dass CN immer zwei Wörter sind.
lg.

Danke dafür, aber leider wird bei beiden der komplette String ausgegeben..
Bitte warten ..
Mitglied: Endoro
08.10.2013 um 16:58 Uhr
Hi, welche sed Version verwendest du?
GNU sed version 4.2.1
lg.
Bitte warten ..
Mitglied: PSaR04
08.10.2013 um 19:08 Uhr
Folgendes wird mir nach Eingabe von "sed --version" angezeigt: This is not GNU sed version 4.0
Bitte warten ..
Mitglied: Endoro
08.10.2013 um 19:54 Uhr
Ist ja witzig

Hier noch ein Vorschlag. Nicht -r vergessen und statt -r auch mal -E testen.
01.
|sed -r 's/.*CN=(\S+\s\w+),.+/\1/'
oder mit POSIX-Klassen:
01.
| sed -E 's/.*CN=([^[:space:]]+[[:space:]][[:alpha:]]+),.+/\1/'
lg.
Bitte warten ..
Mitglied: PSaR04
08.10.2013 um 21:59 Uhr
Zitat von Endoro:
Ist ja witzig

Hier noch ein Vorschlag. Nicht -r vergessen und statt -r auch mal -E testen.
01.
> |sed -r 's/.*CN=(\S+\s\w+),.+/\1/'
02.
> 
oder mit POSIX-Klassen:
01.
> | sed -E 's/.*CN=([^[:space:]]+[[:space:]][[:alpha:]]+),.+/\1/'
02.
> 
lg.

Beim 1. Vorschlag wird wieder der komplette String ausgegeben. Beim 2. hat er dann das -E mit "Invalid Option" angemeckert. Dann habe ich den 2. noch mit -r ausprobiert und....oh Wunder auf einmal klappte es.
Leider war die erste Freude schnell wieder ein kleines Bisschen getrübt, wenn nämlich mehrere Kommas im CN vorkamen, wurde immer nur der Text bis zum 2. Komma ausgegeben
Also musste ich erstmal deine Idee etwas interpretieren, da mir nicht gleich alles auf Anhieb klar war. Das Zuvor beschriebene Problem konnte ich dann lösen, indem ich ":alpha:" gegen ":print:" getauscht und das ganze Konstrukt, da es ja mehrfach vorkommen kann in Klammern gepackt und mit + ergänzt habe. Nur blöd, wenn der CN dann nur aus einem einzelnen Wort besteht, also mittels "|" noch eine weitere Möglichkeit angegeben.

Rausgekommen ist dabei folgendes:
echo $t | sed -r 's/.*CN=([^[:space:]]+([[:space:]][[:print:]]+)+|([[:print:]])+),.+/\1/'
Zugegeben, ganz perfekt ist es noch nicht. Wenn z. B. mehrere Leerzeichen hintereinander stehen wird in der Ausgabe nur eins angezeigt und bei einigen speziellen Zeichen kann es auch mal zu einem Fehler kommen. Damit kann ich aber erstmal leben, nichts desto trotz: Falls jemand noch die "ultimative Lösung" haben sollte, würde ich mich sehr darüber freuen.
Besonderer Dank geht nochmal an Endoro.
Bitte warten ..
Mitglied: Endoro
09.10.2013 um 00:24 Uhr
Hi,
wenn du häufiger mit sed arbeitest, solltest du dir eine aktuelle GNU-Version besorgen. Vielleicht ist die auch schon installiert und wird nur nicht benutzt.
Hier noch ein abschliessender Vorschlag, der alle Leerzeichen und Kommas zwischen den Namen erhält und auch mit einem Namen klar kommt:
01.
|sed -r 's/.*CN=([^[:space:]]+[[:space:],]*[^[:space:],]*),+.+/\1/'
lg.
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Excel Such- und Vergleichsfunktion
gelöst Frage von oesi1989Microsoft Office10 Kommentare

Hallo zusammen, ich habe 2 Tabellen mit Name, Vorname und Arbeitgeber. 1. Tabelle Name Vorname Geb-Datum Arbeitgeber Straße Ort ...

Netzwerke

Common name von openvpn client ändern

gelöst Frage von rike34Netzwerke1 Kommentar

guten Abend, ich habe mir ein kleines openvpn Netz gebaut. Nun möchte ich einige meiner clients umbenennen. Wie macht ...

Exchange Server

Such-Index nach Neuerstellung defekt

Frage von CoverianExchange Server

Guten Morgen zusammen, wir haben hier aktuell ein Problem das mir schlaflose Nächte bereitet. Es handelt sich um einen ...

Exchange Server

Exchange 2013 Event ID 4999 MSExchange Common

gelöst Frage von 124611Exchange Server5 Kommentare

Guten Morgen, seit heute morgen taucht auf unserem Exchange 2013 cu12 (Windowsupdates sind aktuell) folgender Fehler auf: Watson report ...

Neue Wissensbeiträge
Windows 10

Windows 10 - Programme laufen schneller, wenn Sie mit Administratorrechten ausgeführt werden

Erfahrungsbericht von 1Werner1 vor 11 StundenWindows 106 Kommentare

Moin, das wollte ich erst nicht glauben, aber es ist so. Wenn Ihr ein Programm mit Administratorrechten unter Windows ...

Sicherheits-Tools
Putty hat heftige Bugs korrigiert!
Information von Lochkartenstanzer vor 1 TagSicherheits-Tools5 Kommentare

Moin, Wie man aus herauslesen kann, sind in den Versionen vor 0.71 gravierende Bugs, die es angeraten erscheinen lassen, ...

Off Topic
Sachen die die Welt nicht braucht - Platz 1
Tipp von brammer vor 4 TagenOff Topic21 Kommentare

Hallo, ich habs als Tipp angelegt als Erfahrungsbericht nein Danke brammer

Humor (lol)
Spirit of Health-Kongress in Berlin
Information von AnkhMorpork vor 4 TagenHumor (lol)6 Kommentare

tgif! Beim dritten Spirit of Health-Kongress trafen sich am Wochenende Alternativmediziner und Naturheilkundler im Maritim Hotel Berlin, um sich ...

Heiß diskutierte Inhalte
Hardware
Telefonanlagen - Welche gibt es
Frage von Xaero1982Hardware21 Kommentare

Nabend Zusammen, ich suche eine neue TK Anlage und mein Auftraggeber will jetzt was völlig neues - State of ...

Windows Server
Eingeschränkte Gruppen - Spezielle Benutzergruppe hinzufügen
Frage von killtecWindows Server17 Kommentare

Hallo, ich möchte gerne folgendes Realisieren: Ich habe bei mir Eingeschränkte Gruppen via GPO aktiv und möchte nun der ...

LAN, WAN, Wireless
Intel(R) PRO Wireless 3945ABG
gelöst Frage von Leon509LAN, WAN, Wireless15 Kommentare

Hallo, habe ein Laptop Fujitsu (Intel, 4GB, 2GHz, Windos10, Intel(R) PRO/Wireless 3945ABG ) ein O2 DSL Anschluss Home50. Leider ...

Microsoft Office
Videodateien auf Windows Server 2008 R2 öffnen schlägt fehl
Frage von SchroediMicrosoft Office14 Kommentare

Hallo zusammen, wir haben das Problem das embedded Videos in PowerPoint (O365) auf unserer Citrix Farm (6.5) nicht abgespielt ...