Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
9bdad06c
Commit
9bdad06c
authored
Dec 13, 2019
by
Phillip Webb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Polish Netty SSL key alias support
See gh-19197
parent
d93206f5
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
24 additions
and
35 deletions
+24
-35
SslServerCustomizer.java
...ramework/boot/web/embedded/netty/SslServerCustomizer.java
+24
-35
No files found.
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/netty/SslServerCustomizer.java
View file @
9bdad06c
...
...
@@ -24,11 +24,9 @@ import java.security.KeyStoreException;
import
java.security.NoSuchAlgorithmException
;
import
java.security.Principal
;
import
java.security.PrivateKey
;
import
java.security.Provider
;
import
java.security.UnrecoverableKeyException
;
import
java.security.cert.X509Certificate
;
import
java.util.Arrays
;
import
java.util.stream.Collectors
;
import
javax.net.ssl.KeyManager
;
import
javax.net.ssl.KeyManagerFactory
;
...
...
@@ -110,7 +108,7 @@ public class SslServerCustomizer implements NettyServerCustomizer {
KeyStore
keyStore
=
getKeyStore
(
ssl
,
sslStoreProvider
);
KeyManagerFactory
keyManagerFactory
=
(
ssl
.
getKeyAlias
()
==
null
)
?
KeyManagerFactory
.
getInstance
(
KeyManagerFactory
.
getDefaultAlgorithm
())
:
ConfigurableAliasKeyManagerFactory
.
instance
(
ssl
.
getKeyAlias
(),
:
new
ConfigurableAliasKeyManagerFactory
(
ssl
.
getKeyAlias
(),
KeyManagerFactory
.
getDefaultAlgorithm
());
char
[]
keyPassword
=
(
ssl
.
getKeyPassword
()
!=
null
)
?
ssl
.
getKeyPassword
().
toCharArray
()
:
null
;
if
(
keyPassword
==
null
&&
ssl
.
getKeyStorePassword
()
!=
null
)
{
...
...
@@ -188,36 +186,31 @@ public class SslServerCustomizer implements NettyServerCustomizer {
*/
private
static
final
class
ConfigurableAliasKeyManagerFactory
extends
KeyManagerFactory
{
private
static
ConfigurableAliasKeyManagerFactory
instance
(
String
alias
,
String
algorithm
)
throws
NoSuchAlgorithmException
{
KeyManagerFactory
originalFactory
=
KeyManagerFactory
.
getInstance
(
algorithm
);
ConfigurableAliasKeyManagerFactorySpi
spi
=
new
ConfigurableAliasKeyManagerFactorySpi
(
originalFactory
,
alias
);
return
new
ConfigurableAliasKeyManagerFactory
(
spi
,
originalFactory
.
getProvider
(),
algorithm
);
private
ConfigurableAliasKeyManagerFactory
(
String
alias
,
String
algorithm
)
throws
NoSuchAlgorithmException
{
this
(
KeyManagerFactory
.
getInstance
(
algorithm
),
alias
,
algorithm
);
}
private
ConfigurableAliasKeyManagerFactory
(
ConfigurableAliasKeyManagerFactorySpi
spi
,
Provider
provider
,
String
algorithm
)
{
super
(
spi
,
provider
,
algorithm
);
public
ConfigurableAliasKeyManagerFactory
(
KeyManagerFactory
delegate
,
String
alias
,
String
algorithm
)
{
super
(
new
ConfigurableAliasKeyManagerFactorySpi
(
delegate
,
alias
),
delegate
.
getProvider
(),
algorithm
);
}
}
private
static
final
class
ConfigurableAliasKeyManagerFactorySpi
extends
KeyManagerFactorySpi
{
private
KeyManagerFactory
originalFactory
;
private
final
KeyManagerFactory
delegate
;
private
String
alias
;
private
final
String
alias
;
private
ConfigurableAliasKeyManagerFactorySpi
(
KeyManagerFactory
originalFactory
,
String
alias
)
{
this
.
originalFactory
=
originalFactory
;
private
ConfigurableAliasKeyManagerFactorySpi
(
KeyManagerFactory
delegate
,
String
alias
)
{
this
.
delegate
=
delegate
;
this
.
alias
=
alias
;
}
@Override
protected
void
engineInit
(
KeyStore
keyStore
,
char
[]
chars
)
throws
KeyStoreException
,
NoSuchAlgorithmException
,
UnrecoverableKeyException
{
this
.
originalFactory
.
init
(
keyStore
,
chars
);
this
.
delegate
.
init
(
keyStore
,
chars
);
}
@Override
...
...
@@ -228,69 +221,65 @@ public class SslServerCustomizer implements NettyServerCustomizer {
@Override
protected
KeyManager
[]
engineGetKeyManagers
()
{
return
Arrays
.
stream
(
this
.
originalFactory
.
getKeyManagers
()).
filter
(
X509ExtendedKeyManager
.
class
::
isInstance
)
.
map
(
X509ExtendedKeyManager
.
class
::
cast
).
map
(
this
::
wrapKeyManager
).
collect
(
Collectors
.
toList
())
.
toArray
(
new
KeyManager
[
0
]);
return
Arrays
.
stream
(
this
.
delegate
.
getKeyManagers
()).
filter
(
X509ExtendedKeyManager
.
class
::
isInstance
)
.
map
(
X509ExtendedKeyManager
.
class
::
cast
).
map
(
this
::
wrap
).
toArray
(
KeyManager
[]::
new
);
}
private
ConfigurableAliasKeyManager
wrap
KeyManager
(
X509ExtendedKeyManager
km
)
{
return
new
ConfigurableAliasKeyManager
(
k
m
,
this
.
alias
);
private
ConfigurableAliasKeyManager
wrap
(
X509ExtendedKeyManager
keyManager
)
{
return
new
ConfigurableAliasKeyManager
(
k
eyManager
,
this
.
alias
);
}
}
private
static
final
class
ConfigurableAliasKeyManager
extends
X509ExtendedKeyManager
{
private
final
X509ExtendedKeyManager
keyManager
;
private
final
X509ExtendedKeyManager
delegate
;
private
final
String
alias
;
private
ConfigurableAliasKeyManager
(
X509ExtendedKeyManager
keyManager
,
String
alias
)
{
this
.
keyManager
=
keyManager
;
this
.
delegate
=
keyManager
;
this
.
alias
=
alias
;
}
@Override
public
String
chooseEngineClientAlias
(
String
[]
strings
,
Principal
[]
principals
,
SSLEngine
sslEngine
)
{
return
this
.
keyManager
.
chooseEngineClientAlias
(
strings
,
principals
,
sslEngine
);
return
this
.
delegate
.
chooseEngineClientAlias
(
strings
,
principals
,
sslEngine
);
}
@Override
public
String
chooseEngineServerAlias
(
String
s
,
Principal
[]
principals
,
SSLEngine
sslEngine
)
{
if
(
this
.
alias
==
null
)
{
return
this
.
keyManager
.
chooseEngineServerAlias
(
s
,
principals
,
sslEngine
);
}
return
this
.
alias
;
return
(
this
.
alias
!=
null
)
?
this
.
alias
:
this
.
delegate
.
chooseEngineServerAlias
(
s
,
principals
,
sslEngine
);
}
@Override
public
String
chooseClientAlias
(
String
[]
keyType
,
Principal
[]
issuers
,
Socket
socket
)
{
return
this
.
keyManager
.
chooseClientAlias
(
keyType
,
issuers
,
socket
);
return
this
.
delegate
.
chooseClientAlias
(
keyType
,
issuers
,
socket
);
}
@Override
public
String
chooseServerAlias
(
String
keyType
,
Principal
[]
issuers
,
Socket
socket
)
{
return
this
.
keyManager
.
chooseServerAlias
(
keyType
,
issuers
,
socket
);
return
this
.
delegate
.
chooseServerAlias
(
keyType
,
issuers
,
socket
);
}
@Override
public
X509Certificate
[]
getCertificateChain
(
String
alias
)
{
return
this
.
keyManager
.
getCertificateChain
(
alias
);
return
this
.
delegate
.
getCertificateChain
(
alias
);
}
@Override
public
String
[]
getClientAliases
(
String
keyType
,
Principal
[]
issuers
)
{
return
this
.
keyManager
.
getClientAliases
(
keyType
,
issuers
);
return
this
.
delegate
.
getClientAliases
(
keyType
,
issuers
);
}
@Override
public
PrivateKey
getPrivateKey
(
String
alias
)
{
return
this
.
keyManager
.
getPrivateKey
(
alias
);
return
this
.
delegate
.
getPrivateKey
(
alias
);
}
@Override
public
String
[]
getServerAliases
(
String
keyType
,
Principal
[]
issuers
)
{
return
this
.
keyManager
.
getServerAliases
(
keyType
,
issuers
);
return
this
.
delegate
.
getServerAliases
(
keyType
,
issuers
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment