Showing
13 changed files
with
263 additions
and
87 deletions
... | ... | @@ -82,7 +82,8 @@ mqtt: |
82 | 82 | # Uncomment the following lines to enable ssl for MQTT |
83 | 83 | # ssl: |
84 | 84 | # key_store: keystore/mqttserver.jks |
85 | -# key_store_password: password | |
85 | +# key_store_password: server_ks_password | |
86 | +# key_password: server_key_password | |
86 | 87 | # key_store_type: JKS |
87 | 88 | |
88 | 89 | # CoAP server parameters | ... | ... |
... | ... | @@ -15,6 +15,7 @@ |
15 | 15 | */ |
16 | 16 | package org.thingsboard.server.dao; |
17 | 17 | |
18 | +import com.google.common.base.CharMatcher; | |
18 | 19 | import lombok.extern.slf4j.Slf4j; |
19 | 20 | import org.bouncycastle.crypto.digests.SHA3Digest; |
20 | 21 | import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; |
... | ... | @@ -28,7 +29,10 @@ public class EncryptionUtil { |
28 | 29 | } |
29 | 30 | |
30 | 31 | public static String trimNewLines(String input) { |
31 | - return input.replaceAll("\n","").replaceAll("\r",""); | |
32 | + return input.replaceAll("-----BEGIN CERTIFICATE-----", "") | |
33 | + .replaceAll("-----END CERTIFICATE-----", "") | |
34 | + .replaceAll("\n","") | |
35 | + .replaceAll("\r",""); | |
32 | 36 | } |
33 | 37 | |
34 | 38 | public static String getSha3Hash(String data) { | ... | ... |
... | ... | @@ -48,6 +48,10 @@ |
48 | 48 | <groupId>org.eclipse.paho</groupId> |
49 | 49 | <artifactId>org.eclipse.paho.client.mqttv3</artifactId> |
50 | 50 | </dependency> |
51 | + <dependency> | |
52 | + <groupId>com.google.guava</groupId> | |
53 | + <artifactId>guava</artifactId> | |
54 | + </dependency> | |
51 | 55 | </dependencies> |
52 | 56 | |
53 | 57 | <build> | ... | ... |
1 | +/** | |
2 | + * Copyright © 2016-2017 The Thingsboard Authors | |
3 | + * | |
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | + * you may not use this file except in compliance with the License. | |
6 | + * You may obtain a copy of the License at | |
7 | + * | |
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | + * | |
10 | + * Unless required by applicable law or agreed to in writing, software | |
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | + * See the License for the specific language governing permissions and | |
14 | + * limitations under the License. | |
15 | + */ | |
16 | +package org.thingsboard.client.tools; | |
17 | + | |
18 | +/** | |
19 | + * @author Valerii Sosliuk | |
20 | + * This class is intended for manual MQTT SSL Testing | |
21 | + */ | |
22 | + | |
23 | +import com.google.common.io.Resources; | |
24 | +import org.eclipse.paho.client.mqttv3.*; | |
25 | + | |
26 | +import javax.net.ssl.*; | |
27 | +import java.io.File; | |
28 | +import java.io.FileInputStream; | |
29 | +import java.io.FileNotFoundException; | |
30 | +import java.io.IOException; | |
31 | +import java.net.URISyntaxException; | |
32 | +import java.net.URL; | |
33 | +import java.security.*; | |
34 | +import java.security.cert.CertificateException; | |
35 | + | |
36 | +public class MqttSslClient { | |
37 | + | |
38 | + | |
39 | + private static final String MQTT_URL = "ssl://localhost:1883"; | |
40 | + | |
41 | + private static final String clientId = "MQTT_SSL_JAVA_CLIENT"; | |
42 | + private static final String accessToken = "C1_TEST_TOKEN"; | |
43 | + private static final String keyStoreFile = "mqttclient.jks"; | |
44 | + private static final String JKS="JKS"; | |
45 | + private static final String TLS="TLS"; | |
46 | + private static final String CLIENT_KEYSTORE_PASSWORD = "client_ks_password"; | |
47 | + private static final String CLIENT_KEY_PASSWORD = "client_key_password"; | |
48 | + | |
49 | + public static void main(String[] args) { | |
50 | + | |
51 | + try { | |
52 | + | |
53 | + URL ksUrl = Resources.getResource(keyStoreFile); | |
54 | + File ksFile = new File(ksUrl.toURI()); | |
55 | + URL tsUrl = Resources.getResource(keyStoreFile); | |
56 | + File tsFile = new File(tsUrl.toURI()); | |
57 | + | |
58 | + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); | |
59 | + | |
60 | + KeyStore trustStore = KeyStore.getInstance(JKS); | |
61 | + trustStore.load(new FileInputStream(tsFile), CLIENT_KEYSTORE_PASSWORD.toCharArray()); | |
62 | + tmf.init(trustStore); | |
63 | + KeyStore ks = KeyStore.getInstance(JKS); | |
64 | + | |
65 | + ks.load(new FileInputStream(ksFile), CLIENT_KEYSTORE_PASSWORD.toCharArray()); | |
66 | + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); | |
67 | + kmf.init(ks, CLIENT_KEY_PASSWORD.toCharArray()); | |
68 | + | |
69 | + KeyManager[] km = kmf.getKeyManagers(); | |
70 | + TrustManager[] tm = tmf.getTrustManagers(); | |
71 | + SSLContext sslContext = SSLContext.getInstance(TLS); | |
72 | + sslContext.init(km, tm, null); | |
73 | + | |
74 | + MqttConnectOptions options = new MqttConnectOptions(); | |
75 | + options.setSocketFactory(sslContext.getSocketFactory()); | |
76 | + MqttAsyncClient client = new MqttAsyncClient(MQTT_URL, clientId); | |
77 | + client.connect(options); | |
78 | + Thread.sleep(3000); | |
79 | + MqttMessage message = new MqttMessage(); | |
80 | + message.setPayload("{\"key1\":\"value1\", \"key2\":true, \"key3\": 3.0, \"key4\": 4}".getBytes()); | |
81 | + client.publish("v1/devices/me/telemetry", message); | |
82 | + client.disconnect(); | |
83 | + System.out.println("Disconnected"); | |
84 | + System.exit(0); | |
85 | + } catch (Exception e) { | |
86 | + e.printStackTrace(); | |
87 | + } | |
88 | + } | |
89 | +} | |
\ No newline at end of file | ... | ... |
... | ... | @@ -15,12 +15,22 @@ |
15 | 15 | # |
16 | 16 | |
17 | 17 | DOMAIN_SUFFIX="$(hostname)" |
18 | -PASSWORD="password" | |
18 | +ORGANIZATIONAL_UNIT=Thingsboard | |
19 | +ORGANIZATION=Thingsboard | |
20 | +CITY=Piscataway | |
21 | +STATE_OR_PROVINCE=NJ | |
22 | +TWO_LETTER_COUNTRY_CODE=US | |
19 | 23 | |
20 | -CLIENT_TRUSTSTORE="client_truststore.pem" | |
21 | -CLIENT_KEY_ALIAS="clientalias" | |
22 | -CLIENT_FILE_PREFIX="mqttclient" | |
24 | +SERVER_KEYSTORE_PASSWORD=server_ks_password | |
25 | +SERVER_KEY_PASSWORD=server_key_password | |
23 | 26 | |
24 | 27 | SERVER_KEY_ALIAS="serveralias" |
25 | 28 | SERVER_FILE_PREFIX="mqttserver" |
26 | -SERVER_KEYSTORE_DIR="../../../../application/src/main/resources/keystore/" | |
\ No newline at end of file | ||
29 | +SERVER_KEYSTORE_DIR="../../../../application/src/main/resources/keystore/" | |
30 | + | |
31 | +CLIENT_KEYSTORE_PASSWORD=client_ks_password | |
32 | +CLIENT_KEY_PASSWORD=client_key_password | |
33 | + | |
34 | +CLIENT_KEY_ALIAS="clientalias" | |
35 | +CLIENT_FILE_PREFIX="mqttclient" | |
36 | + | ... | ... |
1 | -# -*- coding: utf-8 -*- | |
2 | 1 | # |
3 | 2 | # Copyright © 2016-2017 The Thingsboard Authors |
4 | 3 | # |
... | ... | @@ -44,7 +43,7 @@ client.publish('v1/devices/me/attributes/request/1', "{\"clientKeys\":\"model\"} |
44 | 43 | |
45 | 44 | #client.tls_set(ca_certs="client_truststore.pem", certfile="mqttclient.nopass.pem", keyfile=None, cert_reqs=ssl.CERT_REQUIRED, |
46 | 45 | # tls_version=ssl.PROTOCOL_TLSv1, ciphers=None); |
47 | -client.tls_set(ca_certs="client_truststore.pem", certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED, | |
46 | +client.tls_set(ca_certs="mqttserver.pub.pem", certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED, | |
48 | 47 | tls_version=ssl.PROTOCOL_TLSv1, ciphers=None); |
49 | 48 | |
50 | 49 | client.username_pw_set("B1_TEST_TOKEN") | ... | ... |
1 | -#!/bin/sh | |
1 | +#!/bin/bash | |
2 | 2 | # |
3 | 3 | # Copyright © 2016-2017 The Thingsboard Authors |
4 | 4 | # |
... | ... | @@ -17,7 +17,7 @@ |
17 | 17 | |
18 | 18 | usage() { |
19 | 19 | echo "This script generates client public/private rey pair, extracts them to a no-password RSA pem file," |
20 | - echo "and also imports server public key to client trust store" | |
20 | + echo "and imports server public key to client keystore" | |
21 | 21 | echo "usage: ./securemqttclient.keygen.sh [-p file]" |
22 | 22 | echo " -p | --props | --properties file Properties file. default value is ./keygen.properties" |
23 | 23 | echo " -h | --help | ? Show this message" |
... | ... | @@ -44,17 +44,44 @@ done |
44 | 44 | |
45 | 45 | . $PROPERTIES_FILE |
46 | 46 | |
47 | +if [ -f $CLIENT_FILE_PREFIX.jks ] || [ -f $CLIENT_FILE_PREFIX.pub.pem ] || [ -f $CLIENT_FILE_PREFIX.nopass.pem ] || [ -f $CLIENT_FILE_PREFIX.pem ] || [ -f $CLIENT_FILE_PREFIX.p12 ]; | |
48 | +then | |
49 | +while : | |
50 | + do | |
51 | + read -p "Output files from previous server.keygen.sh script run found. Overwrite?[yes]" response | |
52 | + case $response in | |
53 | + [nN]|[nN][oO]) | |
54 | + echo "Skipping" | |
55 | + echo "Done" | |
56 | + exit 0 | |
57 | + ;; | |
58 | + [yY]|[yY][eE]|[yY][eE]|[sS]|[yY]|"") | |
59 | + echo "Cleaning up files" | |
60 | + rm -rf $CLIENT_FILE_PREFIX.jks | |
61 | + rm -rf $CLIENT_FILE_PREFIX.pub.pem | |
62 | + rm -rf $CLIENT_FILE_PREFIX.nopass.pem | |
63 | + rm -rf $CLIENT_FILE_PREFIX.pem | |
64 | + rm -rf $CLIENT_FILE_PREFIX.p12 | |
65 | + break; | |
66 | + ;; | |
67 | + *) echo "Please reply 'yes' or 'no'" | |
68 | + ;; | |
69 | + esac | |
70 | + done | |
71 | +fi | |
72 | + | |
47 | 73 | echo "Generating SSL Key Pair..." |
48 | 74 | |
49 | 75 | keytool -genkeypair -v \ |
50 | 76 | -alias $CLIENT_KEY_ALIAS \ |
51 | 77 | -dname "CN=$DOMAIN_SUFFIX, OU=Thingsboard, O=Thingsboard, L=Piscataway, ST=NJ, C=US" \ |
52 | 78 | -keystore $CLIENT_FILE_PREFIX.jks \ |
53 | - -keypass $PASSWORD \ | |
54 | - -storepass $PASSWORD \ | |
79 | + -keypass $CLIENT_KEY_PASSWORD \ | |
80 | + -storepass $CLIENT_KEYSTORE_PASSWORD \ | |
55 | 81 | -keyalg RSA \ |
56 | 82 | -keysize 2048 \ |
57 | 83 | -validity 9999 |
84 | + | |
58 | 85 | echo "Converting keystore to pkcs12" |
59 | 86 | keytool -importkeystore \ |
60 | 87 | -srckeystore $CLIENT_FILE_PREFIX.jks \ |
... | ... | @@ -62,28 +89,33 @@ keytool -importkeystore \ |
62 | 89 | -srcalias $CLIENT_KEY_ALIAS \ |
63 | 90 | -srcstoretype jks \ |
64 | 91 | -deststoretype pkcs12 \ |
65 | - -keypass $PASSWORD \ | |
66 | - -srcstorepass $PASSWORD \ | |
67 | - -deststorepass $PASSWORD \ | |
68 | - -srckeypass $PASSWORD \ | |
69 | - -destkeypass $PASSWORD | |
92 | + -srcstorepass $CLIENT_KEYSTORE_PASSWORD \ | |
93 | + -deststorepass $CLIENT_KEY_PASSWORD \ | |
94 | + -srckeypass $CLIENT_KEY_PASSWORD \ | |
95 | + -destkeypass $CLIENT_KEY_PASSWORD | |
70 | 96 | |
71 | 97 | echo "Converting pkcs12 to pem" |
72 | 98 | openssl pkcs12 -in $CLIENT_FILE_PREFIX.p12 \ |
73 | 99 | -out $CLIENT_FILE_PREFIX.pem \ |
74 | - -passin pass:$PASSWORD \ | |
75 | - -passout pass:$PASSWORD \ | |
100 | + -passin pass:$CLIENT_KEY_PASSWORD \ | |
101 | + -passout pass:$CLIENT_KEY_PASSWORD \ | |
76 | 102 | |
77 | -echo "Importing server public key..." | |
78 | -keytool -export \ | |
79 | - -alias $SERVER_KEY_ALIAS \ | |
80 | - -keystore $SERVER_KEYSTORE_DIR/$SERVER_FILE_PREFIX.jks \ | |
81 | - -file $CLIENT_TRUSTSTORE -rfc \ | |
82 | - -storepass $PASSWORD | |
103 | +echo "Importing server public key to $CLIENT_FILE_PREFIX.jks" | |
104 | +keytool --importcert \ | |
105 | + -file $SERVER_FILE_PREFIX.cer \ | |
106 | + -keystore $CLIENT_FILE_PREFIX.jks \ | |
107 | + -alias $SERVER_KEY_ALIAS \ | |
108 | + -keypass $SERVER_KEY_PASSWORD \ | |
109 | + -storepass $CLIENT_KEYSTORE_PASSWORD \ | |
110 | + -noprompt | |
83 | 111 | |
84 | 112 | echo "Exporting no-password pem certificate" |
85 | -openssl rsa -in $CLIENT_FILE_PREFIX.pem -out $CLIENT_FILE_PREFIX.nopass.pem -passin pass:$PASSWORD | |
113 | +openssl rsa -in $CLIENT_FILE_PREFIX.pem -out $CLIENT_FILE_PREFIX.nopass.pem -passin pass:$CLIENT_KEY_PASSWORD | |
86 | 114 | tail -n +$(($(grep -m1 -n -e '-----BEGIN CERTIFICATE' $CLIENT_FILE_PREFIX.pem | cut -d: -f1) )) \ |
87 | 115 | $CLIENT_FILE_PREFIX.pem >> $CLIENT_FILE_PREFIX.nopass.pem |
88 | 116 | |
117 | +echo "Exporting client public key" | |
118 | +tail -n +$(($(grep -m1 -n -e '-----BEGIN CERTIFICATE' $CLIENT_FILE_PREFIX.pem | cut -d: -f1) )) \ | |
119 | + $CLIENT_FILE_PREFIX.pem >> $CLIENT_FILE_PREFIX.pub.pem | |
120 | + | |
89 | 121 | echo "Done." |
\ No newline at end of file | ... | ... |
tools/src/main/shell/server.keygen.sh
renamed from
tools/src/main/shell/keygen.sh
1 | -#!/bin/sh | |
1 | +#!/bin/bash | |
2 | 2 | # |
3 | 3 | # Copyright © 2016-2017 The Thingsboard Authors |
4 | 4 | # |
... | ... | @@ -18,9 +18,9 @@ |
18 | 18 | usage() { |
19 | 19 | echo "This script generates thingsboard server's ssl certificate" |
20 | 20 | echo "and optionally copies it to the server's resource directory." |
21 | - echo "usage: ./keygen.sh [-c flag] [-d directory]" | |
22 | - echo " -c | --copy flag Set if copy keystore to server directory needed. Default value is true" | |
23 | - echo " -d | --dir directory Server keystore directory, where the generated keystore file will be copied." | |
21 | + echo "usage: ./server.keygen.sh [-c flag] [-d directory] [-p file]" | |
22 | + echo " -c | --copy flag Specifies if the keystore should be copied to the server directory. Defaults to true" | |
23 | + echo " -d | --dir directory Server keystore directory, where the generated keystore file will be copied. If specified, overrides the value from the properties file" | |
24 | 24 | echo " Default value is SERVER_KEYSTORE_DIR property from properties file" |
25 | 25 | echo " -p | --props | --properties file Properties file. default value is ./keygen.properties" |
26 | 26 | echo " -h | --help | ? Show this message" |
... | ... | @@ -32,23 +32,24 @@ PROPERTIES_FILE=keygen.properties |
32 | 32 | |
33 | 33 | while true; do |
34 | 34 | case "$1" in |
35 | - -c | --copy) COPY=$2 ; | |
36 | - shift | |
37 | - ;; | |
38 | - -d | --dir | --directory) COPY_DIR=$2 ; | |
39 | - shift | |
40 | - ;; | |
41 | - -p | --props | --properties) PROPERTIES_FILE=$2 ; | |
42 | - shift | |
43 | - ;; | |
44 | - -h | --help | ?) usage | |
45 | - exit 0 | |
46 | - ;; | |
47 | - -- ) shift; | |
48 | - break | |
49 | - ;; | |
50 | - * ) break | |
51 | - ;; | |
35 | + -c | --copy) COPY=$2 ; | |
36 | + shift | |
37 | + ;; | |
38 | + -d | --dir | --directory ) COPY_DIR=$2 ; | |
39 | + shift | |
40 | + ;; | |
41 | + -p | --props | --properties ) PROPERTIES_FILE=$2 ; | |
42 | + shift | |
43 | + ;; | |
44 | + -- ) shift; | |
45 | + break | |
46 | + ;; | |
47 | + "" ) break | |
48 | + ;; | |
49 | + | |
50 | + -h | --help | ? | *) usage | |
51 | + exit 0 | |
52 | + ;; | |
52 | 53 | esac |
53 | 54 | shift |
54 | 55 | done |
... | ... | @@ -57,18 +58,40 @@ if [[ "$COPY" != true ]] && [[ "$COPY" != false ]]; then |
57 | 58 | usage |
58 | 59 | fi |
59 | 60 | |
60 | -echo "copy: $COPY; copy_dir: $COPY_DIR; PROPERTIES_FILE=$PROPERTIES_FILE"; | |
61 | - | |
62 | 61 | . $PROPERTIES_FILE |
63 | 62 | |
63 | +if [ -f $SERVER_FILE_PREFIX.jks ] || [ -f $SERVER_FILE_PREFIX.cer ] || [ -f $SERVER_FILE_PREFIX.pub.pem ] || [ -f $SERVER_FILE_PREFIX.pub.der ]; | |
64 | +then | |
65 | +while : | |
66 | + do | |
67 | + read -p "Output files from previous server.keygen.sh script run found. Overwrite?[yes]" response | |
68 | + case $response in | |
69 | + [nN]|[nN][oO]) | |
70 | + echo "Skipping" | |
71 | + echo "Done" | |
72 | + exit 0 | |
73 | + ;; | |
74 | + [yY]|[yY][eE]|[yY][eE]|[sS]|[yY]|"") | |
75 | + echo "Cleaning up files" | |
76 | + rm -rf $SERVER_FILE_PREFIX.jks | |
77 | + rm -rf $SERVER_FILE_PREFIX.pub.pem | |
78 | + rm -rf $SERVER_FILE_PREFIX.cer | |
79 | + break; | |
80 | + ;; | |
81 | + *) echo "Please reply 'yes' or 'no'" | |
82 | + ;; | |
83 | + esac | |
84 | + done | |
85 | +fi | |
86 | + | |
64 | 87 | echo "Generating SSL Key Pair..." |
65 | 88 | |
66 | 89 | keytool -genkeypair -v \ |
67 | 90 | -alias $SERVER_KEY_ALIAS \ |
68 | - -dname "CN=$DOMAIN_SUFFIX, OU=Thingsboard, O=Thingsboard, L=Piscataway, ST=NJ, C=US" \ | |
91 | + -dname "CN=$DOMAIN_SUFFIX, OU=$ORGANIZATIONAL_UNIT, O=$ORGANIZATION, L=$CITY, ST=$STATE_OR_PROVINCE, C=$TWO_LETTER_COUNTRY_CODE" \ | |
69 | 92 | -keystore $SERVER_FILE_PREFIX.jks \ |
70 | - -keypass $PASSWORD \ | |
71 | - -storepass $PASSWORD \ | |
93 | + -keypass $SERVER_KEY_PASSWORD \ | |
94 | + -storepass $SERVER_KEYSTORE_PASSWORD \ | |
72 | 95 | -keyalg RSA \ |
73 | 96 | -keysize 2048 \ |
74 | 97 | -validity 9999 |
... | ... | @@ -81,8 +104,15 @@ fi |
81 | 104 | keytool -export \ |
82 | 105 | -alias $SERVER_KEY_ALIAS \ |
83 | 106 | -keystore $SERVER_FILE_PREFIX.jks \ |
84 | - -file $CLIENT_TRUSTSTORE -rfc \ | |
85 | - -storepass $PASSWORD | |
107 | + -file $SERVER_FILE_PREFIX.pub.pem -rfc \ | |
108 | + -storepass $SERVER_KEYSTORE_PASSWORD | |
109 | + | |
110 | +keytool -export \ | |
111 | + -alias $SERVER_KEY_ALIAS \ | |
112 | + -file $SERVER_FILE_PREFIX.cer \ | |
113 | + -keystore $SERVER_FILE_PREFIX.jks \ | |
114 | + -storepass $SERVER_KEYSTORE_PASSWORD \ | |
115 | + -keypass $SERVER_KEY_PASSWORD | |
86 | 116 | |
87 | 117 | status=$? |
88 | 118 | if [[ $status != 0 ]]; then |
... | ... | @@ -92,27 +122,37 @@ fi |
92 | 122 | |
93 | 123 | if [[ $COPY = true ]]; then |
94 | 124 | if [[ -z "$COPY_DIR" ]]; then |
95 | - read -p "Do you want to copy $SERVER_FILE_PREFIX.jks to server directory? " yn | |
96 | - case $yn in | |
97 | - [Yy]) echo "Please, specify destination dir: " | |
98 | - read -p "(Default: $SERVER_KEYSTORE_DIR): " dir | |
99 | - if [[ ! -z $dir ]]; then | |
100 | - DESTINATION=$dir; | |
101 | - else | |
102 | - DESTINATION=$SERVER_KEYSTORE_DIR | |
103 | - fi; | |
104 | - break;; | |
105 | - * ) ;; | |
106 | - esac | |
125 | + read -p "Do you want to copy $SERVER_FILE_PREFIX.jks to server directory?[yes]" yn | |
126 | + while : | |
127 | + do | |
128 | + case $yn in | |
129 | + [nN]|[nN][oO]) | |
130 | + break | |
131 | + ;; | |
132 | + [yY]|[yY][eE]|[yY][eE]|[sS]|[yY]|"") | |
133 | + read -p "(Default: $SERVER_KEYSTORE_DIR): " dir | |
134 | + if [[ ! -z $dir ]]; then | |
135 | + DESTINATION=$dir; | |
136 | + else | |
137 | + DESTINATION=$SERVER_KEYSTORE_DIR | |
138 | + fi; | |
139 | + break;; | |
140 | + *) echo "Please reply 'yes' or 'no'" | |
141 | + ;; | |
142 | + esac | |
143 | + done | |
107 | 144 | else |
108 | 145 | DESTINATION=$COPY_DIR |
109 | 146 | fi |
110 | - mkdir -p $DESTINATION | |
111 | - cp $SERVER_FILE_PREFIX.jks $DESTINATION | |
112 | - if [ $? -ne 0 ]; then | |
113 | - echo "Failed to copy keystore file." | |
114 | - else | |
115 | - echo "File copied successfully." | |
147 | + echo "*** DEST: $DESTINATION" | |
148 | + if [[ -n $DESTINATION ]]; then | |
149 | + mkdir -p $DESTINATION | |
150 | + cp $SERVER_FILE_PREFIX.jks $DESTINATION | |
151 | + if [ $? -ne 0 ]; then | |
152 | + echo "Failed to copy keystore file." | |
153 | + else | |
154 | + echo "File copied successfully." | |
155 | + fi | |
116 | 156 | fi |
117 | 157 | fi |
118 | 158 | echo "Done." |
\ No newline at end of file | ... | ... |
... | ... | @@ -41,7 +41,7 @@ client.on_connect = on_connect |
41 | 41 | client.on_message = on_message |
42 | 42 | client.publish('v1/devices/me/attributes/request/1', "{\"clientKeys\":\"model\"}", 1) |
43 | 43 | |
44 | -client.username_pw_set("TEST_TOKEN") | |
44 | +client.username_pw_set("B1_TEST_TOKEN") | |
45 | 45 | client.connect('127.0.0.1', 1883, 1) |
46 | 46 | |
47 | 47 | # Blocking call that processes network traffic, dispatches callbacks and | ... | ... |
... | ... | @@ -42,7 +42,7 @@ client.on_connect = on_connect |
42 | 42 | client.on_message = on_message |
43 | 43 | client.publish('v1/devices/me/attributes/request/1', "{\"clientKeys\":\"model\"}", 1) |
44 | 44 | |
45 | -client.tls_set(ca_certs="client_truststore.pem", certfile="mqttclient.nopass.pem", keyfile=None, cert_reqs=ssl.CERT_REQUIRED, | |
45 | +client.tls_set(ca_certs="mqttserver.pub.pem", certfile="mqttclient.nopass.pem", keyfile=None, cert_reqs=ssl.CERT_REQUIRED, | |
46 | 46 | tls_version=ssl.PROTOCOL_TLSv1, ciphers=None); |
47 | 47 | |
48 | 48 | client.tls_insecure_set(False) | ... | ... |
... | ... | @@ -64,11 +64,9 @@ |
64 | 64 | <groupId>ch.qos.logback</groupId> |
65 | 65 | <artifactId>logback-classic</artifactId> |
66 | 66 | </dependency> |
67 | - <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> | |
68 | 67 | <dependency> |
69 | 68 | <groupId>com.google.guava</groupId> |
70 | 69 | <artifactId>guava</artifactId> |
71 | - <version>18.0</version> | |
72 | 70 | </dependency> |
73 | 71 | <dependency> |
74 | 72 | <groupId>org.springframework.boot</groupId> | ... | ... |
... | ... | @@ -49,9 +49,11 @@ public class MqttSslHandlerProvider { |
49 | 49 | private String keyStoreFile; |
50 | 50 | @Value("${mqtt.ssl.key_store_password}") |
51 | 51 | private String keyStorePassword; |
52 | + @Value("${mqtt.ssl.key_password}") | |
53 | + private String keyPassword; | |
52 | 54 | @Value("${mqtt.ssl.key_store_type}") |
53 | 55 | private String keyStoreType; |
54 | - | |
56 | + | |
55 | 57 | @Autowired |
56 | 58 | private DeviceCredentialsService deviceCredentialsService; |
57 | 59 | |
... | ... | @@ -72,7 +74,7 @@ public class MqttSslHandlerProvider { |
72 | 74 | |
73 | 75 | ks.load(new FileInputStream(ksFile), keyStorePassword.toCharArray()); |
74 | 76 | KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); |
75 | - kmf.init(ks, keyStorePassword.toCharArray()); | |
77 | + kmf.init(ks, keyPassword.toCharArray()); | |
76 | 78 | |
77 | 79 | KeyManager[] km = kmf.getKeyManagers(); |
78 | 80 | TrustManager x509wrapped = getX509TrustManager(tmFactory); | ... | ... |
... | ... | @@ -16,6 +16,7 @@ |
16 | 16 | package org.thingsboard.server.transport.mqtt.util; |
17 | 17 | |
18 | 18 | import lombok.extern.slf4j.Slf4j; |
19 | +import org.springframework.util.Base64Utils; | |
19 | 20 | import org.thingsboard.server.dao.EncryptionUtil; |
20 | 21 | import sun.misc.BASE64Encoder; |
21 | 22 | |
... | ... | @@ -35,17 +36,13 @@ public class SslUtil { |
35 | 36 | |
36 | 37 | public static String getX509CertificateString(X509Certificate cert) |
37 | 38 | throws CertificateEncodingException, IOException { |
38 | - ByteArrayOutputStream out = new ByteArrayOutputStream(); | |
39 | - BASE64Encoder encoder = new BASE64Encoder(); | |
40 | - encoder.encodeBuffer(cert.getEncoded(), out); | |
41 | - return EncryptionUtil.trimNewLines(new String(out.toByteArray(), "UTF-8")); | |
39 | + Base64Utils.encodeToString(cert.getEncoded()); | |
40 | + return EncryptionUtil.trimNewLines(Base64Utils.encodeToString(cert.getEncoded())); | |
42 | 41 | } |
43 | 42 | |
44 | 43 | public static String getX509CertificateString(javax.security.cert.X509Certificate cert) |
45 | 44 | throws javax.security.cert.CertificateEncodingException, IOException { |
46 | - ByteArrayOutputStream out = new ByteArrayOutputStream(); | |
47 | - BASE64Encoder encoder = new BASE64Encoder(); | |
48 | - encoder.encodeBuffer(cert.getEncoded(), out); | |
49 | - return EncryptionUtil.trimNewLines(new String(out.toByteArray(), "UTF-8")); | |
45 | + Base64Utils.encodeToString(cert.getEncoded()); | |
46 | + return EncryptionUtil.trimNewLines(Base64Utils.encodeToString(cert.getEncoded())); | |
50 | 47 | } |
51 | 48 | } | ... | ... |