[ISSUE #773] add useTLS configure for rocketmq console

diff --git a/rocketmq-console/src/main/java/org/apache/rocketmq/console/aspect/admin/MQAdminAspect.java b/rocketmq-console/src/main/java/org/apache/rocketmq/console/aspect/admin/MQAdminAspect.java
index e8f2f4c..2e7e945 100644
--- a/rocketmq-console/src/main/java/org/apache/rocketmq/console/aspect/admin/MQAdminAspect.java
+++ b/rocketmq-console/src/main/java/org/apache/rocketmq/console/aspect/admin/MQAdminAspect.java
@@ -61,10 +61,10 @@
             Method method = signature.getMethod();
             MultiMQAdminCmdMethod multiMQAdminCmdMethod = method.getAnnotation(MultiMQAdminCmdMethod.class);
             if (multiMQAdminCmdMethod != null && multiMQAdminCmdMethod.timeoutMillis() > 0) {
-                MQAdminInstance.initMQAdminInstance(multiMQAdminCmdMethod.timeoutMillis(),rmqConfigure.getAccessKey(),rmqConfigure.getSecretKey());
+                MQAdminInstance.initMQAdminInstance(multiMQAdminCmdMethod.timeoutMillis(),rmqConfigure.getAccessKey(),rmqConfigure.getSecretKey(), rmqConfigure.isUseTLS());
             }
             else {
-                MQAdminInstance.initMQAdminInstance(0,rmqConfigure.getAccessKey(),rmqConfigure.getSecretKey());
+                MQAdminInstance.initMQAdminInstance(0,rmqConfigure.getAccessKey(),rmqConfigure.getSecretKey(), rmqConfigure.isUseTLS());
             }
             obj = joinPoint.proceed();
         }
@@ -74,4 +74,4 @@
         }
         return obj;
     }
-}
\ No newline at end of file
+}
diff --git a/rocketmq-console/src/main/java/org/apache/rocketmq/console/config/RMQConfigure.java b/rocketmq-console/src/main/java/org/apache/rocketmq/console/config/RMQConfigure.java
index 95df632..7718ffa 100644
--- a/rocketmq-console/src/main/java/org/apache/rocketmq/console/config/RMQConfigure.java
+++ b/rocketmq-console/src/main/java/org/apache/rocketmq/console/config/RMQConfigure.java
@@ -55,6 +55,8 @@
 
     private String secretKey;
 
+    private boolean useTLS = false;
+
     public String getAccessKey() {
         return accessKey;
     }
@@ -134,6 +136,14 @@
         this.loginRequired = loginRequired;
     }
 
+    public boolean isUseTLS() {
+        return useTLS;
+    }
+
+    public void setUseTLS(boolean useTLS) {
+        this.useTLS = useTLS;
+    }
+
     // Error Page process logic, move to a central configure later
     @Bean
     public ErrorPageRegistrar errorPageRegistrar() {
diff --git a/rocketmq-console/src/main/java/org/apache/rocketmq/console/controller/OpsController.java b/rocketmq-console/src/main/java/org/apache/rocketmq/console/controller/OpsController.java
index d82862f..f1f0852 100644
--- a/rocketmq-console/src/main/java/org/apache/rocketmq/console/controller/OpsController.java
+++ b/rocketmq-console/src/main/java/org/apache/rocketmq/console/controller/OpsController.java
@@ -57,4 +57,12 @@
     public Object clusterStatus() {
         return opsService.rocketMqStatusCheck();
     }
+
+
+    @RequestMapping(value = "/updateUseTLS.do", method = RequestMethod.POST)
+    @ResponseBody
+    public Object updateUseTLS(@RequestParam String useTLS) {
+        opsService.updateUseTLS(Boolean.parseBoolean(useTLS));
+        return true;
+    }
 }
diff --git a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/OpsService.java b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/OpsService.java
index d3bd68c..1fd9eae 100644
--- a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/OpsService.java
+++ b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/OpsService.java
@@ -29,4 +29,6 @@
     Map<CheckerType,Object> rocketMqStatusCheck();
 
     boolean updateIsVIPChannel(String useVIPChannel);
+
+    boolean updateUseTLS(boolean useTLS);
 }
