2424import java .security .NoSuchAlgorithmException ;
2525import java .security .Principal ;
2626import java .security .PrivateKey ;
27- import java .security .Provider ;
2827import java .security .UnrecoverableKeyException ;
2928import java .security .cert .X509Certificate ;
3029import java .util .Arrays ;
31- import java .util .stream .Collectors ;
3230
3331import javax .net .ssl .KeyManager ;
3432import javax .net .ssl .KeyManagerFactory ;
@@ -110,7 +108,7 @@ protected KeyManagerFactory getKeyManagerFactory(Ssl ssl, SslStoreProvider sslSt
110108 KeyStore keyStore = getKeyStore (ssl , sslStoreProvider );
111109 KeyManagerFactory keyManagerFactory = (ssl .getKeyAlias () == null )
112110 ? KeyManagerFactory .getInstance (KeyManagerFactory .getDefaultAlgorithm ())
113- : ConfigurableAliasKeyManagerFactory . instance (ssl .getKeyAlias (),
111+ : new ConfigurableAliasKeyManagerFactory (ssl .getKeyAlias (),
114112 KeyManagerFactory .getDefaultAlgorithm ());
115113 char [] keyPassword = (ssl .getKeyPassword () != null ) ? ssl .getKeyPassword ().toCharArray () : null ;
116114 if (keyPassword == null && ssl .getKeyStorePassword () != null ) {
@@ -188,36 +186,31 @@ private KeyStore loadStore(String type, String provider, String resource, String
188186 */
189187 private static final class ConfigurableAliasKeyManagerFactory extends KeyManagerFactory {
190188
191- private static ConfigurableAliasKeyManagerFactory instance (String alias , String algorithm )
192- throws NoSuchAlgorithmException {
193- KeyManagerFactory originalFactory = KeyManagerFactory .getInstance (algorithm );
194- ConfigurableAliasKeyManagerFactorySpi spi = new ConfigurableAliasKeyManagerFactorySpi (originalFactory ,
195- alias );
196- return new ConfigurableAliasKeyManagerFactory (spi , originalFactory .getProvider (), algorithm );
189+ private ConfigurableAliasKeyManagerFactory (String alias , String algorithm ) throws NoSuchAlgorithmException {
190+ this (KeyManagerFactory .getInstance (algorithm ), alias , algorithm );
197191 }
198192
199- private ConfigurableAliasKeyManagerFactory (ConfigurableAliasKeyManagerFactorySpi spi , Provider provider ,
200- String algorithm ) {
201- super (spi , provider , algorithm );
193+ public ConfigurableAliasKeyManagerFactory (KeyManagerFactory delegate , String alias , String algorithm ) {
194+ super (new ConfigurableAliasKeyManagerFactorySpi (delegate , alias ), delegate .getProvider (), algorithm );
202195 }
203196
204197 }
205198
206199 private static final class ConfigurableAliasKeyManagerFactorySpi extends KeyManagerFactorySpi {
207200
208- private KeyManagerFactory originalFactory ;
201+ private final KeyManagerFactory delegate ;
209202
210- private String alias ;
203+ private final String alias ;
211204
212- private ConfigurableAliasKeyManagerFactorySpi (KeyManagerFactory originalFactory , String alias ) {
213- this .originalFactory = originalFactory ;
205+ private ConfigurableAliasKeyManagerFactorySpi (KeyManagerFactory delegate , String alias ) {
206+ this .delegate = delegate ;
214207 this .alias = alias ;
215208 }
216209
217210 @ Override
218211 protected void engineInit (KeyStore keyStore , char [] chars )
219212 throws KeyStoreException , NoSuchAlgorithmException , UnrecoverableKeyException {
220- this .originalFactory .init (keyStore , chars );
213+ this .delegate .init (keyStore , chars );
221214 }
222215
223216 @ Override
@@ -228,69 +221,65 @@ protected void engineInit(ManagerFactoryParameters managerFactoryParameters)
228221
229222 @ Override
230223 protected KeyManager [] engineGetKeyManagers () {
231- return Arrays .stream (this .originalFactory .getKeyManagers ()).filter (X509ExtendedKeyManager .class ::isInstance )
232- .map (X509ExtendedKeyManager .class ::cast ).map (this ::wrapKeyManager ).collect (Collectors .toList ())
233- .toArray (new KeyManager [0 ]);
224+ return Arrays .stream (this .delegate .getKeyManagers ()).filter (X509ExtendedKeyManager .class ::isInstance )
225+ .map (X509ExtendedKeyManager .class ::cast ).map (this ::wrap ).toArray (KeyManager []::new );
234226 }
235227
236- private ConfigurableAliasKeyManager wrapKeyManager (X509ExtendedKeyManager km ) {
237- return new ConfigurableAliasKeyManager (km , this .alias );
228+ private ConfigurableAliasKeyManager wrap (X509ExtendedKeyManager keyManager ) {
229+ return new ConfigurableAliasKeyManager (keyManager , this .alias );
238230 }
239231
240232 }
241233
242234 private static final class ConfigurableAliasKeyManager extends X509ExtendedKeyManager {
243235
244- private final X509ExtendedKeyManager keyManager ;
236+ private final X509ExtendedKeyManager delegate ;
245237
246238 private final String alias ;
247239
248240 private ConfigurableAliasKeyManager (X509ExtendedKeyManager keyManager , String alias ) {
249- this .keyManager = keyManager ;
241+ this .delegate = keyManager ;
250242 this .alias = alias ;
251243 }
252244
253245 @ Override
254246 public String chooseEngineClientAlias (String [] strings , Principal [] principals , SSLEngine sslEngine ) {
255- return this .keyManager .chooseEngineClientAlias (strings , principals , sslEngine );
247+ return this .delegate .chooseEngineClientAlias (strings , principals , sslEngine );
256248 }
257249
258250 @ Override
259251 public String chooseEngineServerAlias (String s , Principal [] principals , SSLEngine sslEngine ) {
260- if (this .alias == null ) {
261- return this .keyManager .chooseEngineServerAlias (s , principals , sslEngine );
262- }
263- return this .alias ;
252+ return (this .alias != null ) ? this .alias : this .delegate .chooseEngineServerAlias (s , principals , sslEngine );
264253 }
265254
266255 @ Override
267256 public String chooseClientAlias (String [] keyType , Principal [] issuers , Socket socket ) {
268- return this .keyManager .chooseClientAlias (keyType , issuers , socket );
257+ return this .delegate .chooseClientAlias (keyType , issuers , socket );
269258 }
270259
271260 @ Override
272261 public String chooseServerAlias (String keyType , Principal [] issuers , Socket socket ) {
273- return this .keyManager .chooseServerAlias (keyType , issuers , socket );
262+ return this .delegate .chooseServerAlias (keyType , issuers , socket );
274263 }
275264
276265 @ Override
277266 public X509Certificate [] getCertificateChain (String alias ) {
278- return this .keyManager .getCertificateChain (alias );
267+ return this .delegate .getCertificateChain (alias );
279268 }
280269
281270 @ Override
282271 public String [] getClientAliases (String keyType , Principal [] issuers ) {
283- return this .keyManager .getClientAliases (keyType , issuers );
272+ return this .delegate .getClientAliases (keyType , issuers );
284273 }
285274
286275 @ Override
287276 public PrivateKey getPrivateKey (String alias ) {
288- return this .keyManager .getPrivateKey (alias );
277+ return this .delegate .getPrivateKey (alias );
289278 }
290279
291280 @ Override
292281 public String [] getServerAliases (String keyType , Principal [] issuers ) {
293- return this .keyManager .getServerAliases (keyType , issuers );
282+ return this .delegate .getServerAliases (keyType , issuers );
294283 }
295284
296285 }
0 commit comments