14 changed files with 335 additions and 159 deletions
@ -0,0 +1,89 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2017 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.client.tools; |
||||
|
|
||||
|
/** |
||||
|
* @author Valerii Sosliuk |
||||
|
* This class is intended for manual MQTT SSL Testing |
||||
|
*/ |
||||
|
|
||||
|
import com.google.common.io.Resources; |
||||
|
import org.eclipse.paho.client.mqttv3.*; |
||||
|
|
||||
|
import javax.net.ssl.*; |
||||
|
import java.io.File; |
||||
|
import java.io.FileInputStream; |
||||
|
import java.io.FileNotFoundException; |
||||
|
import java.io.IOException; |
||||
|
import java.net.URISyntaxException; |
||||
|
import java.net.URL; |
||||
|
import java.security.*; |
||||
|
import java.security.cert.CertificateException; |
||||
|
|
||||
|
public class MqttSslClient { |
||||
|
|
||||
|
|
||||
|
private static final String MQTT_URL = "ssl://localhost:1883"; |
||||
|
|
||||
|
private static final String clientId = "MQTT_SSL_JAVA_CLIENT"; |
||||
|
private static final String accessToken = "C1_TEST_TOKEN"; |
||||
|
private static final String keyStoreFile = "mqttclient.jks"; |
||||
|
private static final String JKS="JKS"; |
||||
|
private static final String TLS="TLS"; |
||||
|
private static final String CLIENT_KEYSTORE_PASSWORD = "client_ks_password"; |
||||
|
private static final String CLIENT_KEY_PASSWORD = "client_key_password"; |
||||
|
|
||||
|
public static void main(String[] args) { |
||||
|
|
||||
|
try { |
||||
|
|
||||
|
URL ksUrl = Resources.getResource(keyStoreFile); |
||||
|
File ksFile = new File(ksUrl.toURI()); |
||||
|
URL tsUrl = Resources.getResource(keyStoreFile); |
||||
|
File tsFile = new File(tsUrl.toURI()); |
||||
|
|
||||
|
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); |
||||
|
|
||||
|
KeyStore trustStore = KeyStore.getInstance(JKS); |
||||
|
trustStore.load(new FileInputStream(tsFile), CLIENT_KEYSTORE_PASSWORD.toCharArray()); |
||||
|
tmf.init(trustStore); |
||||
|
KeyStore ks = KeyStore.getInstance(JKS); |
||||
|
|
||||
|
ks.load(new FileInputStream(ksFile), CLIENT_KEYSTORE_PASSWORD.toCharArray()); |
||||
|
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); |
||||
|
kmf.init(ks, CLIENT_KEY_PASSWORD.toCharArray()); |
||||
|
|
||||
|
KeyManager[] km = kmf.getKeyManagers(); |
||||
|
TrustManager[] tm = tmf.getTrustManagers(); |
||||
|
SSLContext sslContext = SSLContext.getInstance(TLS); |
||||
|
sslContext.init(km, tm, null); |
||||
|
|
||||
|
MqttConnectOptions options = new MqttConnectOptions(); |
||||
|
options.setSocketFactory(sslContext.getSocketFactory()); |
||||
|
MqttAsyncClient client = new MqttAsyncClient(MQTT_URL, clientId); |
||||
|
client.connect(options); |
||||
|
Thread.sleep(3000); |
||||
|
MqttMessage message = new MqttMessage(); |
||||
|
message.setPayload("{\"key1\":\"value1\", \"key2\":true, \"key3\": 3.0, \"key4\": 4}".getBytes()); |
||||
|
client.publish("v1/devices/me/telemetry", message); |
||||
|
client.disconnect(); |
||||
|
System.out.println("Disconnected"); |
||||
|
System.exit(0); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,118 +0,0 @@ |
|||||
#!/bin/sh |
|
||||
# |
|
||||
# Copyright © 2016-2017 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. |
|
||||
# |
|
||||
|
|
||||
usage() { |
|
||||
echo "This script generates thingsboard server's ssl certificate" |
|
||||
echo "and optionally copies it to the server's resource directory." |
|
||||
echo "usage: ./keygen.sh [-c flag] [-d directory]" |
|
||||
echo " -c | --copy flag Set if copy keystore to server directory needed. Default value is true" |
|
||||
echo " -d | --dir directory Server keystore directory, where the generated keystore file will be copied." |
|
||||
echo " Default value is SERVER_KEYSTORE_DIR property from properties file" |
|
||||
echo " -p | --props | --properties file Properties file. default value is ./keygen.properties" |
|
||||
echo " -h | --help | ? Show this message" |
|
||||
} |
|
||||
|
|
||||
COPY=true; |
|
||||
COPY_DIR= |
|
||||
PROPERTIES_FILE=keygen.properties |
|
||||
|
|
||||
while true; do |
|
||||
case "$1" in |
|
||||
-c | --copy) COPY=$2 ; |
|
||||
shift |
|
||||
;; |
|
||||
-d | --dir | --directory) COPY_DIR=$2 ; |
|
||||
shift |
|
||||
;; |
|
||||
-p | --props | --properties) PROPERTIES_FILE=$2 ; |
|
||||
shift |
|
||||
;; |
|
||||
-h | --help | ?) usage |
|
||||
exit 0 |
|
||||
;; |
|
||||
-- ) shift; |
|
||||
break |
|
||||
;; |
|
||||
* ) break |
|
||||
;; |
|
||||
esac |
|
||||
shift |
|
||||
done |
|
||||
|
|
||||
if [[ "$COPY" != true ]] && [[ "$COPY" != false ]]; then |
|
||||
usage |
|
||||
fi |
|
||||
|
|
||||
echo "copy: $COPY; copy_dir: $COPY_DIR; PROPERTIES_FILE=$PROPERTIES_FILE"; |
|
||||
|
|
||||
. $PROPERTIES_FILE |
|
||||
|
|
||||
echo "Generating SSL Key Pair..." |
|
||||
|
|
||||
keytool -genkeypair -v \ |
|
||||
-alias $SERVER_KEY_ALIAS \ |
|
||||
-dname "CN=$DOMAIN_SUFFIX, OU=Thingsboard, O=Thingsboard, L=Piscataway, ST=NJ, C=US" \ |
|
||||
-keystore $SERVER_FILE_PREFIX.jks \ |
|
||||
-keypass $PASSWORD \ |
|
||||
-storepass $PASSWORD \ |
|
||||
-keyalg RSA \ |
|
||||
-keysize 2048 \ |
|
||||
-validity 9999 |
|
||||
|
|
||||
status=$? |
|
||||
if [[ $status != 0 ]]; then |
|
||||
exit $status; |
|
||||
fi |
|
||||
|
|
||||
keytool -export \ |
|
||||
-alias $SERVER_KEY_ALIAS \ |
|
||||
-keystore $SERVER_FILE_PREFIX.jks \ |
|
||||
-file $CLIENT_TRUSTSTORE -rfc \ |
|
||||
-storepass $PASSWORD |
|
||||
|
|
||||
status=$? |
|
||||
if [[ $status != 0 ]]; then |
|
||||
exit $status; |
|
||||
fi |
|
||||
|
|
||||
|
|
||||
if [[ $COPY = true ]]; then |
|
||||
if [[ -z "$COPY_DIR" ]]; then |
|
||||
read -p "Do you want to copy $SERVER_FILE_PREFIX.jks to server directory? " yn |
|
||||
case $yn in |
|
||||
[Yy]) echo "Please, specify destination dir: " |
|
||||
read -p "(Default: $SERVER_KEYSTORE_DIR): " dir |
|
||||
if [[ ! -z $dir ]]; then |
|
||||
DESTINATION=$dir; |
|
||||
else |
|
||||
DESTINATION=$SERVER_KEYSTORE_DIR |
|
||||
fi; |
|
||||
break;; |
|
||||
* ) ;; |
|
||||
esac |
|
||||
else |
|
||||
DESTINATION=$COPY_DIR |
|
||||
fi |
|
||||
mkdir -p $DESTINATION |
|
||||
cp $SERVER_FILE_PREFIX.jks $DESTINATION |
|
||||
if [ $? -ne 0 ]; then |
|
||||
echo "Failed to copy keystore file." |
|
||||
else |
|
||||
echo "File copied successfully." |
|
||||
fi |
|
||||
fi |
|
||||
echo "Done." |
|
||||
@ -0,0 +1,158 @@ |
|||||
|
#!/bin/bash |
||||
|
# |
||||
|
# Copyright © 2016-2017 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. |
||||
|
# |
||||
|
|
||||
|
usage() { |
||||
|
echo "This script generates thingsboard server's ssl certificate" |
||||
|
echo "and optionally copies it to the server's resource directory." |
||||
|
echo "usage: ./server.keygen.sh [-c flag] [-d directory] [-p file]" |
||||
|
echo " -c | --copy flag Specifies if the keystore should be copied to the server directory. Defaults to true" |
||||
|
echo " -d | --dir directory Server keystore directory, where the generated keystore file will be copied. If specified, overrides the value from the properties file" |
||||
|
echo " Default value is SERVER_KEYSTORE_DIR property from properties file" |
||||
|
echo " -p | --props | --properties file Properties file. default value is ./keygen.properties" |
||||
|
echo " -h | --help | ? Show this message" |
||||
|
} |
||||
|
|
||||
|
COPY=true; |
||||
|
COPY_DIR= |
||||
|
PROPERTIES_FILE=keygen.properties |
||||
|
|
||||
|
while true; do |
||||
|
case "$1" in |
||||
|
-c | --copy) COPY=$2 ; |
||||
|
shift |
||||
|
;; |
||||
|
-d | --dir | --directory ) COPY_DIR=$2 ; |
||||
|
shift |
||||
|
;; |
||||
|
-p | --props | --properties ) PROPERTIES_FILE=$2 ; |
||||
|
shift |
||||
|
;; |
||||
|
-- ) shift; |
||||
|
break |
||||
|
;; |
||||
|
"" ) break |
||||
|
;; |
||||
|
|
||||
|
-h | --help | ? | *) usage |
||||
|
exit 0 |
||||
|
;; |
||||
|
esac |
||||
|
shift |
||||
|
done |
||||
|
|
||||
|
if [[ "$COPY" != true ]] && [[ "$COPY" != false ]]; then |
||||
|
usage |
||||
|
fi |
||||
|
|
||||
|
. $PROPERTIES_FILE |
||||
|
|
||||
|
if [ -f $SERVER_FILE_PREFIX.jks ] || [ -f $SERVER_FILE_PREFIX.cer ] || [ -f $SERVER_FILE_PREFIX.pub.pem ] || [ -f $SERVER_FILE_PREFIX.pub.der ]; |
||||
|
then |
||||
|
while : |
||||
|
do |
||||
|
read -p "Output files from previous server.keygen.sh script run found. Overwrite?[yes]" response |
||||
|
case $response in |
||||
|
[nN]|[nN][oO]) |
||||
|
echo "Skipping" |
||||
|
echo "Done" |
||||
|
exit 0 |
||||
|
;; |
||||
|
[yY]|[yY][eE]|[yY][eE]|[sS]|[yY]|"") |
||||
|
echo "Cleaning up files" |
||||
|
rm -rf $SERVER_FILE_PREFIX.jks |
||||
|
rm -rf $SERVER_FILE_PREFIX.pub.pem |
||||
|
rm -rf $SERVER_FILE_PREFIX.cer |
||||
|
break; |
||||
|
;; |
||||
|
*) echo "Please reply 'yes' or 'no'" |
||||
|
;; |
||||
|
esac |
||||
|
done |
||||
|
fi |
||||
|
|
||||
|
echo "Generating SSL Key Pair..." |
||||
|
|
||||
|
keytool -genkeypair -v \ |
||||
|
-alias $SERVER_KEY_ALIAS \ |
||||
|
-dname "CN=$DOMAIN_SUFFIX, OU=$ORGANIZATIONAL_UNIT, O=$ORGANIZATION, L=$CITY, ST=$STATE_OR_PROVINCE, C=$TWO_LETTER_COUNTRY_CODE" \ |
||||
|
-keystore $SERVER_FILE_PREFIX.jks \ |
||||
|
-keypass $SERVER_KEY_PASSWORD \ |
||||
|
-storepass $SERVER_KEYSTORE_PASSWORD \ |
||||
|
-keyalg RSA \ |
||||
|
-keysize 2048 \ |
||||
|
-validity 9999 |
||||
|
|
||||
|
status=$? |
||||
|
if [[ $status != 0 ]]; then |
||||
|
exit $status; |
||||
|
fi |
||||
|
|
||||
|
keytool -export \ |
||||
|
-alias $SERVER_KEY_ALIAS \ |
||||
|
-keystore $SERVER_FILE_PREFIX.jks \ |
||||
|
-file $SERVER_FILE_PREFIX.pub.pem -rfc \ |
||||
|
-storepass $SERVER_KEYSTORE_PASSWORD |
||||
|
|
||||
|
keytool -export \ |
||||
|
-alias $SERVER_KEY_ALIAS \ |
||||
|
-file $SERVER_FILE_PREFIX.cer \ |
||||
|
-keystore $SERVER_FILE_PREFIX.jks \ |
||||
|
-storepass $SERVER_KEYSTORE_PASSWORD \ |
||||
|
-keypass $SERVER_KEY_PASSWORD |
||||
|
|
||||
|
status=$? |
||||
|
if [[ $status != 0 ]]; then |
||||
|
exit $status; |
||||
|
fi |
||||
|
|
||||
|
|
||||
|
if [[ $COPY = true ]]; then |
||||
|
if [[ -z "$COPY_DIR" ]]; then |
||||
|
read -p "Do you want to copy $SERVER_FILE_PREFIX.jks to server directory?[yes]" yn |
||||
|
while : |
||||
|
do |
||||
|
case $yn in |
||||
|
[nN]|[nN][oO]) |
||||
|
break |
||||
|
;; |
||||
|
[yY]|[yY][eE]|[yY][eE]|[sS]|[yY]|"") |
||||
|
read -p "(Default: $SERVER_KEYSTORE_DIR): " dir |
||||
|
if [[ ! -z $dir ]]; then |
||||
|
DESTINATION=$dir; |
||||
|
else |
||||
|
DESTINATION=$SERVER_KEYSTORE_DIR |
||||
|
fi; |
||||
|
break;; |
||||
|
*) echo "Please reply 'yes' or 'no'" |
||||
|
;; |
||||
|
esac |
||||
|
done |
||||
|
else |
||||
|
DESTINATION=$COPY_DIR |
||||
|
fi |
||||
|
echo "*** DEST: $DESTINATION" |
||||
|
if [[ -n $DESTINATION ]]; then |
||||
|
mkdir -p $DESTINATION |
||||
|
cp $SERVER_FILE_PREFIX.jks $DESTINATION |
||||
|
if [ $? -ne 0 ]; then |
||||
|
echo "Failed to copy keystore file." |
||||
|
else |
||||
|
echo "File copied successfully." |
||||
|
fi |
||||
|
fi |
||||
|
fi |
||||
|
echo "Done." |
||||
Loading…
Reference in new issue