diff --git a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/client/MQAdminInstance.java b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/client/MQAdminInstance.java
index 3fb57d0..991931f 100644
--- a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/client/MQAdminInstance.java
+++ b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/client/MQAdminInstance.java
@@ -51,7 +51,7 @@
         DefaultMQAdminExtImpl defaultMQAdminExtImpl = Reflect.on(MQAdminInstance.threadLocalMQAdminExt()).get("defaultMQAdminExtImpl");
         return Reflect.on(defaultMQAdminExtImpl).get("mqClientInstance");
     }
-    public static void initMQAdminInstance(long timeoutMillis,String accessKey,String secretKey) throws MQClientException {
+    public static void initMQAdminInstance(long timeoutMillis,String accessKey,String secretKey, boolean useTLS) throws MQClientException {
         Integer nowCount = INIT_COUNTER.get();
         if (nowCount == null) {
             RPCHook rpcHook = null;
@@ -66,6 +66,7 @@
             else {
                 defaultMQAdminExt = new DefaultMQAdminExt(rpcHook);
             }
+            defaultMQAdminExt.setUseTLS(useTLS);
             defaultMQAdminExt.setInstanceName(Long.toString(System.currentTimeMillis()));
             defaultMQAdminExt.start();
             MQ_ADMIN_EXT_THREAD_LOCAL.set(defaultMQAdminExt);
diff --git a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/MessageServiceImpl.java b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/MessageServiceImpl.java
index 00777e7..5182b0b 100644
--- a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/MessageServiceImpl.java
+++ b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/MessageServiceImpl.java
@@ -122,7 +122,7 @@
         if (isEnableAcl) {
             rpcHook = new AclClientRPCHook(new SessionCredentials(configure.getAccessKey(), configure.getSecretKey()));
         }
-        DefaultMQPullConsumer consumer = buildDefaultMQPullConsumer(rpcHook);
+        DefaultMQPullConsumer consumer = buildDefaultMQPullConsumer(rpcHook, configure.isUseTLS());
         List<MessageView> messageViewList = Lists.newArrayList();
         try {
             String subExpression = "*";
@@ -255,7 +255,7 @@
         if (isEnableAcl) {
             rpcHook = new AclClientRPCHook(new SessionCredentials(configure.getAccessKey(), configure.getSecretKey()));
         }
-        DefaultMQPullConsumer consumer = buildDefaultMQPullConsumer(rpcHook);
+        DefaultMQPullConsumer consumer = buildDefaultMQPullConsumer(rpcHook, configure.isUseTLS());
 
         long total = 0;
         List<QueueOffsetInfo> queueOffsetInfos = new ArrayList<>();
@@ -396,7 +396,7 @@
         if (isEnableAcl) {
             rpcHook = new AclClientRPCHook(new SessionCredentials(configure.getAccessKey(), configure.getSecretKey()));
         }
-        DefaultMQPullConsumer consumer = buildDefaultMQPullConsumer(rpcHook);
+        DefaultMQPullConsumer consumer = buildDefaultMQPullConsumer(rpcHook, configure.isUseTLS());
         List<MessageView> messageViews = new ArrayList<>();
 
         long offset = query.getPageNum() * query.getPageSize();
@@ -536,7 +536,9 @@
         }
     }
 
-    public DefaultMQPullConsumer buildDefaultMQPullConsumer(RPCHook rpcHook) {
-        return new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, rpcHook);
+    public DefaultMQPullConsumer buildDefaultMQPullConsumer(RPCHook rpcHook, boolean useTLS) {
+        DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, rpcHook);
+        consumer.setUseTLS(useTLS);
+        return consumer;
     }
 }
diff --git a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/OpsServiceImpl.java b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/OpsServiceImpl.java
index b31a869..d37fdb0 100644
--- a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/OpsServiceImpl.java
+++ b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/OpsServiceImpl.java
@@ -42,6 +42,7 @@
         Map<String, Object> homePageInfoMap = Maps.newHashMap();
         homePageInfoMap.put("namesvrAddrList", Splitter.on(";").splitToList(configure.getNamesrvAddr()));
         homePageInfoMap.put("useVIPChannel", Boolean.valueOf(configure.getIsVIPChannel()));
