Wie verarbeitet Java bei MTLS mehrere Client-Schlüssel im Keystore, aber 1 im Truststore?

Wie verarbeitet Java bei MTLS mehrere Client-Schlüssel im Keystore, aber 1 im Truststore?

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, chooseClientAliasalso 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

verwandte Informationen