Skip to content

Commit 8a9b9e4

Browse files
committed
Added SSL support
1 parent ef33c69 commit 8a9b9e4

2 files changed

Lines changed: 80 additions & 17 deletions

File tree

src/main/java/com/github/dockerjava/core/DockerClientConfig.java

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
public class DockerClientConfig {
1212
private final URI uri;
13-
private final String version, username, password, email;
13+
private final String version, username, password, email, keystore, keystorePassword, truststore, truststorePassword;
1414
private final Integer readTimeout;
1515
private final boolean loggingFilterEnabled;
1616

@@ -22,6 +22,10 @@ private DockerClientConfig(DockerClientConfigBuilder builder) {
2222
this.email = builder.email;
2323
this.readTimeout = builder.readTimeout;
2424
this.loggingFilterEnabled = builder.loggingFilterEnabled;
25+
this.keystore = builder.keystore;
26+
this.keystorePassword = builder.keystorePassword;
27+
this.truststore = builder.truststore;
28+
this.truststorePassword = builder.truststorePassword;
2529
}
2630

2731
public URI getUri() {
@@ -51,6 +55,22 @@ public Integer getReadTimeout() {
5155
public boolean isLoggingFilterEnabled() {
5256
return loggingFilterEnabled;
5357
}
58+
59+
public String getKeystore() {
60+
return keystore;
61+
}
62+
63+
public String getKeystorePassword() {
64+
return keystorePassword;
65+
}
66+
67+
public String getTruststore() {
68+
return truststore;
69+
}
70+
71+
public String getTruststorePassword() {
72+
return truststorePassword;
73+
}
5474

5575
public static Properties loadIncludedDockerProperties() {
5676
try {
@@ -97,7 +117,7 @@ public static Properties overrideDockerPropertiesWithSystemProperties(Properties
97117
overriddenProperties.putAll(p);
98118

99119
// TODO Add all values from system properties that begin with docker.io.*
100-
for (String s : new String[]{ "url", "version", "username", "password", "email", "readTimeout", "enableLoggingFilter"}) {
120+
for (String s : new String[]{ "url", "version", "username", "password", "email", "readTimeout", "enableLoggingFilter", "keystore", "keystorePassword", "truststore", "truststorePassword"}) {
101121
final String key = "docker.io." + s;
102122
if (System.getProperties().containsKey(key)) {
103123
overriddenProperties.setProperty(key, System.getProperty(key));
@@ -115,7 +135,7 @@ public static DockerClientConfigBuilder createDefaultConfigBuilder() {
115135

116136
public static class DockerClientConfigBuilder {
117137
private URI uri;
118-
private String version, username, password, email;
138+
private String version, username, password, email, keystore, keystorePassword, truststore, truststorePassword;
119139
private Integer readTimeout;
120140
private boolean loggingFilterEnabled;
121141

@@ -138,7 +158,11 @@ public DockerClientConfigBuilder withProperties(Properties p) {
138158
.withPassword(p.getProperty("docker.io.password"))
139159
.withEmail(p.getProperty("docker.io.email"))
140160
.withReadTimeout(Integer.valueOf(p.getProperty("docker.io.readTimeout", "0")))
141-
.withLoggingFilter(Boolean.valueOf(p.getProperty("docker.io.enableLoggingFilter", "true")));
161+
.withLoggingFilter(Boolean.valueOf(p.getProperty("docker.io.enableLoggingFilter", "true")))
162+
.withKeystore(p.getProperty("docker.io.keystore"))
163+
.withKeystorePassword(p.getProperty("docker.io.keystorePassword"))
164+
.withTruststore(p.getProperty("docker.io.truststore"))
165+
.withTruststorePassword(p.getProperty("docker.io.truststorePassword"));
142166
}
143167

144168
public final DockerClientConfigBuilder withUri(String uri) {
@@ -170,6 +194,22 @@ public final DockerClientConfigBuilder withLoggingFilter(boolean loggingFilterEn
170194
this.loggingFilterEnabled = loggingFilterEnabled;
171195
return this;
172196
}
197+
public final DockerClientConfigBuilder withKeystore(String keystore) {
198+
this.keystore = keystore;
199+
return this;
200+
}
201+
public final DockerClientConfigBuilder withKeystorePassword(String keystorePassword) {
202+
this.keystorePassword = keystorePassword;
203+
return this;
204+
}
205+
public final DockerClientConfigBuilder withTruststore(String truststore) {
206+
this.truststore = truststore;
207+
return this;
208+
}
209+
public final DockerClientConfigBuilder withTruststorePassword(String truststorePassword) {
210+
this.truststorePassword = truststorePassword;
211+
return this;
212+
}
173213
public DockerClientConfig build() {
174214
return new DockerClientConfig(this);
175215
}

src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,5 @@
11
package com.github.dockerjava.jaxrs;
22

3-
import java.io.IOException;
4-
import java.util.logging.Logger;
5-
6-
import javax.ws.rs.client.Client;
7-
import javax.ws.rs.client.ClientBuilder;
8-
import javax.ws.rs.client.WebTarget;
9-
10-
import com.github.dockerjava.api.command.EventsCmd;
11-
import org.glassfish.jersey.client.ClientConfig;
12-
import org.glassfish.jersey.client.ClientProperties;
13-
import org.glassfish.jersey.CommonProperties;
14-
153
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
164
import com.github.dockerjava.api.command.AttachContainerCmd;
175
import com.github.dockerjava.api.command.AuthCmd;
@@ -22,6 +10,7 @@
2210
import com.github.dockerjava.api.command.CreateContainerCmd;
2311
import com.github.dockerjava.api.command.CreateImageCmd;
2412
import com.github.dockerjava.api.command.DockerCmdExecFactory;
13+
import com.github.dockerjava.api.command.EventsCmd;
2514
import com.github.dockerjava.api.command.InfoCmd;
2615
import com.github.dockerjava.api.command.InspectContainerCmd;
2716
import com.github.dockerjava.api.command.InspectImageCmd;
@@ -50,6 +39,19 @@
5039
import com.github.dockerjava.jaxrs.util.SelectiveLoggingFilter;
5140
import com.google.common.base.Preconditions;
5241

42+
import java.io.IOException;
43+
import java.util.logging.Logger;
44+
45+
import javax.net.ssl.SSLContext;
46+
import javax.ws.rs.client.Client;
47+
import javax.ws.rs.client.ClientBuilder;
48+
import javax.ws.rs.client.WebTarget;
49+
50+
import org.glassfish.jersey.CommonProperties;
51+
import org.glassfish.jersey.SslConfigurator;
52+
import org.glassfish.jersey.client.ClientConfig;
53+
import org.glassfish.jersey.client.ClientProperties;
54+
5355
public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory {
5456

5557
private Client client;
@@ -78,7 +80,28 @@ public void init(DockerClientConfig dockerClientConfig) {
7880
int readTimeout = dockerClientConfig.getReadTimeout();
7981
clientConfig.property(ClientProperties.READ_TIMEOUT, readTimeout);
8082
}
81-
client = ClientBuilder.newClient(clientConfig);
83+
84+
ClientBuilder clientBuilder = ClientBuilder.newBuilder().withConfig(clientConfig);
85+
86+
87+
if((dockerClientConfig.getKeystore() != null && dockerClientConfig.getKeystorePassword() != null) || (dockerClientConfig.getTruststore() != null && dockerClientConfig.getTruststorePassword() != null)) {
88+
SslConfigurator sslConfig = SslConfigurator.newInstance();
89+
90+
if(dockerClientConfig.getKeystore() != null && dockerClientConfig.getKeystorePassword() != null) {
91+
sslConfig.keyStoreFile(dockerClientConfig.getKeystore());
92+
sslConfig.keyStorePassword(dockerClientConfig.getKeystorePassword());
93+
}
94+
95+
if(dockerClientConfig.getTruststore() != null && dockerClientConfig.getTruststorePassword() != null) {
96+
sslConfig.trustStoreFile(dockerClientConfig.getTruststore());
97+
sslConfig.trustStorePassword(dockerClientConfig.getTruststorePassword());
98+
}
99+
100+
SSLContext sslContext = sslConfig.createSSLContext();
101+
clientBuilder.sslContext(sslContext);
102+
}
103+
104+
client = clientBuilder.build();
82105

83106
WebTarget webResource = client.target(dockerClientConfig.getUri());
84107

0 commit comments

Comments
 (0)