+        homePageInfoMap.put("useTLS", configure.isUseTLS());
         return homePageInfoMap;
     }
 
@@ -68,4 +69,10 @@
         configure.setIsVIPChannel(useVIPChannel);
         return true;
     }
+
+    @Override
+    public boolean updateUseTLS(boolean useTLS) {
+        configure.setUseTLS(useTLS);
+        return true;
+    }
 }
diff --git a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/TopicServiceImpl.java b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/TopicServiceImpl.java
index 794e8cc..6400cfb 100644
--- a/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/TopicServiceImpl.java
+++ b/rocketmq-console/src/main/java/org/apache/rocketmq/console/service/impl/TopicServiceImpl.java
@@ -200,8 +200,10 @@
         return true;
     }
 
-    public DefaultMQProducer buildDefaultMQProducer(String producerGroup, RPCHook rpcHook) {
-        return new DefaultMQProducer(producerGroup, rpcHook);
+    public DefaultMQProducer buildDefaultMQProducer(String producerGroup, RPCHook rpcHook, boolean useTLS) {
+        DefaultMQProducer producer = new DefaultMQProducer(producerGroup, rpcHook);
+        producer.setUseTLS(useTLS);
+        return producer;
     }
 
     private TopicList getSystemTopicList() {
@@ -210,7 +212,7 @@
         if (isEnableAcl) {
             rpcHook = new AclClientRPCHook(new SessionCredentials(configure.getAccessKey(), configure.getSecretKey()));
         }
-        DefaultMQProducer producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook);
+        DefaultMQProducer producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, configure.isUseTLS());
         producer.setInstanceName(String.valueOf(System.currentTimeMillis()));
         producer.setNamesrvAddr(configure.getNamesrvAddr());
 
@@ -232,9 +234,9 @@
                 configure.getAccessKey(),
                 configure.getSecretKey()
             ));
-            producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook);
+            producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, rpcHook, configure.isUseTLS());
         } else {
-            producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, null);
+            producer = buildDefaultMQProducer(MixAll.SELF_TEST_PRODUCER_GROUP, null, configure.isUseTLS());
         }
 
         producer.setInstanceName(String.valueOf(System.currentTimeMillis()));
diff --git a/rocketmq-console/src/main/resources/application.properties b/rocketmq-console/src/main/resources/application.properties
index 6b1d2df..53faec2 100644
--- a/rocketmq-console/src/main/resources/application.properties
+++ b/rocketmq-console/src/main/resources/application.properties
@@ -31,4 +31,5 @@
 
 #set the accessKey and secretKey if you used acl
 #rocketmq.config.accessKey=
-#rocketmq.config.secretKey=
\ No newline at end of file
+#rocketmq.config.secretKey=
+rocketmq.config.useTLS=false
diff --git a/rocketmq-console/src/main/resources/static/src/ops.js b/rocketmq-console/src/main/resources/static/src/ops.js
index 5760f46..e4fb60c 100644
--- a/rocketmq-console/src/main/resources/static/src/ops.js
+++ b/rocketmq-console/src/main/resources/static/src/ops.js
@@ -18,13 +18,15 @@
 app.controller('opsController', ['$scope','$location','$http','Notification','remoteApi','tools', function ($scope,$location,$http,Notification,remoteApi,tools) {
     $scope.namesvrAddrList = "";
     $scope.useVIPChannel = true;
+    $scope.useTLS = false;
     $http({
         method: "GET",
         url: "ops/homePage.query"
     }).success(function (resp) {
         if (resp.status == 0) {
             $scope.namesvrAddrList = resp.data.namesvrAddrList.join(";");
-            $scope.useVIPChannel = resp.data.useVIPChannel
+            $scope.useVIPChannel = resp.data.useVIPChannel;
+            $scope.useTLS = resp.data.useTLS;
         }else{
             Notification.error({message: resp.errMsg, delay: 2000});
         }
@@ -55,5 +57,18 @@
                 Notification.error({message: resp.errMsg, delay: 2000});
             }
         });
+    };
+    $scope.updateUseTLS = function () {
+        $http({
+            method: "POST",
+            url: "ops/updateUseTLS.do",
+            params:{useTLS:$scope.useTLS}
+        }).success(function (resp) {
+            if (resp.status == 0) {
+                Notification.info({message: "SUCCESS", delay: 2000});
+            }else{
+                Notification.error({message: resp.errMsg, delay: 2000});
+            }
+        });
     }
 }]);
