embulk-executor-remoteserver 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f28395ebbd29d2028501114573e227c225fd8b6c
4
- data.tar.gz: ab865e0e32d2c4d4b56057497278ab61ee1d64be
3
+ metadata.gz: 06471b084ea22f52ecc00bfdfe47b86f87eeb69f
4
+ data.tar.gz: 729aa405aca16d6f929ed8fe7a5f74dd4ceedeac
5
5
  SHA512:
6
- metadata.gz: 7de676f12a5aab6ff29d4b43c191b06637f40901037e21bf05a9c98432bff45766e67626d6d6d7cb097d7f065a92e3fe4924b2abaa22fc497d7b530f60a43112
7
- data.tar.gz: 7dc8342789e19402d7a1d61f25bb7525aaed2525496eb93d482f42b078e25ba2ce387c78e35785788c0a89898c3ce99d074692fa99fd5f000f04372a3d10dc3f
6
+ metadata.gz: 1aa9cc6537396d1ccf54c21329743332cbaed54d76b57ccfeccdb2ba2426d944c1dcf04e39b61f19aabdfc4c57b4e7e4600068d3201ed04cc73902730c274aef
7
+ data.tar.gz: 50e4cff41b9e5726e5ac07f5ae57ba14a3e04088659c370eb2c6145d3203b13f1fde454ac85cd18237ac5c6d809006e27717eebaca9612b7e4635e31a7a0619f
data/README.md CHANGED
@@ -15,12 +15,10 @@ Embulk executor plugin to run Embulk tasks on remote servers.
15
15
  - **hosts**: List of remote servers (`hostname` or `hostname:port`, default port is `30001`). If not specified, the executor runs as the local mode, which starts an Embulk server on its own process (array of string)
16
16
  - **timeout_seconds**: Timeout seconds of the whole execution (integer, default: `3600`)
17
17
  - **use_tls**: Enable to connect server over TLS (boolean, default: `false`)
18
- - **cert_p12_file**: Information of a P12 file used as your client certificate. It would be needed when client authentication is enabled on Embulk server.
19
- - **path**: Path of the file (string, required)
20
- - **password**: Password of the file (string, required)
21
- - **ca_p12_file**: Information of a P12 file used as CA certificate. It would be needed when Embulk server uses a certificate in which unknown CA signed.
18
+ - **cert_p12_file**: Information of a PKCS12 file used as your client certificate. It would be needed when client authentication is enabled on Embulk server.
22
19
  - **path**: Path of the file (string, required)
23
20
  - **password**: Password of the file (string, required)
21
+ - **ca_cert_path**: Path of a CA certificate file. It would be needed when Embulk server uses a certificate signed by an unknown CA.
24
22
 
25
23
  ## Example
26
24
 
@@ -51,8 +49,8 @@ There are some environment variables to configure the server
51
49
  - `PORT`: Port number to listen (default: `30001`)
52
50
  - `USE_TLS`: Try to connect to client via TLS if `true` (default: `false`)
53
51
  - `REQUIRE_TLS_CLIENT_AUTH`: Require client authentication if `true` (default: `false`)
54
- - `CERT_P12_PATH`, `CERT_P12_PASSWORD`: Path and password of the P12 file for server certificate. Ignored unless both is set.
55
- - `CA_P12_PATH`, `CA_P12_PASSWORD`: Path and password of the P12 file for CA certificate. Ignored unless both is set.
52
+ - `CERT_P12_PATH`, `CERT_P12_PASSWORD`: Path and password of the PKCS12 file for server certificate. Ignored unless both is set.
53
+ - `CA_CERT_PATH`: Path of the CA certificate file. It would be needed when client authentication is enabled and client certificate is signed by an unknown CA.
56
54
 
57
55
  ## Build
58
56
 
