国密信安NetEDS实操demo
1.准备工作
1.1 安装
解压 “08-国密改造.zip”
解压 “08-国密改造\信安NetEDS安全中间件(JAVA)2.0.2.5_Linux_Windows_build20220630.zip”
解压 “08-国密改造\信安NetEDS安全中间件(JAVA)2.0.2.5_Linux_Windows_build20220630\DEMO\ SDK-DEMO.tar.gz”
执行SDK-DEMO\sql\crebas_mysql.sql (该sql创建了一个数据库和一张表,如果在已有数据库中建表可以仅执行 create table 不执行 create database)
1.2 数据库配置和加密字段
本次demo验证的数据库配置和加密字段如下:
地址:1.119….:33060 数据库:db_dev_qishi 用户:dev_qishi_rw 密码:oweBohC0wze… 表:sdk_person 加密字段:phone
补充:数据库地址需要外网访问,信安应用加密网关要通过以上配置获取数据库元数据,其中涉及create 和 drop 等高级权限,是为了生成sdk.aoe 配置。如果不能连外网或者权限不足是无法正常加解密的。
1.3 配置SDK-DEMO\conf\sdk.properties
要保证应用网关地址可访问;appId和secretKey是被集成方提供数据库连接等配置给信安,然后由信安提供;如果未启用ssl无需配置证书。
本次验证的实例:
sdk.server.host=113.57.xxx sdk.server.port=8216 # Local Encryption 离线加解密 ,Online Encryption 在线加解密, TEST Encryption 测试模式 #sdk.scenario=TEST Encryption sdk.scenario=Local Encryption sdk.socket.timeout = 10 sdk.secretKey=5d7629ac3fd0426ba1b… sdk.appId=fg6D4F155D0… sdk.target.driverClass=com.mysql.cj.jdbc.Driver #sdk.target.driverClass=dm.jdbc.driver.DmDriver sdk.ssl.enable=false sdk.TrustCertificatePath=/opt/SDK-DEMO/cert
1.3 配置 SDK-DEMO\conf\application.yml
这个配置只需修改mysql驱动部分,其他配置不变,
本次验证实例:
app: datasource: mysql: enable: true # cn.com.infosec.neteds.sdk.jdbc.CipherDriver # com.mysql.cj.jdbc.Driver driver-class-name: cn.com.infosec.neteds.sdk.jdbc.CipherDriver jdbc-url: jdbc:mysql://1.119.xxx:33060/db_dev_qishi?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&generateSimpleParameterMetadata=true username: dev_xxx password: oweBohC0wze…
1.4 配置 SDK-DEMO\conf\logback-spring.xml
可以自定义 <property name="LOG_HOME" value="/logs/tablego-springboot"/>这是存放日志文件的目录
修改appender
<root level="INFO"> <appender-ref ref="console"/> <appender-ref ref="file"/> </root>
2.验证步骤
2.1 运行SDK-DEMO\bin\sdk-integration-test.jar
不要直接执行restart.sh ,首先这个是linux脚本,再次这里面开启了jvm调试
直接cmd进入 bin 所在目录,执行一下命令:
java -jar -Xbootclasspath/a:../conf sdk-integration-test.jar
成功启动最后一行会有以下提示
2.2 访问 http://localhost:8080
2.3 添加用户数据
点开左侧 测试数据1 – 用户信息 – 添加
填写姓名、性别、邮箱、电话(该字段是加密字段)
成功提示
数据库字phone 已经是密文
前端展示是明文
原始sql未收到影响,复杂sql尚需验证
3.QA
3.1 获取加密配置失败: HTTP error:connect timed out
答:这个问题是 加密网关地址不通,可以向信安工人人员获取最新网关地址
3.2 获取加密配置失败: 25057SIGN值校验失败
答:这个问题是appId 配置错误,可以向信安工作人员提供数据库加密字段等配置后,由工作人员注册成功后提供
3.3 对方配置加密字段失败
答:这个问题是因为提供的数据库账户权限不足,需要有create和drop等高级权限
3.4 获取加密配置失败: get aoe Config error
答:这个问题是信安尚未配置加密信息,等配置完毕后再试
3.5 cipher Driver register success
答:恭喜你,获取加密配置成功,一切正常,可以体验demo加解密了
数据结构:
{ "code": 0, "msg": "成功", "data": [ { "dbName": "db_dev_qishi", "tableName": "sdk_person", "columnId": "318d0403dfa3498aa7xxx", "columnName": "PHONE", "encryptPolicyId": "3", "algorithm": "SM4_128", "cmkId": "f0d761c6b0a24a05937a4xxx", "isFpe": 1, "fpeModel": 1, "isFuzzyQuery": 0 } ] }
补充:这个插件是在jdbc层面对敏感数据进行加解密,并不会入侵代码