
Ich habe eine Situation, in der ich versuche, MTLs einzurichten, bei denen der Client mehrere Schlüssel hat. Ich kann nicht herausfinden, wie die Auflösung des Alias funktioniert. Kann mir hier jemand weiterhelfen?
Wie entscheidet Java, welcher Alias verwendet werden soll, wenn sich im Schlüsselspeicher mehrere Schlüssel befinden, sich aber nur einer davon im Vertrauensspeicher des Servers befindet?
Aktualisieren
Derzeit habe ich den folgenden Code
public class ConfigurableAliasKeyManagerFactory extends KeyManagerFactory {
...
private static final class ConfigurableAliasKeyManagerFactorySpi extends KeyManagerFactorySpi {
...
@Override
protected KeyManager[] engineGetKeyManagers() {
return Arrays.stream(this.delegate.getKeyManagers())
.filter(X509ExtendedKeyManager.class::isInstance)
.map(X509ExtendedKeyManager.class::cast)
.map(this::wrap)
.toArray(KeyManager[]::new);
}
}
...
protected static final class ConfigurableAliasKeyManager extends X509ExtendedKeyManager {
@Getter
private final String alias;
public ConfigurableAliasKeyManager(X509ExtendedKeyManager keyManager, String alias) {
this.delegate = keyManager;
this.alias = alias;
}
@Override
public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket) {
return (this.alias != null) ? this.alias : this.delegate.chooseClientAlias(keyType, issuers, socket);
}
...
}
}
Aber der Breakpoint scheint nicht zu funktionieren, chooseClientAlias
also glaube ich nicht, dass er aufgerufen wird.
Antwort1
Viele Dinge, aber ich denke, das einfachste ist, einfach das Beispiel zu posten
https://github.com/jrgleason/spring-boot-mtls
Dies scheint korrekt zu funktionieren. Um den Fehlerfall zu testen, ändern Sie den Client-Alias in etwas wie client3