Skip to content

Commit 1d61da1

Browse files
committed
Merge pull request #25884 from alex-bel-apica
* pr/25884: Polish "Properly close input streams when loading key stores" Properly close input streams when loading key stores Closes gh-25884
2 parents 2ac160a + 25b7495 commit 1d61da1

File tree

7 files changed

+40
-22
lines changed

7 files changed

+40
-22
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/couchbase/CouchbaseAutoConfiguration.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2020 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.autoconfigure.couchbase;
1818

19+
import java.io.InputStream;
1920
import java.net.URL;
2021
import java.security.KeyStore;
2122

@@ -107,7 +108,9 @@ private TrustManagerFactory getTrustManagerFactory(CouchbaseProperties.Ssl ssl)
107108
private KeyStore loadKeyStore(String resource, String keyStorePassword) throws Exception {
108109
KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
109110
URL url = ResourceUtils.getURL(resource);
110-
store.load(url.openStream(), (keyStorePassword != null) ? keyStorePassword.toCharArray() : null);
111+
try (InputStream stream = url.openStream()) {
112+
store.load(stream, (keyStorePassword != null) ? keyStorePassword.toCharArray() : null);
113+
}
111114
return store;
112115
}
113116

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/netty/SslServerCustomizer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2020 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.web.embedded.netty;
1818

