Die Hashfunktion der Passwörter ist wählbar und muss am Tomcat konfiguriert werden.

Die folgende Dokumentation gilt für Tomcats, die nicht über Keycloak abgesichert werden.

Hashfunktion der Passwörter

Die B2B-Benutzer-Passwörter werden mit einem Algorithmus gehasht und in die Datenbank gespeichert. Die Benutzung dieses Algorithmus ist in der Konfiguration des Tomcats in der server.xml hinterlegt.

Früher wurde der Algorithums MD5 verwendet. Er gilt inzwischen aber als nicht mehr sicher.

Stärkere Hashfunktion

Ab der B2B-Version 1.13.3_1.0 verwendet die B2B einen stärkeren Hashalgorithmus. Der neue Default-Algorithmus ist SHA-512. Dieser neue Algorithmus benötigt mehr Platz in der Datenbank, um dort die Passwörter zu hinterlegen.

Der Algorithmus ist über die Global Property B3P_PWD_HASH_ALGORITHM konfigurierbar. Mögliche Werte sind:

  • MD5
  • SHA-1
  • SHA-256
  • SHA-512

Für die neuen Algorithmen wird mehr Platz in der Datenbank benötigt. In der Tabelle B2BBP_ADM_ACCOUNT muss die Spalte password auf eine Länge von 200 Zeichen vergrößert werden. Falls Sie Unterstützung dabei brauchen, wenden Sie sich gerne an unseren Support.

Login über Tomcat-Authentifizierung

Der Tomcat nutzt zur Authentifizierung einen sogenannten Realm. Um den Login der bestehenden B2B-Benutzer weiter zu gewährleisten, aber gleichzeitig neuen Benutzern (oder Benutzern, die ihr Passwort mit der neuen B2B-Version ändern) den Login zu ermöglichen, kann am Tomcat konfiguriert werden, dass mehrere Algorithmen zur Authentifizierung versucht werden sollen.

Die aktuelle Konfiguration sieht bei Tomcat 7 folgendermaßen aus:

<Realm className="org.apache.catalina.realm.DataSourceRealm" debug="99" digest="MD5" dataSourceName="jdbc/b2bbp" localDataSource="true" userTable="B2BBP_ADM_ACCOUNT" userNameCol="userid" userCredCol="password" userRoleTable="B2BBP_ADM_USER" roleNameCol="roleid" />

Für Tomcat 7 kann dieser Realm ersetzt werden durch folgenden kombinierten Realm:

<Realm className="org.apache.catalina.realm.CombinedRealm" >
	<Realm className="org.apache.catalina.realm.DataSourceRealm" debug="99" digest="MD5"
		dataSourceName="jdbc/b2bbp" localDataSource="true"
		userTable="B2BBP_ADM_ACCOUNT" userNameCol="userid" userCredCol="password"
		userRoleTable="B2BBP_ADM_USER" roleNameCol="roleid"/>
	<Realm className="org.apache.catalina.realm.DataSourceRealm" debug="99" digest="sha-512"
		dataSourceName="jdbc/b2bbp" localDataSource="true"
		userTable="B2BBP_ADM_ACCOUNT" userNameCol="userid" userCredCol="password"
		userRoleTable="B2BBP_ADM_USER" roleNameCol="roleid"/>
</Realm>

Bei Tomcat 8 und höher wird der Algorithmus (digest) über einen CredentialHandler definiert. Hier sieht der kombinierte Algorithmus folgendermaßen aus:

<Realm className="org.apache.catalina.realm.DataSourceRealm" debug="99" dataSourceName="jdbc/b2bbp" localDataSource="true" userTable="B2BBP_ADM_ACCOUNT" userNameCol="userid" userCredCol="password" userRoleTable="B2BBP_ADM_USER" roleNameCol="roleid">
	<CredentialHandler className="org.apache.catalina.realm.NestedCredentialHandler">
		<CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler"
			algorithm="md5" />
		<CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler"
			algorithm="sha-512" />
	</CredentialHandler>
</Realm>

Weitere Infomation

Eine vollständige server.xml finden sie hier.

Weitere Dokumentation zum Login mit Tomcat 7 finden sie hier:

Tomcat 7 CombinedRealm

Weitere Dokumentation zum Login mit Tomcat 8 finden sie hier:

Tomcat 8 NestedCredentialHandler

CAS Konfiguration

Falls Sie CAS nutzen, ist weitere Konfiguration nötig:

tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml

Hier findet sich eine SearchModeSearchDatabaseAuthenticationHandler bean, die MD5 konfiguriert. Diese bean ist zu duplizieren, wobei MD5 durch SHA-512 ersetzt wird.

<property name="authenticationHandlers">
	<list>
		<!-- ... -->
		<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler">
			<!-- ... -->
			<property name="passwordEncoder">
				<bean class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
					<constructor-arg value="MD5" />
				</bean>
			</property>
		</bean>
		<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler">
			<!-- ... -->
			<property name="passwordEncoder">
				<bean class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
					<constructor-arg value="SHA-512" />
				</bean>
			</property>
		</bean>
	</list>
</property>

Diese Anpassung ermöglicht, dass sowohl MD5 als auch SHA-512 beim Login mit CAS genutzt werden können. Am Ende der Übergangsphase sollte die MD5 bean entfernt werden.

Prozess zur Umstellung

Wir empfehlen als Prozess zur Umstellung der Funktion folgendes Vorgehen:

  • Anpassung der Datenbanktabelle B2BBP_ADM_ACCOUNT zur Vergrößerung der Spalte password auf 200 Stellen
  • Änderung der server.xml so dass ein Login mit MD5 und sowohl (zum Beispiel) SHA-512 möglich ist.
  • Kommunikation an alle B2B-Benutzer, dass sie in einer gesetzten Frist ihr Passwort ändern müssen.
    • Damit wird das neue Passwort mit dem neuen Algorithmus gespeichert.
  • Entfernung der Konfiguration für MD5 aus der server.xml nach Ablauf der kommunizierten Frist.
    • Damit ist nur noch der Login mit dem neuen Hashalgorithmus möglich.

Spätere erneute Umstellung des Algorithmus

Sollte später der Algorithmus noch einmal umgestellt werden sollen, zum Beispiel von SHA-256 auf SHA-512, muss in der Global Property B3P_PWD_OLD_HASH_ALGORITHM der alte Algorithmus konfiguriert werden.

Übersicht Global Properties

Als Zusammenfassung hier noch mal die relevanten Global Properties die für eine spätere Umstellung des Algorithmus benötigt werden:

Property / Eigenschaften Wert Erklärung
B3P_PWD_HASH_ALGORITHM MD5, SHA-1, SHA-256, SHA-512 (Default: SHA-512) Hier wird der Algorithmus konfiguriert, mit welchem Passwörter beim Speichern gehasht werden sollen.
B3P_PWD_OLD_HASH_ALGORITHM MD5, SHA-1, SHA-256, SHA-512 (Default: MD5) Hier wird der Algorithmus konfiguriert, mit welchem Passwörter beim Ändern des Passwortes geprüft werden.
View Me   Edit Me