diff --git a/rocketmq-console/src/main/resources/static/view/pages/ops.html b/rocketmq-console/src/main/resources/static/view/pages/ops.html
index ca2fb29..ba8c098 100644
--- a/rocketmq-console/src/main/resources/static/view/pages/ops.html
+++ b/rocketmq-console/src/main/resources/static/view/pages/ops.html
@@ -35,5 +35,18 @@
             <button class="btn btn-raised btn-sm btn-primary" type="button" ng-click="updateIsVIPChannel()">{{'UPDATE' | translate}}
             </button>
         </div>
+
+        <br/>
+        <br/>
+        <br/>
+        <h2 class="md-title">useTLS</h2>
+        <div  class="pull-left">
+            <md-switch class="md-primary" md-no-ink aria-label="Switch No Ink" ng-model="useTLS">
+            </md-switch>
+        </div>
+        <div class="pull-left">
+            <button class="btn btn-raised btn-sm btn-primary" type="button" ng-click="updateUseTLS()">{{'UPDATE' | translate}}
+            </button>
+        </div>
     </div>
 </div>
diff --git a/rocketmq-console/src/test/java/org/apache/rocketmq/console/controller/MessageControllerTest.java b/rocketmq-console/src/test/java/org/apache/rocketmq/console/controller/MessageControllerTest.java
index 8d3aefc..0b54754 100644
--- a/rocketmq-console/src/test/java/org/apache/rocketmq/console/controller/MessageControllerTest.java
+++ b/rocketmq-console/src/test/java/org/apache/rocketmq/console/controller/MessageControllerTest.java
@@ -50,6 +50,7 @@
 
 import static org.hamcrest.Matchers.hasSize;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
@@ -88,7 +89,7 @@
             when(pullResult.getNextBeginOffset()).thenReturn(Long.MAX_VALUE);
             when(pullResult.getPullStatus()).thenReturn(PullStatus.FOUND);
             when(pullResult.getMsgFoundList()).thenReturn(wrappers);
-            when(messageService.buildDefaultMQPullConsumer(any())).thenReturn(defaultMQPullConsumer);
+            when(messageService.buildDefaultMQPullConsumer(any(), anyBoolean())).thenReturn(defaultMQPullConsumer);
         }
     }
 
diff --git a/rocketmq-console/src/test/java/org/apache/rocketmq/console/controller/TopicControllerTest.java b/rocketmq-console/src/test/java/org/apache/rocketmq/console/controller/TopicControllerTest.java
index 2b73201..afb0c73 100644
--- a/rocketmq-console/src/test/java/org/apache/rocketmq/console/controller/TopicControllerTest.java
+++ b/rocketmq-console/src/test/java/org/apache/rocketmq/console/controller/TopicControllerTest.java
@@ -108,7 +108,7 @@
             when(defaultMQProducer.getmQClientFactory()).thenReturn(mqClientInstance);
             when(mqClientInstance.getMQClientAPIImpl()).thenReturn(mqClientAPIImpl);
             when(mqClientAPIImpl.getSystemTopicList(anyLong())).thenReturn(sysTopicList);
-            when(topicService.buildDefaultMQProducer(anyString(), any())).thenReturn(producer);
+            when(topicService.buildDefaultMQProducer(anyString(), any(), anyBoolean())).thenReturn(producer);
         }
         final String url = "/topic/list.query";
 
@@ -246,7 +246,7 @@
             SendResult result = new SendResult(SendStatus.SEND_OK, "7F000001E41A2E5D6D978B82C20F003D",
                 "0A8E83C300002A9F00000000000013D3", new MessageQueue(), 1000L);
             when(producer.send(any(Message.class))).thenReturn(result);
-            when(topicService.buildDefaultMQProducer(anyString(), any())).thenReturn(producer);
+            when(topicService.buildDefaultMQProducer(anyString(), any(), anyBoolean())).thenReturn(producer);
         }
 
         SendTopicMessageRequest request = new SendTopicMessageRequest();