Kaynağa Gözat

change:
设备加密绑定机制制作

kindring 1 yıl önce
ebeveyn
işleme
9c046edc6f

+ 2 - 0
build.sh

@@ -48,6 +48,8 @@ if [ ! -d "./package/gbDocker/gb28181/target" ]; then
     mkdir ./package/gbDocker/gb28181/target
 fi
 cp -rf ./keys ./package/gbDocker/gb28181
+# 移动解密程序
+cp ./target/hfy-gb-encrypted.jar ./package/gbDocker/gb28181/target/
 # 只移动jar包
 mv ./target/hfy-gb.jar ./package/gbDocker/gb28181/target/
 

+ 1 - 0
package/buildDockerImage.sh

@@ -53,6 +53,7 @@ mkdir ./result/redis
 mkdir ./result/mysql
 mkdir ./result/mysqlConf
 mkdir ./result/sqlBack
+mkdir ./result/gbRunning/keys
 cp ./gbDocker/createConfig.sh ./result/gbRunning/createConfig.sh
 cp ./config.cfg ./result/config.cfg
 cp ./startDockerImage.sh ./result/startDockerImage.sh

+ 1 - 1
package/config.cfg

@@ -24,7 +24,7 @@ redis_passwd="hfyredis28181"
 
 # 国标平台相关配置参数
 # 是否启用https
-gb_enableHttps=false
+gb_enableHttps=1
 # 证书地址, pem 格式
 gb_certPath="/opt/gb28181/cert/cert.pem"
 gb_keyPath="/opt/gb28181/cert/key.pem"

+ 1 - 1
package/gbDocker/Dockerfile

@@ -25,5 +25,5 @@ ENV PATH ${JAVA_HOME}/bin:$PATH
 
 COPY ./gb28181/ /data/hfygb/
 WORKDIR /data/hfygb
-CMD java -jar ./target/hfy-gb.jar --server.address=0.0.0.0 --spring.config.location=/data/hfygb/config/application_product.yml
+CMD /data/hfygb/startHfyGp.sh
 

+ 29 - 0
package/gbDocker/startHfyGp.sh

@@ -0,0 +1,29 @@
+#!/bin/bash
+# docker 镜像内程序启动的脚本
+
+# 判断是否存在 机器码文件 不存在则执行创建
+if [ ! -f "/data/hfygb/target/machineCode.txt" ];then
+    echo "机器码文件不存在,开始创建"
+    # 创建机器码文件
+    java -jar /data/hfygb/target/classfinal-fatjar.jar -C
+    echo "机器码文件创建成功, 请连续管理员获取授权文件"
+fi
+
+# 判断是否存在授权文件
+if [ ! -f "/data/hfygb/target/authorization.txt" ];then
+    echo "授权文件不存在,请联系管理员获取"
+    exit 1
+fi
+
+# 判断是否已经获取到 加密程序
+if [ ! -f "/data/hfygb/target/hfy-gb-encrypted.jar" ];then
+    echo "加密程序不存在,请联系管理员获取"
+    exit 1
+fi
+
+# 尝试启动国标平台
+#java -javaagent:hfy-gb-encrypted.jar -jar ./hfy-gb-encrypted.jar --server.address=0.0.0.0 --spring.config.location=./application.yml
+java -javaagent:hfy-gb-encrypted.jar='-pwd 123456' -jar \
+    /data/hfygb/target/hfy-gb-encrypted.jar \
+    --server.address=0.0.0.0 \
+    --spring.config.location=/data/hfygb/config/application.yml

+ 8 - 2
package/startDockerImage.sh

@@ -207,8 +207,10 @@ echo "开始启动国标平台"
 gb_certName=""
 gb_keyName=""
 
-# 判断是否有证书地址 gb_certPath 与 gb_keyPath
-if [ "$gb_certPath" != "" ] && [ "$gb_keyPath" != "" ];then
+# 判断是否启用https gb_enableHttps 为true时启用 为false时不启用
+
+# 判断是否有证书地址 gb_enableHttps=false gb_certPath 与 gb_keyPath
+if [ "gb_enableHttps" == "true" ] && [ "$gb_certPath" != "" ] && [ "$gb_keyPath" != "" ];then
     # 判断证书是否存在
     if [ ! -f "$gb_certPath" ];then
         echo "证书文件不存在,请检查证书路径是否正确"
