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>
Realm
ist im xml immernoch vollständig im LockOutRealm
eingebettet. Achten sie auf die öffnenden und schließenden xml-Tags.Weitere Infomation
Eine vollständige server.xml
finden sie hier.
Weitere Dokumentation zum Login mit Tomcat 7 finden sie hier:
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 Spaltepassword
auf 200 Stellen - Änderung der
server.xml
so dass ein Login mitMD5
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 derserver.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. |