
クライアントが複数のキーを持つ mtls を設定しようとしている状況があります。どのエイリアスを解決するかが分からないので、どこかでガイドしてもらえませんか?
キーストアに複数のキーがあり、そのうちの 1 つだけがサーバー信頼ストアにある場合、Java はどのエイリアスを使用するかをどのように決定するのでしょうか。
アップデート
現在、私は次のコードを持っています
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);
}
...
}
}
しかし、ブレークポイントは機能していないようなchooseClientAlias
ので、呼び出されないと思います
答え1
いろいろありますが、一番簡単なのは例を投稿することだと思います
https://github.com/jrgleason/spring-boot-mtls
これは正しく動作するようです。失敗ケースをテストするには、クライアントのエイリアスをclient3のように変更します。