data/gradle.properties CHANGED
@@ -1 +1 @@
1
- version=0.3.2
1
+ version=0.4.0
@@ -28,18 +28,15 @@ public class Launcher {
28
28
  String keyP12Path = envVars.get("CERT_P12_PATH");
29
29
  String keyP12Password = envVars.get("CERT_P12_PASSWORD");
30
30
  if (keyP12Path != null && keyP12Password != null) {
31
- tlsConfig.keyStore(new P12File(keyP12Path, keyP12Password));
31
+ tlsConfig.setKeyStore(new P12File(keyP12Path, keyP12Password));
32
32
  }
33
33
 
34
- String trustP12Path = envVars.get("CA_P12_PATH");
35
- String trustP12Password = envVars.get("CA_P12_PASSWORD");
36
- if (trustP12Path != null && trustP12Password != null) {
37
- tlsConfig.trustStore(new P12File(trustP12Path, trustP12Password));
34
+ String caCertPath = envVars.get("CA_CERT_PATH");
35
+ if (caCertPath != null) {
36
+ tlsConfig.setCaCertPath(caCertPath);
38
37
  }
39
38
 
40
- if ("true".equals(envVars.get("REQUIRE_TLS_CLIENT_AUTH"))) {
41
- tlsConfig.enableClientAuth(true);
42
- }
39
+ tlsConfig.setEnableClientAuth("true".equals(envVars.get("REQUIRE_TLS_CLIENT_AUTH")));
43
40
  return tlsConfig;
44
41
  }
45
42
 
@@ -51,9 +51,9 @@ public class RemoteServerExecutor implements ExecutorPlugin {
51
51
  @ConfigDefault("null")
52
52
  Optional<P12File> getCertP12File();
53
53
 
54
- @Config("ca_p12_file")
54
+ @Config("ca_cert_path")
55
55
  @ConfigDefault("null")
56
- Optional<P12File> getCaP12File();
56
+ Optional<String> getCaCertPath();
57
57
 
58
58
  @ConfigInject
59
59
  ModelManager getModelManager();
@@ -63,9 +63,9 @@ public class RemoteServerExecutor implements ExecutorPlugin {
63
63
  @ConfigDefault("null")
64
64
  Optional<P12File> getServerCertP12File();
65
65
 
66
- @Config("__server_ca_p12_file")
66
+ @Config("__server_ca_cert_path")
67
67
  @ConfigDefault("null")
68
- Optional<P12File> getServerCaP12File();
68
+ Optional<String> getServerCaCertPath();
69
69
 
70
70
  @Config("__server_require_tls_client_auth")
71
71
  @ConfigDefault("false")
@@ -133,8 +133,8 @@ public class RemoteServerExecutor implements ExecutorPlugin {
133
133
  TLSConfig tlsConfig = null;
134
134
  if (pluginTask.getUseTls()) {
135
135
  tlsConfig = new TLSConfig();
136
- pluginTask.getCertP12File().ifPresent(tlsConfig::keyStore);
137
- pluginTask.getCaP12File().ifPresent(tlsConfig::trustStore);
136
+ pluginTask.getCertP12File().ifPresent(tlsConfig::setKeyStore);
137
+ pluginTask.getCaCertPath().ifPresent(tlsConfig::setCaCertPath);
138
138
  }
139
139
 
140
140
  try (EmbulkClient client = EmbulkClient.open(session, hosts, tlsConfig)) {
@@ -171,11 +171,9 @@ public class RemoteServerExecutor implements ExecutorPlugin {
171
171
  TLSConfig tlsConfig = null;
172
172
  if (task.getUseTls()) {
173
173
  tlsConfig = new TLSConfig();
174
- task.getServerCertP12File().ifPresent(tlsConfig::keyStore);
175
- task.getServerCaP12File().ifPresent(tlsConfig::trustStore);
176
- if (task.getServerRequireTlsClientAuth()) {
177
- tlsConfig.enableClientAuth(true);
178
- }
174
+ task.getServerCertP12File().ifPresent(tlsConfig::setKeyStore);
175
+ task.getServerCaCertPath().ifPresent(tlsConfig::setCaCertPath);
176
+ tlsConfig.setEnableClientAuth(task.getServerRequireTlsClientAuth());
179
177
  }
180
178
  return EmbulkServer.start(DEFAULT_HOST.getName(), DEFAULT_HOST.getPort(), 1, tlsConfig);
181
179
  }
@@ -8,43 +8,41 @@ import javax.net.ssl.TrustManagerFactory;
8
8
  import java.io.FileInputStream;
9
9
  import java.io.InputStream;
10
10
  import java.security.KeyStore;
11
+ import java.security.cert.CertificateFactory;
11
12
 
12
13
  class TLSConfig {
13
14
  private P12File keyStore = null;
14
- private P12File trustStore = null;
15
+ private String caCertPath = null;
15
16
  private boolean enableClientAuth = false;
16
17
 
17
18
  TLSConfig() {
18
19
  }
19
20
 
20
- TLSConfig keyStore(P12File keyStore) {
21
+ void setKeyStore(P12File keyStore) {
21
22
  this.keyStore = keyStore;
22
- return this;
23
23
  }
24
24
 
25
- TLSConfig trustStore(P12File trustStore) {
26
- this.trustStore = trustStore;
27
- return this;
25
+ void setEnableClientAuth(boolean enableClientAuth) {
26
+ this.enableClientAuth = enableClientAuth;
28
27
  }
29
28
 
30
- TLSConfig enableClientAuth(boolean enableClientAuth) {
31
- this.enableClientAuth = enableClientAuth;
32
- return this;
29
+ void setCaCertPath(String caCertPath) {
30
+ this.caCertPath = caCertPath;
33
31
  }
34
32
 
35
33
  SSLContext getSSLContext() {
36
34
  try {
37
35
  KeyManager[] keyManagers = null;
38
36
  if (keyStore != null) {
39
- KeyStore ks = load(keyStore);
37
+ KeyStore ks = loadKeyStore(keyStore);
40
38
  KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
41
39
  kmf.init(ks, keyStore.getPassword().toCharArray());
42
40
  keyManagers = kmf.getKeyManagers();
43
41
  }
44
42
 
45
43
  TrustManager[] trustManagers = null;
46
- if (trustStore != null) {
47
- KeyStore ts = load(trustStore);
44
+ if (caCertPath != null) {
45
+ KeyStore ts = loadTrustStore(caCertPath);
48
46
  TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
49
47
  tmf.init(ts);
50
48
  trustManagers = tmf.getTrustManagers();
@@ -62,7 +60,7 @@ class TLSConfig {
62
60
  return enableClientAuth;
63
61
  }
64
62
 
65
- private static KeyStore load(P12File file) {
63
+ private static KeyStore loadKeyStore(P12File file) {
66
64
  try (InputStream keyStoreIS = new FileInputStream(file.getPath())) {
67
65
  KeyStore ks = KeyStore.getInstance("PKCS12");
68
66
  ks.load(keyStoreIS, file.getPassword().toCharArray());
@@ -71,4 +69,14 @@ class TLSConfig {
71
69
  throw new RuntimeException(e);
72
70
  }
73
71
  }
72
+
73
+ private static KeyStore loadTrustStore(String path) throws Exception {
74
+ try (FileInputStream inputStream = new FileInputStream(path)) {
75
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
76
+ KeyStore ks = KeyStore.getInstance("JKS");
77
+ ks.load(null, null);
78
+ ks.setCertificateEntry("ca_cert", cf.generateCertificate(inputStream));
79
+ return ks;
80
+ }
81
+ }
74
82
  }
@@ -7,7 +7,4 @@ use_tls: true
7
7
  cert_p12_file:
8
8
  path: tmp/certs/client.p12
9
9
  password: fghij
10
- ca_p12_file:
11
- path: tmp/certs/ca-chain.p12
12
- password: p@ssw0rd
13
-
10
+ ca_cert_path: tmp/certs/ca-chain.cert.pem
@@ -24,8 +24,7 @@ services:
24
24
  REQUIRE_TLS_CLIENT_AUTH: "true"
25
25
  CERT_P12_PATH: /certs/embulk-server.local.p12
26
26
  CERT_P12_PASSWORD: abcde
27
- CA_P12_PATH: /certs/ca-chain.p12
28
- CA_P12_PASSWORD: p@ssw0rd
27
+ CA_CERT_PATH: /certs/ca-chain.cert.pem
29
28
  ports:
30
29
  - "30003:30001"
31
30
  volumes:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-executor-remoteserver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shinichi Ishimura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-25 00:00:00.000000000 Z
11
+ date: 2019-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -51,7 +51,7 @@ files:
51
51
  - LICENSE
52
52
  - README.md
53
53
  - build.gradle
54
- - classpath/embulk-executor-remoteserver-0.3.2.jar
54
+ - classpath/embulk-executor-remoteserver-0.4.0.jar
55
55
  - classpath/msgpack-core-0.8.16.jar
56
56
  - classpath/nsocket-0.3.4.jar
57
57
  - classpath/slf4j-api-1.7.26.jar