Zertifikat Subject DN zerlegen

Leno

Bekanntes Mitglied
Hi ,

habe mal wieder ein grosses Problem , vielleicht kennt sich ja jemand von euch damit aus. Ich arbeite gerade mit X509 Zertifikaten und muss aus der SubjectDN die CN Filtern bzw. möchte diese erhalten

hier ein Beispiel :

EMAILADDRESS=test@test.de, CN=bank12345678912398, OU=L, O=TrollAG, L=Köln, ST=NRW, C=EU

So wie oben kann ich die SubjectDN per getSubjectDN() Methode aus der Klasse X509 erhalten.
Jetzt aber folgendes Problem wie komme ich nur an die CN also z.B. bank123...... ohne die Kommastellen und ohne die anderen Inforamtionen auf eine elegante art und weise ? habe zwar ansätze mit StringTokenizer aber irgendwie nicht so schön 🙁 kann mir jemand helfen ?

Gruss Leno
 
ja leider ja und man muss bedenken das die Zahlen der CN auch Variabel sein müssen
also auch 20 Zahlen oder weniger aber das Zert fängt immer mit bank oder corp an und ja es ist immer ein komma dazwischen
 
Wie wärs damit:
Java:
	public static void main(String[] args) {
		String s = "EMAILADDRESS=test@test.de, CN=bank12345678912398, OU=L, O=TrollAG, L=Köln, ST=NRW, C=EU";
		Pattern pattern = Pattern.compile("(?s)CN=\\b.+?\\b");
		Matcher matcher = pattern.matcher(s);
		String cn = "";
		while (matcher.find()){
			cn = matcher.group().replace("CN=","");
		}
		System.out.println(cn);

	}
 
WOW danke genial 😀 bin gar nicht drauf gekommen
kannst du mir vielleicht noch kurz erklären wie dies aufgebaut ist "(?s)CN=\\b.+?\\b"
Ansonsten ist die Lösung Super, meine ist elend lang mit SubStrings und so und auch nicht grad
Variabel
 
Lesson: Regular Expressions - Falls du noch öfters mit Aufgaben, die mit Regex gelöst werden können, zu tun haben solltest 🙂

Also (?s) heißt hier, dass line.separators usw. auch im String enthalten werden können.
CN= ist ja klar, es muss so beginnen
.+? es kann ein beliebiges Zeichen einmal oder mehrmals folgen (das Bedeutet das .+ alleine) aber +? zusammen, heißen auch, dass er darauf achten soll, was sich noch dahinter im Regex befindet und er nicht einfach jedes Zeichen "frisst" bevor er weiter überprüft 🙂.
und die \\b \\b die das .+? umschließen, bedeuten, dass die Zeichenfolge an kein anderes Wort gebunden werden darf (in dem Fall steht ja davor ein = und dahinter ein , ist also auch an kein Wort gebunden, da es "Sonderzeichen" sind.

Man kann es auch anders Lösen, wie z.B "(?s)CN=.+?," und dann einfach noch das Komma dahinter mit "" replacen. Ist alles eine Sache der Logik. Jeder denkt halt anders 🙂

Ich empfehle dir aber auf jeden Fall sich mit Regex "zu befreunden" 🙂 Sie sind immer wieder gut zu gebrauchen 🙂
 
Zuletzt bearbeitet:

Zurück
Oben