Renaming of the lwm2m configuration properties
This commit is contained in:
parent
ee55c0bf85
commit
690c97dd4d
@ -647,42 +647,40 @@ transport:
|
||||
bind_address: "${LWM2M_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BIND_PORT:5685}"
|
||||
security:
|
||||
bind_address: "${LWM2M_BIND_ADDRESS_SECURITY:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BIND_PORT_SECURITY:5686}"
|
||||
bind_address: "${LWM2M_SECURITY_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_SECURITY_BIND_PORT:5686}"
|
||||
# Only Certificate_x509:
|
||||
alias: "${LWM2M_KEYSTORE_SERVER_ALIAS:server}"
|
||||
password: "${LWM2M_KEYSTORE_SERVER_PASSWORD:server_ks_password}"
|
||||
key_alias: "${LWM2M_SERVER_KEY_ALIAS:server}"
|
||||
key_password: "${LWM2M_SERVER_KEY_PASSWORD:server_ks_password}"
|
||||
skip_validity_check_for_client_cert: "${TB_LWM2M_SERVER_SECURITY_SKIP_VALIDITY_CHECK_FOR_CLIENT_CERT:false}"
|
||||
bootstrap:
|
||||
enable: "${LWM2M_ENABLED_BS:true}"
|
||||
id: "${LWM2M_SERVER_ID_BS:111}"
|
||||
bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BIND_PORT_BS:5687}"
|
||||
bind_address: "${LWM2M_BS_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BS_BIND_PORT:5687}"
|
||||
security:
|
||||
bind_address: "${LWM2M_BIND_ADDRESS_SECURITY_BS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BIND_PORT_SECURITY_BS:5688}"
|
||||
bind_address: "${LWM2M_BS_SECURITY_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BS_SECURITY_BIND_PORT:5688}"
|
||||
# Only Certificate_x509:
|
||||
alias: "${LWM2M_KEYSTORE_BS_ALIAS:bootstrap}"
|
||||
password: "${LWM2M_KEYSTORE_BS_PASSWORD:server_ks_password}"
|
||||
key_alias: "${LWM2M_BS_KEY_ALIAS:bootstrap}"
|
||||
key_password: "${LWM2M_BS_KEY_PASSWORD:server_ks_password}"
|
||||
security:
|
||||
# Certificate_x509:
|
||||
# To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format
|
||||
# Create new X509 Certificates: common/transport/lwm2m/src/main/resources/credentials/shell/lwM2M_credentials.sh
|
||||
key_store_type: "${LWM2M_KEYSTORE_TYPE:JKS}"
|
||||
# key_store_path_file: "${KEY_STORE_PATH_FILE:/common/transport/lwm2m/src/main/resources/credentials/serverKeyStore.jks"
|
||||
key_store: "${LWM2M_KEY_STORE:lwm2mserver.jks}"
|
||||
key_store_password: "${LWM2M_KEY_STORE_PASSWORD:server_ks_password}"
|
||||
root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}"
|
||||
enable_gen_new_key_psk_rpk: "${ENABLE_GEN_NEW_KEY_PSK_RPK:false}"
|
||||
key_store: "${LWM2M_KEYSTORE:lwm2mserver.jks}"
|
||||
key_store_password: "${LWM2M_KEYSTORE_PASSWORD:server_ks_password}"
|
||||
root_alias: "${LWM2M_SERVER_ROOT_CA_ALIAS:rootca}"
|
||||
recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}"
|
||||
recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}"
|
||||
timeout: "${LWM2M_TIMEOUT:120000}"
|
||||
recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}"
|
||||
recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}"
|
||||
uplink_pool_size: "${LWM2M_UPLINK_POOL_SIZE:10}"
|
||||
downlink_pool_size: "${LWM2M_DOWNLINK_POOL_SIZE:10}"
|
||||
ota_pool_size: "${LWM2M_OTA_POOL_SIZE:10}"
|
||||
registration_store_pool_size: "${LWM2M_REGISTRATION_STORE_POOL_SIZE:100}"
|
||||
clean_period_in_sec: "${LWM2M_CLEAN_PERIOD_IN_SEC:2}"
|
||||
log_max_length: "${LWM2M_LOG_MAX_LENGTH:100}"
|
||||
log_max_length: "${LWM2M_LOG_MAX_LENGTH:1024}"
|
||||
# Use redis for Security and Registration stores
|
||||
redis.enabled: "${LWM2M_REDIS_ENABLED:false}"
|
||||
snmp:
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
transport.lwm2m.security.key_store=lwm2m/credentials/serverKeyStore.jks
|
||||
transport.lwm2m.security.key_store_password=server
|
||||
edges.enabled=true
|
||||
transport.lwm2m.server.security.alias=server
|
||||
transport.lwm2m.server.security.password=server
|
||||
transport.lwm2m.bootstrap.security.alias=server
|
||||
transport.lwm2m.bootstrap.security.password=server
|
||||
transport.lwm2m.server.security.key_alias=server
|
||||
transport.lwm2m.server.security.key_password=server
|
||||
transport.lwm2m.bootstrap.security.key_alias=server
|
||||
transport.lwm2m.bootstrap.security.key_password=server
|
||||
@ -18,48 +18,26 @@ package org.thingsboard.server.transport.lwm2m.bootstrap;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
|
||||
import org.eclipse.leshan.core.util.Hex;
|
||||
import org.eclipse.leshan.server.bootstrap.BootstrapSessionManager;
|
||||
import org.eclipse.leshan.server.californium.bootstrap.LeshanBootstrapServer;
|
||||
import org.eclipse.leshan.server.californium.bootstrap.LeshanBootstrapServerBuilder;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.StringUtils;
|
||||
import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2MBootstrapSecurityStore;
|
||||
import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2MInMemoryBootstrapConfigStore;
|
||||
import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2mDefaultBootstrapSessionManager;
|
||||
import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportBootstrapConfig;
|
||||
import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
|
||||
import org.thingsboard.server.transport.lwm2m.secure.LWM2MGenerationPSkRPkECC;
|
||||
import org.thingsboard.server.transport.lwm2m.server.DefaultLwM2mTransportService;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
import java.math.BigInteger;
|
||||
import java.security.AlgorithmParameters;
|
||||
import java.security.KeyFactory;
|
||||
import java.security.KeyStore;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.PrivateKey;
|
||||
import java.security.PublicKey;
|
||||
import java.security.cert.CertificateEncodingException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.security.interfaces.ECPublicKey;
|
||||
import java.security.spec.ECGenParameterSpec;
|
||||
import java.security.spec.ECParameterSpec;
|
||||
import java.security.spec.ECPoint;
|
||||
import java.security.spec.ECPublicKeySpec;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
import java.security.spec.InvalidParameterSpecException;
|
||||
import java.security.spec.KeySpec;
|
||||
import java.security.spec.PKCS8EncodedKeySpec;
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.eclipse.californium.scandium.dtls.cipher.CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256;
|
||||
import static org.eclipse.californium.scandium.dtls.cipher.CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8;
|
||||
import static org.eclipse.californium.scandium.dtls.cipher.CipherSuite.TLS_PSK_WITH_AES_128_CBC_SHA256;
|
||||
import static org.eclipse.californium.scandium.dtls.cipher.CipherSuite.TLS_PSK_WITH_AES_128_CCM_8;
|
||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mNetworkConfig.getCoapConfig;
|
||||
|
||||
@Slf4j
|
||||
@ -78,9 +56,6 @@ public class LwM2MTransportBootstrapService {
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
if (serverConfig.getEnableGenNewKeyPskRpk()) {
|
||||
new LWM2MGenerationPSkRPkECC();
|
||||
}
|
||||
log.info("Starting LwM2M transport bootstrap server...");
|
||||
this.server = getLhBootstrapServer();
|
||||
this.server.start();
|
||||
|
||||
@ -47,11 +47,11 @@ public class LwM2MTransportBootstrapConfig implements LwM2MSecureServerConfig {
|
||||
private Integer securePort;
|
||||
|
||||
@Getter
|
||||
@Value("${transport.lwm2m.bootstrap.security.alias:}")
|
||||
@Value("${transport.lwm2m.bootstrap.security.key_alias:}")
|
||||
private String certificateAlias;
|
||||
|
||||
@Getter
|
||||
@Value("${transport.lwm2m.bootstrap.security.password:}")
|
||||
@Value("${transport.lwm2m.bootstrap.security.key_password:}")
|
||||
private String certificatePassword;
|
||||
|
||||
}
|
||||
|
||||
@ -53,11 +53,11 @@ public class LwM2MTransportServerConfig implements LwM2MSecureServerConfig {
|
||||
private long sessionReportTimeout;
|
||||
|
||||
@Getter
|
||||
@Value("${transport.lwm2m.recommended_ciphers:}")
|
||||
@Value("${transport.lwm2m.security.recommended_ciphers:}")
|
||||
private boolean recommendedCiphers;
|
||||
|
||||
@Getter
|
||||
@Value("${transport.lwm2m.recommended_supported_groups:}")
|
||||
@Value("${transport.lwm2m.security.recommended_supported_groups:}")
|
||||
private boolean recommendedSupportedGroups;
|
||||
|
||||
@Getter
|
||||
@ -96,10 +96,6 @@ public class LwM2MTransportServerConfig implements LwM2MSecureServerConfig {
|
||||
@Value("${transport.lwm2m.security.root_alias:}")
|
||||
private String rootCertificateAlias;
|
||||
|
||||
@Getter
|
||||
@Value("${transport.lwm2m.security.enable_gen_new_key_psk_rpk:}")
|
||||
private Boolean enableGenNewKeyPskRpk;
|
||||
|
||||
@Getter
|
||||
@Value("${transport.lwm2m.server.id:}")
|
||||
private Integer id;
|
||||
@ -121,11 +117,11 @@ public class LwM2MTransportServerConfig implements LwM2MSecureServerConfig {
|
||||
private Integer securePort;
|
||||
|
||||
@Getter
|
||||
@Value("${transport.lwm2m.server.security.alias:}")
|
||||
@Value("${transport.lwm2m.server.security.key_alias:}")
|
||||
private String certificateAlias;
|
||||
|
||||
@Getter
|
||||
@Value("${transport.lwm2m.server.security.password:}")
|
||||
@Value("${transport.lwm2m.server.security.key_password:}")
|
||||
private String certificatePassword;
|
||||
|
||||
@Getter
|
||||
|
||||
@ -1,110 +0,0 @@
|
||||
/**
|
||||
* Copyright © 2016-2021 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.transport.lwm2m.secure;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.eclipse.leshan.core.util.Hex;
|
||||
|
||||
import java.security.InvalidAlgorithmParameterException;
|
||||
import java.security.KeyPair;
|
||||
import java.security.KeyPairGenerator;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.security.PrivateKey;
|
||||
import java.security.PublicKey;
|
||||
import java.security.SecureRandom;
|
||||
import java.security.interfaces.ECPublicKey;
|
||||
import java.security.spec.ECGenParameterSpec;
|
||||
import java.util.Arrays;
|
||||
|
||||
@Slf4j
|
||||
public class LWM2MGenerationPSkRPkECC {
|
||||
|
||||
public LWM2MGenerationPSkRPkECC() {
|
||||
generationPSkKey();
|
||||
generationRPKECCKey();
|
||||
}
|
||||
|
||||
private void generationPSkKey() {
|
||||
/* PSK */
|
||||
int lenPSkKey = 32;
|
||||
/* Start PSK
|
||||
Clients and Servers MUST support PSK keys of up to 64 bytes in length, as required by [RFC7925]
|
||||
SecureRandom object must be unpredictable, and all SecureRandom output sequences must be cryptographically strong, as described in [RFC4086]
|
||||
*/
|
||||
SecureRandom randomPSK = new SecureRandom();
|
||||
byte[] bytesPSK = new byte[lenPSkKey];
|
||||
randomPSK.nextBytes(bytesPSK);
|
||||
log.info("\nCreating new PSK: \n for the next start PSK -> security key: [{}]", Hex.encodeHexString(bytesPSK));
|
||||
}
|
||||
|
||||
private void generationRPKECCKey() {
|
||||
/* RPK */
|
||||
String algorithm = "EC";
|
||||
String provider = "SunEC";
|
||||
String nameParameterSpec = "secp256r1";
|
||||
|
||||
/* Start RPK
|
||||
Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)]
|
||||
*/
|
||||
KeyPairGenerator kpg = null;
|
||||
try {
|
||||
kpg = KeyPairGenerator.getInstance(algorithm, provider);
|
||||
} catch (NoSuchAlgorithmException | NoSuchProviderException e) {
|
||||
log.error("", e);
|
||||
}
|
||||
ECGenParameterSpec ecsp = new ECGenParameterSpec(nameParameterSpec);
|
||||
try {
|
||||
kpg.initialize(ecsp);
|
||||
} catch (InvalidAlgorithmParameterException e) {
|
||||
log.error("", e);
|
||||
}
|
||||
|
||||
KeyPair kp = kpg.genKeyPair();
|
||||
PrivateKey privKey = kp.getPrivate();
|
||||
PublicKey pubKey = kp.getPublic();
|
||||
|
||||
if (pubKey instanceof ECPublicKey) {
|
||||
ECPublicKey ecPublicKey = (ECPublicKey) pubKey;
|
||||
/* Get x coordinate */
|
||||
byte[] x = ecPublicKey.getW().getAffineX().toByteArray();
|
||||
if (x[0] == 0)
|
||||
x = Arrays.copyOfRange(x, 1, x.length);
|
||||
|
||||
/* Get Y coordinate */
|
||||
byte[] y = ecPublicKey.getW().getAffineY().toByteArray();
|
||||
if (y[0] == 0)
|
||||
y = Arrays.copyOfRange(y, 1, y.length);
|
||||
|
||||
/* Get Curves params */
|
||||
String privHex = Hex.encodeHexString(privKey.getEncoded());
|
||||
log.info("\nCreating new RPK for the next start... \n" +
|
||||
" Public Key (Hex): [{}]\n" +
|
||||
" Private Key (Hex): [{}]" +
|
||||
" public_x : [{}] \n" +
|
||||
" public_y : [{}] \n" +
|
||||
" private_encode : [{}] \n" +
|
||||
" Elliptic Curve parameters : [{}] \n",
|
||||
Hex.encodeHexString(pubKey.getEncoded()),
|
||||
privHex,
|
||||
Hex.encodeHexString(x),
|
||||
Hex.encodeHexString(y),
|
||||
privHex,
|
||||
ecPublicKey.getParams().toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,7 +29,6 @@ import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.cache.ota.OtaPackageDataCache;
|
||||
import org.thingsboard.server.queue.util.TbLwM2mTransportComponent;
|
||||
import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
|
||||
import org.thingsboard.server.transport.lwm2m.secure.LWM2MGenerationPSkRPkECC;
|
||||
import org.thingsboard.server.transport.lwm2m.secure.TbLwM2MAuthorizer;
|
||||
import org.thingsboard.server.transport.lwm2m.secure.TbLwM2MDtlsCertificateVerifier;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClientContext;
|
||||
@ -74,9 +73,6 @@ public class DefaultLwM2mTransportService implements LwM2MTransportService {
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
if (config.getEnableGenNewKeyPskRpk()) {
|
||||
new LWM2MGenerationPSkRPkECC();
|
||||
}
|
||||
this.server = getLhServer();
|
||||
/*
|
||||
* Add a resource to the server.
|
||||
|
||||
@ -106,41 +106,40 @@ transport:
|
||||
bind_address: "${LWM2M_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BIND_PORT:5685}"
|
||||
security:
|
||||
bind_address: "${LWM2M_BIND_ADDRESS_SECURITY:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BIND_PORT_SECURITY:5686}"
|
||||
bind_address: "${LWM2M_SECURITY_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_SECURITY_BIND_PORT:5686}"
|
||||
# Only Certificate_x509:
|
||||
alias: "${LWM2M_KEYSTORE_SERVER_ALIAS:server}"
|
||||
password: "${LWM2M_KEYSTORE_SERVER_PASSWORD:server_ks_password}"
|
||||
key_alias: "${LWM2M_SERVER_KEY_ALIAS:server}"
|
||||
key_password: "${LWM2M_SERVER_KEY_PASSWORD:server_ks_password}"
|
||||
skip_validity_check_for_client_cert: "${TB_LWM2M_SERVER_SECURITY_SKIP_VALIDITY_CHECK_FOR_CLIENT_CERT:false}"
|
||||
bootstrap:
|
||||
enable: "${LWM2M_ENABLED_BS:true}"
|
||||
id: "${LWM2M_SERVER_ID_BS:111}"
|
||||
bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BIND_PORT_BS:5687}"
|
||||
bind_address: "${LWM2M_BS_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BS_BIND_PORT:5687}"
|
||||
security:
|
||||
bind_address: "${LWM2M_BIND_ADDRESS_SECURITY_BS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BIND_PORT_SECURITY_BS:5688}"
|
||||
bind_address: "${LWM2M_BS_SECURITY_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${LWM2M_BS_SECURITY_BIND_PORT:5688}"
|
||||
# Only Certificate_x509:
|
||||
alias: "${LWM2M_KEYSTORE_BS_ALIAS:bootstrap}"
|
||||
password: "${LWM2M_KEYSTORE_BS_PASSWORD:server_ks_password}"
|
||||
key_alias: "${LWM2M_BS_KEY_ALIAS:bootstrap}"
|
||||
key_password: "${LWM2M_BS_KEY_PASSWORD:server_ks_password}"
|
||||
security:
|
||||
# Certificate_x509:
|
||||
# To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format
|
||||
# Create new X509 Certificates: common/transport/lwm2m/src/main/resources/credentials/shell/lwM2M_credentials.sh
|
||||
key_store_type: "${LWM2M_KEYSTORE_TYPE:JKS}"
|
||||
# key_store_path_file: "${KEY_STORE_PATH_FILE:/common/transport/lwm2m/src/main/resources/credentials/serverKeyStore.jks"
|
||||
key_store: "${LWM2M_KEY_STORE:lwm2mserver.jks}"
|
||||
key_store_password: "${LWM2M_KEY_STORE_PASSWORD:server_ks_password}"
|
||||
root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}"
|
||||
enable_gen_new_key_psk_rpk: "${ENABLE_GEN_NEW_KEY_PSK_RPK:false}"
|
||||
key_store: "${LWM2M_KEYSTORE:lwm2mserver.jks}"
|
||||
key_store_password: "${LWM2M_KEYSTORE_PASSWORD:server_ks_password}"
|
||||
root_alias: "${LWM2M_SERVER_ROOT_CA_ALIAS:rootca}"
|
||||
recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}"
|
||||
recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}"
|
||||
timeout: "${LWM2M_TIMEOUT:120000}"
|
||||
recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}"
|
||||
recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}"
|
||||
uplink_pool_size: "${LWM2M_UPLINK_POOL_SIZE:10}"
|
||||
downlink_pool_size: "${LWM2M_DOWNLINK_POOL_SIZE:10}"
|
||||
ota_pool_size: "${LWM2M_OTA_POOL_SIZE:10}"
|
||||
clean_period_in_sec: "${LWM2M_CLEAN_PERIOD_IN_SEC:2}"
|
||||
log_max_length: "${LWM2M_LOG_MAX_LENGTH:100}"
|
||||
log_max_length: "${LWM2M_LOG_MAX_LENGTH:1024}"
|
||||
# Use redis for Security and Registration stores
|
||||
redis.enabled: "${LWM2M_REDIS_ENABLED:false}"
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user