netty实现gmssl_基于gmssl的CA系统构建及应用-个人报告

本报告详细介绍了使用gmssl构建CA系统并应用于https网站的过程。作者研究了gmssl指令,创建了证书,并在eclipse中配置了Javaweb项目与tomcat,实现了https的单项认证。在调试过程中,解决了openssl动态库冲突和端口冲突等问题。
摘要由CSDN通过智能技术生成

北京电子科技学院

《信息安全工程技术应用》课程设计报告

基于gmssl的CA系统构建及应用

小组成员姓名:20181301刘天宁

20181304石昊林

20181306宁锦鹏

指导教师:娄嘉鹏

提交时间:2020年11月8日

个人报告

20181304石昊林

一、个人工作

1.负责部分gmssl指令的解释:gendh、gendsa、genpkey、sripemd160、camellia-256-cbc、camellia-256-ecb、cast。

2.使用eclipse开发Javaweb项目并配置tomcat,构建出http网站。

3.使用openssl命令构建CA证书、客户端证书、服务器证书,导入浏览器。

4.实现tomcat单项认证的配置,使http网站变为安全的https网站。

二、设计与调试过程中遇到的问题及解决办法

1.第一周完成了对于指令的研究。刚开始的时候,我不明白openssl是什么、怎么用,对于指令的研究也只停留在表面,实际应用很困难。

经过网上学习以及对老师ppt的研究,我对openssl有了大致的理解。Openssl整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

Openssl命令可以分为3部分:标准命令(例如我研究的gendh、gendsa、genpkey)、消息摘要命令(即sha1命令,sripemd160是其中一部分)、密码命令(包括多种密码的使用,核心是enc命令。我只研究了camellia-256-cbc、camellia-256-ecb、cast)。

2.第二周实现了使用openssl命令创建证书并在浏览器中导入证书。

之前打算下载gmssl的安装包,使用gmssl命令实现证书的创建,但遇到了困难。在按照教程对gmssl进行编译和安装时,直接搞崩了虚拟机……通过分析和查找,我们小组发现了问题所在:gmssl以动态库的形式进行编译时,同时会生成openssl.so的动态库文件;该生成的openssl.so会与系统自己的openssl.so动态库产生冲突。openssl.so是操作系统所依赖的重要库文件,包括联网等活动都会受其影响,这次安装约等于将整个系统整崩溃……解决办法是:后来我选择在windows环境下直接用openssl工具进行编译,实现了证书的创建。

附证书截图:

3.第三周实现了web工程在eclipse的配置,以及实现tomcat单项认证的配置。

在这个过程中遇到的问题是本地tomcat服务器与eclipse集成的tomcat服务器同时开启时会报错,二者端口产生冲突,显示端口被占用,这个问题困扰了我很久。解决办法是将本地tomcat服务器关掉,将eclipse集成的tomcat服务器开启,web网站可以正常配置。如下图:

在配置tomcat时遇到了比较大的困难。网上五花八门的方法更改server.xml文件,大多不适合我们的证书,多次尝试后,我找到了tomcat官网Apache tomcat 9有关ssl的配置讲解,然后按照专业的方法更改server.xml文件,重启tomcat后在火狐浏览器和IE浏览器成功访问到我们的https网页。如下图:

三、设计体会及收获

1.选到这个课题的时候,是想在一个陌生的领域学到一些东西,所以一开始进行研究的时候遇到了很多困难,并且很多问题是网上查不到、需要我们自己更加深入研究openssl的原理去解决的。

通过刚开始一周的学习,我了解到openssl是在linux、unix、windows、mac等多种平台用于建立SSL协议的产品实现。SSL协议和TLS协议是将http网站构建成可以进行加密传输的https网站的必需品。通过对openssl指令的学习,我对我们的课题怎样去进行有了一个大致的了解。

2.将http网站变成https网站(即上锁)另一个必须要用的东西就是数字证书,它可以通过openssl的指令来实现。我实现的是https单项认证,单向认证SSL协议不需要客户端拥有CA证书,去掉了服务器端验证客户证书的过程。单项认证在协商对称密码方案、对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。这样,双方具体的通讯内容,就是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。一般的web应用都是采用SSL单项认证,因为拥护数目太多了,并且不需要在通讯层对用户身份进行验证,一般都在应用逻辑层来保证用户的合法登入。

再建立数字证书时,我们先从理论方面了解到证书需要什么,然后通过命令将密钥、证书具体信息、有效期等设置完成,然后进行自签名并使用根证书签名。

3.通过课设我对tomcat的配置及使用有了更深的了解。当一个动态网页编写完成后是不能直接被别人通过浏览器访问的,要想访问此动态网页就必须让浏览器通过一段程序来访问此网页,这段程序就是服务器。它用来接受浏览器请求,进行处理然后返回结果。Tomcat就是一个服务器,我们要配置https网站就需要更改conf目录下的server.xml文件,并且在访问自己的https网站前,要点bin目录下的执行文件startup.bat将tomcat打开,这样才能成功访问。

四、参考资料

Netty是一个基于Java的网络应用框架,它提供了异步、事件驱动的网络编程模型,可以用来开发高性能的网络应用程序。 GmSSL是一个开源的加密库,支持国密算法。在Netty中使用GmSSL可以实现国密算法的加密和解密,保证网络通信的安全性。 实现步骤如下: 1. 引入GmSSL依赖 在Maven项目中,需要在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>1.68</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.68</version> </dependency> ``` 2. 创建SSLContext 使用GmSSL进行加密和解密需要创建一个SSLContext对象,可以通过以下代码实现: ```java Security.addProvider(new BouncyCastleProvider()); SSLContext sslContext = SSLContext.getInstance("GMSSL", "BC"); ``` 其中,BouncyCastleProvider是一个开源的加密库提供商,可以支持各种加密算法。 3. 配置SslHandler 在Netty中,可以通过SslHandler实现SSL加密和解密。可以通过以下代码创建一个SslHandler对象: ```java SslHandler sslHandler = new SslHandler(sslContext.createSSLEngine()); ``` 4. 配置ChannelPipeline 在Netty中,可以通过ChannelPipeline实现消息的编解码和处理。可以通过以下代码将SslHandler添加到ChannelPipeline中: ```java ChannelPipeline pipeline = channel.pipeline(); pipeline.addLast("ssl", sslHandler); ``` 5. 完成GMSSL加密和解密 完成上述步骤后,就可以使用GMSSL进行加密和解密了。在Netty中,可以通过SslHandler的write和read方法实现加密和解密: ```java ByteBuf buf = Unpooled.copiedBuffer("Hello, world!".getBytes()); sslHandler.write(ctx, buf, ctx.newPromise()); ``` ```java public void channelRead(ChannelHandlerContext ctx, Object msg) { ByteBuf buf = (ByteBuf) msg; System.out.println(buf.toString(CharsetUtil.UTF_8)); } ``` 以上就是在Netty中使用GmSSL进行加密和解密的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值