@@ -226,6 +228,9 @@ if [ "$gb_certPath" != "" ] && [ "$gb_keyPath" != "" ];then
     cp "$gb_keyPath" "$SCRIPT_DIR/gbRunning/keys"
 fi
 
+# 再不启动docker的情况下执行 java -jar classfinal-fatjar.jar -C
+docker run --rm -it --entrypoint=/bin/bash hfy_gp java -jar /data/hfygb/target/classfinal-fatjar.jar -C
+
 source ./gbRunning/createConfig.sh
 echo "$gb_WebPort"
 echo "$gb_sipPort"
@@ -244,6 +249,7 @@ echo -e "\033[33m自动按照sql与redis配置已经自动关闭\033[0m"
 
 sudo docker run -it --net=host  \
  -v /data/gb:/data/gb -e LANG=C.UTF-8 \
+ -V -e packagePassWord=123456 \
  -v $SCRIPT_DIR"/gbRunning/logs":/data/hfygb/logs \
  -v $SCRIPT_DIR"/gbRunning/mFile":/data/hfygb/mFile \
  -v $SCRIPT_DIR"/gbRunning/libImages":/data/hfygb/libImages \

+ 2 - 0
src/main/java/com/genersoft/iot/vmp/conf/ServiceInfo.java

@@ -22,6 +22,8 @@ public class ServiceInfo implements ApplicationListener<WebServerInitializedEven
         // 项目启动获取启动的端口号
         ServiceInfo.serverPort = event.getWebServer().getPort();
         logger.info("项目启动获取启动的端口号:  " + ServiceInfo.serverPort);
+        // 检测是否包含机器码
+
     }
 
     public void setServerPort(int serverPort) {

+ 4 - 0
src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java

@@ -32,6 +32,7 @@ public class    AnonymousAuthenticationEntryPoint implements AuthenticationEntry
         UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, jwtUser.getPassword() );
         SecurityContextHolder.getContext().setAuthentication(token);
         JSONObject jsonObject = new JSONObject();
+
         jsonObject.put("code", ErrorCode.ERROR401.getCode());
         jsonObject.put("msg", ErrorCode.ERROR401.getMsg());
         logger.info("未登陆用户");
@@ -40,8 +41,11 @@ public class    AnonymousAuthenticationEntryPoint implements AuthenticationEntry
             jsonObject.put("msg", e.getMessage());
         }
         response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+
         try {
             response.getWriter().print(jsonObject.toJSONString());
+            // 中止请求
+            return;
         } catch (IOException ioException) {
             ioException.printStackTrace();
         }

+ 2 - 2
web_src/config/index.js

@@ -3,8 +3,8 @@
 // see http://vuejs-templates.github.io/webpack for documentation.
 
 const path = require('path')
-// const baseUrl = "https://127.0.0.1:19200"
-const baseUrl = "https://hofuniot.cn:29072"
+const baseUrl = "https://127.0.0.1:19200"
+// const baseUrl = "https://hofuniot.cn:29072"
 const ZLMServer = "https://192.168.1.60:29010"
 module.exports = {
   dev: {

+ 2 - 0
web_src/src/components/dialog/customPlayer.vue

@@ -72,6 +72,8 @@
       </div>
     </el-dialog>
   </div>
+
+  
 </template>
 
 <script>

+ 32 - 0
设备绑定机制.md

@@ -1 +1,33 @@
 # 合方圆国标平台绑定流程
+
+## 操作流程
+1. 用户执行启动脚本
+2. 生成机器码
+3. 用户将机器码发送给管理员
+4. 管理员生成授权信息,以及对应的授权程序
+
+## 授权信息定义
+### 输入信息
+1. 机器码
+2. 服务端时间戳
+3. 用户程序密码
+> 由管理员创建,用于加密授权信息
+
+### 授权文件
+1. 基础授权文件
+> 用于申请授权信息
+- 机器码
+- 服务端时间戳
+- 随机码
+
+2. 授权信息文件
+> 用于存储授权信息
+> 由管理员生成
+- 机器码
+- 授权码生成时间
+- 程序密码
+- 授权时间 (授权码生成时间 + 有效期)
+
+3. 授权程序
+- 程序运行的时间戳
+- 上次记录生成的时间戳