This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new e8e2353f5ee [IOTDB-6204] Pipe: Changed the default settings and add
manual configuration logic for opc-ua-connector key directory (#11373)
e8e2353f5ee is described below
commit e8e2353f5eea7d28cfae20ecfc27a96f612b192f
Author: Caideyipi <[email protected]>
AuthorDate: Wed Oct 25 10:36:24 2023 +0800
[IOTDB-6204] Pipe: Changed the default settings and add manual
configuration logic for opc-ua-connector key directory (#11373)
The previous opc-ua-connector key directory setting "java.io.tmpdir" is not
capable of keeping certificates in a long run, thus the key directory is now
configurable and resides in "%IOTDB-CONF%/opc-security" directory by default.
If directory "%IOTDB-CONF% can not be resolved, use
"user.home/iotdb-opc-security" by default.
---
.../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 44 ++++++++++++----------
.../config/constant/PipeConnectorConstant.java | 9 +++++
.../connector/protocol/opcua/OpcUaConnector.java | 6 +++
.../protocol/opcua/OpcUaServerBuilder.java | 20 ++++++----
4 files changed, 53 insertions(+), 26 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 5bf62aa2eee..e4ab5e2d392 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -116,33 +116,39 @@ public class IoTDBDescriptor {
return conf;
}
+ public String getConfDir() {
+ // Check if a config-directory was specified first.
+ String confString = System.getProperty(IoTDBConstant.IOTDB_CONF, null);
+ // If it wasn't, check if a home directory was provided (This usually
contains a config)
+ if (confString == null) {
+ confString = System.getProperty(IoTDBConstant.IOTDB_HOME, null);
+ if (confString != null) {
+ confString = confString + File.separatorChar + "conf";
+ }
+ }
+ return confString;
+ }
+
/**
* get props url location
*
* @return url object if location exit, otherwise null.
*/
public URL getPropsUrl(String configFileName) {
- // Check if a config-directory was specified first.
- String urlString = System.getProperty(IoTDBConstant.IOTDB_CONF, null);
- // If it wasn't, check if a home directory was provided (This usually
contains a config)
+ String urlString = getConfDir();
if (urlString == null) {
- urlString = System.getProperty(IoTDBConstant.IOTDB_HOME, null);
- if (urlString != null) {
- urlString = urlString + File.separatorChar + "conf" +
File.separatorChar + configFileName;
- } else {
- // If this too wasn't provided, try to find a default config in the
root of the classpath.
- URL uri = IoTDBConfig.class.getResource("/" + configFileName);
- if (uri != null) {
- return uri;
- }
- logger.warn(
- "Cannot find IOTDB_HOME or IOTDB_CONF environment variable when
loading "
- + "config file {}, use default configuration",
- configFileName);
- // update all data seriesPath
- conf.updatePath();
- return null;
+ // If urlString wasn't provided, try to find a default config in the
root of the classpath.
+ URL uri = IoTDBConfig.class.getResource("/" + configFileName);
+ if (uri != null) {
+ return uri;
}
+ logger.warn(
+ "Cannot find IOTDB_HOME or IOTDB_CONF environment variable when
loading "
+ + "config file {}, use default configuration",
+ configFileName);
+ // update all data seriesPath
+ conf.updatePath();
+ return null;
}
// If a config location was provided, but it doesn't end with a properties
file,
// append the default location.
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
index 3414b7a9b29..8ed5af7ed56 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
@@ -20,6 +20,9 @@
package org.apache.iotdb.db.pipe.config.constant;
import org.apache.iotdb.commons.pipe.config.PipeConfig;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+
+import java.io.File;
import static org.apache.iotdb.commons.conf.IoTDBConstant.MB;
@@ -70,6 +73,12 @@ public class PipeConnectorConstant {
public static final String CONNECTOR_OPC_UA_HTTPS_BIND_PORT_KEY =
"connector.opcua.https.port";
public static final int CONNECTOR_OPC_UA_HTTPS_BIND_PORT_DEFAULT_VALUE =
8443;
+ public static final String CONNECTOR_OPC_UA_SECURITY_DIR_KEY =
"connector.opcua.security.dir";
+ public static final String CONNECTOR_OPC_UA_SECURITY_DIR_DEFAULT_VALUE =
+ IoTDBDescriptor.getInstance().getConfDir() != null
+ ? IoTDBDescriptor.getInstance().getConfDir() + File.separatorChar +
"opc_security"
+ : System.getProperty("user.home") + File.separatorChar +
"iotdb_opc_security";
+
private PipeConnectorConstant() {
throw new IllegalStateException("Utility class");
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaConnector.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaConnector.java
index bc86efb6ec1..cdfcb044392 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaConnector.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaConnector.java
@@ -56,6 +56,8 @@ import static
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CON
import static
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_IOTDB_USER_KEY;
import static
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_HTTPS_BIND_PORT_DEFAULT_VALUE;
import static
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_HTTPS_BIND_PORT_KEY;
+import static
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_SECURITY_DIR_DEFAULT_VALUE;
+import static
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_SECURITY_DIR_KEY;
import static
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_TCP_BIND_PORT_DEFAULT_VALUE;
import static
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_TCP_BIND_PORT_KEY;
@@ -94,6 +96,9 @@ public class OpcUaConnector implements PipeConnector {
String password =
parameters.getStringOrDefault(
CONNECTOR_IOTDB_PASSWORD_KEY,
CONNECTOR_IOTDB_PASSWORD_DEFAULT_VALUE);
+ String securityDir =
+ parameters.getStringOrDefault(
+ CONNECTOR_OPC_UA_SECURITY_DIR_KEY,
CONNECTOR_OPC_UA_SECURITY_DIR_DEFAULT_VALUE);
synchronized (SERVER_KEY_TO_REFERENCE_COUNT_AND_SERVER_MAP) {
serverKey = httpsBindPort + ":" + tcpBindPort;
@@ -110,6 +115,7 @@ public class OpcUaConnector implements PipeConnector {
.setHttpsBindPort(httpsBindPort)
.setUser(user)
.setPassword(password)
+ .setSecurityDir(securityDir)
.build();
newServer.startup();
return new Pair<>(new AtomicInteger(0), newServer);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaServerBuilder.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaServerBuilder.java
index 70ddcab732a..0771bc69101 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaServerBuilder.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaServerBuilder.java
@@ -78,12 +78,14 @@ public class OpcUaServerBuilder {
private int httpsBindPort;
private String user;
private String password;
+ private Path securityDir;
public OpcUaServerBuilder() {
tcpBindPort =
PipeConnectorConstant.CONNECTOR_OPC_UA_TCP_BIND_PORT_DEFAULT_VALUE;
httpsBindPort =
PipeConnectorConstant.CONNECTOR_OPC_UA_HTTPS_BIND_PORT_DEFAULT_VALUE;
user = PipeConnectorConstant.CONNECTOR_IOTDB_USER_DEFAULT_VALUE;
password = PipeConnectorConstant.CONNECTOR_IOTDB_PASSWORD_DEFAULT_VALUE;
+ securityDir =
Paths.get(PipeConnectorConstant.CONNECTOR_OPC_UA_SECURITY_DIR_DEFAULT_VALUE);
}
public OpcUaServerBuilder setTcpBindPort(int tcpBindPort) {
@@ -106,22 +108,26 @@ public class OpcUaServerBuilder {
return this;
}
+ public OpcUaServerBuilder setSecurityDir(String securityDir) {
+ this.securityDir = Paths.get(securityDir);
+ return this;
+ }
+
public OpcUaServer build() throws Exception {
- Path securityTempDir = Paths.get(System.getProperty("java.io.tmpdir"),
"iotdb", "security");
- Files.createDirectories(securityTempDir);
- if (!Files.exists(securityTempDir)) {
- throw new PipeException("Unable to create security temp dir: " +
securityTempDir);
+ Files.createDirectories(securityDir);
+ if (!Files.exists(securityDir)) {
+ throw new PipeException("Unable to create security dir: " + securityDir);
}
- File pkiDir = securityTempDir.resolve("pki").toFile();
+ File pkiDir = securityDir.resolve("pki").toFile();
LoggerFactory.getLogger(OpcUaServerBuilder.class)
- .info("Security dir: {}", securityTempDir.toAbsolutePath());
+ .info("Security dir: {}", securityDir.toAbsolutePath());
LoggerFactory.getLogger(OpcUaServerBuilder.class)
.info("Security pki dir: {}", pkiDir.getAbsolutePath());
OpcUaKeyStoreLoader loader =
- new OpcUaKeyStoreLoader().load(securityTempDir,
password.toCharArray());
+ new OpcUaKeyStoreLoader().load(securityDir, password.toCharArray());
DefaultCertificateManager certificateManager =
new DefaultCertificateManager(loader.getServerKeyPair(),
loader.getServerCertificate());