|
1 | 1 | /* |
2 | | - * Copyright 2012-2023 the original author or authors. |
| 2 | + * Copyright 2012-2024 the original author or authors. |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
@@ -68,12 +68,28 @@ private static SslStoreBundle createPemStoreBundle(Ssl ssl) { |
68 | 68 | return new PemSslStoreBundle(keyStoreDetails, trustStoreDetails, ssl.getKeyAlias()); |
69 | 69 | } |
70 | 70 |
|
71 | | - private static SslStoreBundle createJksStoreBundle(Ssl ssl) { |
| 71 | + private static SslStoreBundle createPemKeyStoreBundle(Ssl ssl) { |
| 72 | + PemSslStoreDetails keyStoreDetails = new PemSslStoreDetails(ssl.getKeyStoreType(), ssl.getCertificate(), |
| 73 | + ssl.getCertificatePrivateKey()); |
| 74 | + return new PemSslStoreBundle(keyStoreDetails, null, ssl.getKeyAlias()); |
| 75 | + } |
| 76 | + |
| 77 | + private static SslStoreBundle createPemTrustStoreBundle(Ssl ssl) { |
| 78 | + PemSslStoreDetails trustStoreDetails = new PemSslStoreDetails(ssl.getTrustStoreType(), |
| 79 | + ssl.getTrustCertificate(), ssl.getTrustCertificatePrivateKey()); |
| 80 | + return new PemSslStoreBundle(null, trustStoreDetails, ssl.getKeyAlias()); |
| 81 | + } |
| 82 | + |
| 83 | + private static SslStoreBundle createJksKeyStoreBundle(Ssl ssl) { |
72 | 84 | JksSslStoreDetails keyStoreDetails = new JksSslStoreDetails(ssl.getKeyStoreType(), ssl.getKeyStoreProvider(), |
73 | 85 | ssl.getKeyStore(), ssl.getKeyStorePassword()); |
| 86 | + return new JksSslStoreBundle(keyStoreDetails, null); |
| 87 | + } |
| 88 | + |
| 89 | + private static SslStoreBundle createJksTrustStoreBundle(Ssl ssl) { |
74 | 90 | JksSslStoreDetails trustStoreDetails = new JksSslStoreDetails(ssl.getTrustStoreType(), |
75 | 91 | ssl.getTrustStoreProvider(), ssl.getTrustStore(), ssl.getTrustStorePassword()); |
76 | | - return new JksSslStoreBundle(keyStoreDetails, trustStoreDetails); |
| 92 | + return new JksSslStoreBundle(null, trustStoreDetails); |
77 | 93 | } |
78 | 94 |
|
79 | 95 | @Override |
@@ -156,30 +172,55 @@ public static SslBundle get(Ssl ssl, SslBundles sslBundles, SslStoreProvider ssl |
156 | 172 | } |
157 | 173 |
|
158 | 174 | private static SslStoreBundle createStoreBundle(Ssl ssl) { |
159 | | - if (hasCertificateProperties(ssl)) { |
160 | | - return createPemStoreBundle(ssl); |
| 175 | + KeyStore keyStore = createKeyStore(ssl); |
| 176 | + KeyStore trustStore = createTrustStore(ssl); |
| 177 | + return new WebServerSslStoreBundle(keyStore, trustStore, ssl.getKeyStorePassword()); |
| 178 | + } |
| 179 | + |
| 180 | + private static KeyStore createKeyStore(Ssl ssl) { |
| 181 | + if (hasPemKeyStoreProperties(ssl)) { |
| 182 | + return createPemKeyStoreBundle(ssl).getKeyStore(); |
| 183 | + } |
| 184 | + else if (hasJksKeyStoreProperties(ssl)) { |
| 185 | + return createJksKeyStoreBundle(ssl).getKeyStore(); |
| 186 | + } |
| 187 | + return null; |
| 188 | + } |
| 189 | + |
| 190 | + private static KeyStore createTrustStore(Ssl ssl) { |
| 191 | + if (hasPemTrustStoreProperties(ssl)) { |
| 192 | + return createPemTrustStoreBundle(ssl).getTrustStore(); |
161 | 193 | } |
162 | | - if (hasJavaKeyStoreProperties(ssl)) { |
163 | | - return createJksStoreBundle(ssl); |
| 194 | + else if (hasJksTrustStoreProperties(ssl)) { |
| 195 | + return createJksTrustStoreBundle(ssl).getTrustStore(); |
164 | 196 | } |
165 | | - throw new IllegalStateException("SSL is enabled but no trust material is configured"); |
| 197 | + return null; |
166 | 198 | } |
167 | 199 |
|
168 | 200 | static SslBundle createCertificateFileSslStoreProviderDelegate(Ssl ssl) { |
169 | | - if (!hasCertificateProperties(ssl)) { |
| 201 | + if (!hasPemKeyStoreProperties(ssl)) { |
170 | 202 | return null; |
171 | 203 | } |
172 | 204 | SslStoreBundle stores = createPemStoreBundle(ssl); |
173 | 205 | return new WebServerSslBundle(stores, ssl.getKeyPassword(), ssl); |
174 | 206 | } |
175 | 207 |
|
176 | | - private static boolean hasCertificateProperties(Ssl ssl) { |
| 208 | + private static boolean hasPemKeyStoreProperties(Ssl ssl) { |
177 | 209 | return Ssl.isEnabled(ssl) && ssl.getCertificate() != null && ssl.getCertificatePrivateKey() != null; |
178 | 210 | } |
179 | 211 |
|
180 | | - private static boolean hasJavaKeyStoreProperties(Ssl ssl) { |
181 | | - return Ssl.isEnabled(ssl) && ssl.getKeyStore() != null |
182 | | - || (ssl.getKeyStoreType() != null && ssl.getKeyStoreType().equals("PKCS11")); |
| 212 | + private static boolean hasPemTrustStoreProperties(Ssl ssl) { |
| 213 | + return Ssl.isEnabled(ssl) && ssl.getTrustCertificate() != null; |
| 214 | + } |
| 215 | + |
| 216 | + private static boolean hasJksKeyStoreProperties(Ssl ssl) { |
| 217 | + return Ssl.isEnabled(ssl) && (ssl.getKeyStore() != null |
| 218 | + || (ssl.getKeyStoreType() != null && ssl.getKeyStoreType().equals("PKCS11"))); |
| 219 | + } |
| 220 | + |
| 221 | + private static boolean hasJksTrustStoreProperties(Ssl ssl) { |
| 222 | + return Ssl.isEnabled(ssl) && (ssl.getTrustStore() != null |
| 223 | + || (ssl.getTrustStoreType() != null && ssl.getTrustStoreType().equals("PKCS11"))); |
183 | 224 | } |
184 | 225 |
|
185 | 226 | /** |
@@ -211,4 +252,36 @@ public KeyStore getTrustStore() { |
211 | 252 |
|
212 | 253 | } |
213 | 254 |
|
| 255 | + private static final class WebServerSslStoreBundle implements SslStoreBundle { |
| 256 | + |
| 257 | + private final KeyStore keyStore; |
| 258 | + |
| 259 | + private final KeyStore trustStore; |
| 260 | + |
| 261 | + private final String keyStorePassword; |
| 262 | + |
| 263 | + private WebServerSslStoreBundle(KeyStore keyStore, KeyStore trustStore, String keyStorePassword) { |
| 264 | + Assert.state(keyStore != null || trustStore != null, "SSL is enabled but no trust material is configured"); |
| 265 | + this.keyStore = keyStore; |
| 266 | + this.trustStore = trustStore; |
| 267 | + this.keyStorePassword = keyStorePassword; |
| 268 | + } |
| 269 | + |
| 270 | + @Override |
| 271 | + public KeyStore getKeyStore() { |
| 272 | + return this.keyStore; |
| 273 | + } |
| 274 | + |
| 275 | + @Override |
| 276 | + public KeyStore getTrustStore() { |
| 277 | + return this.trustStore; |
| 278 | + } |
| 279 | + |
| 280 | + @Override |
| 281 | + public String getKeyStorePassword() { |
| 282 | + return this.keyStorePassword; |
| 283 | + } |
| 284 | + |
| 285 | + } |
| 286 | + |
214 | 287 | } |
0 commit comments