19+
import java.io.InputStream;
1920
import java.net.Socket;
2021
import java.net.URL;
2122
import java.security.InvalidAlgorithmParameterException;
@@ -170,7 +171,9 @@ private KeyStore loadStore(String type, String provider, String resource, String
170171
KeyStore store = (provider != null) ? KeyStore.getInstance(type, provider) : KeyStore.getInstance(type);
171172
try {
172173
URL url = ResourceUtils.getURL(resource);
173-
store.load(url.openStream(), (password != null) ? password.toCharArray() : null);
174+
try (InputStream stream = url.openStream()) {
175+
store.load(stream, (password != null) ? password.toCharArray() : null);
176+
}
174177
return store;
175178
}
176179
catch (Exception ex) {

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/SslBuilderCustomizer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2020 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.web.embedded.undertow;
1818

19+
import java.io.InputStream;
1920
import java.net.InetAddress;
2021
import java.net.Socket;
2122
import java.net.URL;
@@ -181,7 +182,9 @@ private KeyStore loadStore(String type, String provider, String resource, String
181182
KeyStore store = (provider != null) ? KeyStore.getInstance(type, provider) : KeyStore.getInstance(type);
182183
try {
183184
URL url = ResourceUtils.getURL(resource);
184-
store.load(url.openStream(), (password != null) ? password.toCharArray() : null);
185+
try (InputStream stream = url.openStream()) {
186+
store.load(stream, (password != null) ? password.toCharArray() : null);
187+
}
185188
return store;
186189
}
187190
catch (Exception ex) {

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/SslConnectorCustomizerTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2020 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -220,8 +220,8 @@ void trustStorePasswordIsNotSetWhenNull() {
220220
private KeyStore loadStore() throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
221221
KeyStore keyStore = KeyStore.getInstance("JKS");
222222
Resource resource = new ClassPathResource("test.jks");
223-
try (InputStream inputStream = resource.getInputStream()) {
224-
keyStore.load(inputStream, "secret".toCharArray());
223+
try (InputStream stream = resource.getInputStream()) {
224+
keyStore.load(stream, "secret".toCharArray());
225225
return keyStore;
226226
}
227227
}

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
package org.springframework.boot.web.reactive.server;
1818

19-
import java.io.File;
2019
import java.io.FileInputStream;
20+
import java.io.InputStream;
2121
import java.net.InetSocketAddress;
2222
import java.nio.charset.StandardCharsets;
2323
import java.security.KeyStore;
@@ -228,7 +228,9 @@ void sslWantsClientAuthenticationSucceedsWithoutClientCertificate() {
228228

229229
protected ReactorClientHttpConnector buildTrustAllSslWithClientKeyConnector() throws Exception {
230230
KeyStore clientKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
231-
clientKeyStore.load(new FileInputStream(new File("src/test/resources/test.jks")), "secret".toCharArray());
231+
try (InputStream stream = new FileInputStream("src/test/resources/test.jks")) {
232+
clientKeyStore.load(stream, "secret".toCharArray());
233+
}
232234
KeyManagerFactory clientKeyManagerFactory = KeyManagerFactory
233235
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
234236
clientKeyManagerFactory.init(clientKeyStore, "password".toCharArray());

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/server/SslConfigurationValidatorTests.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2020 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,8 +16,8 @@
1616

1717
package org.springframework.boot.web.server;
1818

19-
import java.io.File;
2019
import java.io.FileInputStream;
20+
import java.io.InputStream;
2121
import java.security.KeyStore;
2222
import java.security.KeyStoreException;
2323

@@ -43,7 +43,9 @@ class SslConfigurationValidatorTests {
4343
@BeforeEach
4444
void loadKeystore() throws Exception {
4545
this.keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
46-
this.keyStore.load(new FileInputStream(new File("src/test/resources/test.jks")), "secret".toCharArray());
46+
try (InputStream stream = new FileInputStream("src/test/resources/test.jks")) {
47+
this.keyStore.load(stream, "secret".toCharArray());
48+
}
4749
}
4850

4951
@Test

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.springframework.boot.web.servlet.server;
1818

1919
import java.io.File;
20-
import java.io.FileInputStream;
2120
import java.io.FileWriter;
2221
import java.io.IOException;
2322
import java.io.InputStream;
@@ -126,6 +125,7 @@
126125
import org.springframework.boot.web.servlet.ServletRegistrationBean;
127126
import org.springframework.boot.web.servlet.server.Session.SessionTrackingMode;
128127
import org.springframework.core.io.ClassPathResource;
128+
import org.springframework.core.io.FileSystemResource;
129129
import org.springframework.core.io.Resource;
130130
import org.springframework.http.HttpMethod;
131131
import org.springframework.http.HttpStatus;
@@ -542,7 +542,7 @@ void pkcs12KeyStoreAndTrustStore() throws Exception {
542542
this.webServer = factory.getWebServer();
543543
this.webServer.start();
544544
KeyStore keyStore = KeyStore.getInstance("pkcs12");
545-
keyStore.load(new FileInputStream(new File("src/test/resources/test.p12")), "secret".toCharArray());
545+
loadStore(keyStore, new FileSystemResource("src/test/resources/test.p12"));
546546
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
547547
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
548548
.loadKeyMaterial(keyStore, "secret".toCharArray()).build());
@@ -559,7 +559,7 @@ void sslNeedsClientAuthenticationSucceedsWithClientCertificate() throws Exceptio
559559
this.webServer = factory.getWebServer();
560560
this.webServer.start();
561561
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
562-
keyStore.load(new FileInputStream(new File("src/test/resources/test.jks")), "secret".toCharArray());
562+
loadStore(keyStore, new FileSystemResource("src/test/resources/test.jks"));
563563
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
564564
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
565565
.loadKeyMaterial(keyStore, "password".toCharArray()).build());
@@ -592,7 +592,7 @@ void sslWantsClientAuthenticationSucceedsWithClientCertificate() throws Exceptio
592592
this.webServer = factory.getWebServer();
593593
this.webServer.start();
594594
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
595-
keyStore.load(new FileInputStream(new File("src/test/resources/test.jks")), "secret".toCharArray());
595+
loadStore(keyStore, new FileSystemResource("src/test/resources/test.jks"));
596596
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
597597
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
598598
.loadKeyMaterial(keyStore, "password".toCharArray()).build());
@@ -630,7 +630,7 @@ void sslWithCustomSslStoreProvider() throws Exception {
630630
this.webServer = factory.getWebServer();
631631
this.webServer.start();
632632
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
633-
keyStore.load(new FileInputStream(new File("src/test/resources/test.jks")), "secret".toCharArray());
633+
loadStore(keyStore, new FileSystemResource("src/test/resources/test.jks"));
634634
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
635635
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
636636
.loadKeyMaterial(keyStore, "password".toCharArray()).build());
@@ -1354,9 +1354,14 @@ protected final void doWithBlockedPort(BlockedPortAction action) throws Exceptio
13541354
private KeyStore loadStore() throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
13551355
KeyStore keyStore = KeyStore.getInstance("JKS");
13561356
Resource resource = new ClassPathResource("test.jks");
1357-
try (InputStream inputStream = resource.getInputStream()) {
1358-
keyStore.load(inputStream, "secret".toCharArray());
1359-
return keyStore;
1357+
loadStore(keyStore, resource);
1358+
return keyStore;
1359+
}
1360+
1361+
private void loadStore(KeyStore keyStore, Resource resource)
1362+
throws IOException, NoSuchAlgorithmException, CertificateException {
1363+
try (InputStream stream = resource.getInputStream()) {
1364+
keyStore.load(stream, "secret".toCharArray());
13601365
}
13611366
}
13621367

0 commit comments

Comments
 (0)