开放原子训练营(第一季)铜锁探密 基于铜锁构建Web在线加密工具库(Go + React)
铜锁/Tongsuo是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保护能力。本文介绍了如何基于铜锁构建Web在线加密工具库,并使用docker快速部署。通过封装铜锁API接口和构建前端页面,我们实现了一个简单的Web应用程序
简介
本文记录我参加开放原子训练营(第一季)铜锁探密活动,学习铜锁密码库和国密加密算法后,完成的小作品。
先简单介绍一下作品内容: Web在线加密工具库是一种提供加密算法在线使用的工具库,可以帮助用户快速、方便地加密数据。下面将介绍如何基于铜锁构建Web在线加密工具库,并使用docker快速部署。
铜锁介绍
铜锁/Tongsuo是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保护能力。
构建应用
初始化项目
使用Goland作为IDE,先创建一个react项目。
后端我们可以使用hertz框架,hertz是字节推出的Web框架,使用简单,适合快速搭建Web应用程序。
编写Dockerfile
为了更方便的使用tongsuo,我使用docker来安装铜锁库,整个应用也跑在docker中,不会对我们本地的环境有影响,非常方便
首先,在docker中构建一个基于ubuntu镜像的环境,安装必要的依赖包,包括go、nodejs和tongsuo。然后,编译tongsuo以确保其能够正常运行。
封装铜锁API接口
在环境搭建完成后,由于铜锁目前还没有go的sdk,参考了一些大佬的思路,可以利用go编写命令,使用命令行来调用安装好的tongsuo库。
封装好工具类后,我们可以将铜锁API封装成RESTful API,来方便前端来调用。
构建前端页面
使用react和antd构建前端页面,实现简单的用户界面。用户可以在页面上输入需要加密的数据,选择加密算法,并将加密结果显示在页面上。
这里在开发时有一个细节,就是前后端跨域问题。前端使用的是create-react-app
, 可以安装 http-proxy-middleware
npm install --save-dev http-proxy-middleware
然后再src目录下创建文件setupProxy.js
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use('/api',
createProxyMiddleware({
target: 'http://127.0.0.1:8888',
changeOrigin: true,
})
);
};
这样我们的前端运行在3000端口,通过代理准发后,变成'http://127.0.0.1:8888'
就不会出现跨域的问题了。不过这里要注意,请求后端接口的函数,请求地址千万不要写死,要写相对路径。如果写死,这个代理的端口是不会生效的。
打包前端静态资源
我们打包前端为静态资源后,为了方便访问,直接把静态资源放在后端目录下,然后编写hertz的静态文件路由:
让go的服务器直接帮我们代理静态资源,直接访问后端的端口http://localhost:8888
,就可以访问我们的密码箱应用了。
编写docker-compose.yml快速部署
使用docker-compose.yml文件描述应用程序的容器,包括后端API容器和前端页面容器,并设置相关参数,如端口号、环境变量等。使用docker-compose up -d命令,可以快速部署整个应用程序。
项目预览
完成部署后,您可以使用浏览器访问Web在线加密工具库,并使用提供的加密算法实现数据加密。在页面上输入需要加密的数据,选择加密算法,并点击“加密”按钮,加密结果将显示在页面上。
项目地址 t-camp加密工具箱
总结
本文介绍了如何基于铜锁构建Web在线加密工具库,并使用docker快速部署。通过封装铜锁API接口和构建前端页面,我们实现了一个简单的Web应用程序,可以帮助用户快速、方便地加密数据。
关于铜锁探秘活动,我觉得非常不错,让我一个的小白,了解并学习了我们平时https中TLS加密过程,还有颁发服务器,浏览器CA证书等一系列过程。整个学习过程都有铜锁训练营的老师详细带大家动手实践。
铜锁完全兼容openssl的API,所以大家不用担心在使用上有更多的学习成本,或者从openssl迁移会比较麻烦。但是现在铜锁存在的问题,我感觉文档还是不够完善,对于不同平台可能存在的bug,环境等问题,文档还是比较单一,具体怎么使用方面,最佳实践还是比较少,例子不够丰富,对于初学者而来说,使用起来还是比较困难的,希望铜锁能不断完善文档。另外还有各种语言的SDK,目前支持了python, PHP, Java.希望官方可以尽快推出其它语言的SDK,方便开发者使用。
我非常期待开放原子系列的活动,让国产的开源项目不断走到我们的生产开发中。而我作为开源项目的贡献值,非常支持!
更多推荐
所有评论(0)