zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155215 实验五 通讯协议设计

    1

    作业内容:

    • 两人一组
    • 基于Socket实现TCP通信,一人实现服务器,一人实现客户端
    • 研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5
    • 选用合适的算法,基于混合密码系统实现对TCP通信进行机密性、完整性保护。
    • 学有余力者,对系统进行安全性分析和改进。

    Linux下OpenSSL的安装与使用

    OpenSSL简介

    OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。
    OpenSSL最早的版本在1995年发布,1998年后开始由OpenSSL项目组维护和开发。当前最新的版本是1.1.0 alpha版本,完全实现了对SSLv1、SSLv2、SSLv3和TLS的支持。。目前,OpenSSL已经得到了广泛的应用,许多类型的软件中的安全部分都使用了OpenSSL的库,如VOIP的OpenH323协议、Apache服务器、Linux安全模块等等。

    OpenSSL整个软件包大概可以分成三个主要的功能部分:

    • 密码算法库
    • SSL协议库
    • 应用程序

    OpenSSL源码的目录结构也是围绕这三个功能部分进行规划的。
    密码算法库是一个强大完整的密码算法库,它是OpenSSL的基础部分,也是很值得一般密码安全技术人员研究的部分,它实现了目前大部分主流的密码算法和标准。主要包括对称算法、非对称算法、散列算法、数字签名和认证、X509数字证书标准、PKCS12、PKCS7等标准。其他两个功能部分SSL协议和应用程序都是基于这个库开发的。

    在密码算法库的基础上实现的,SSL协议部分完全实现和封装了SSL协议的三个版本和TLS协议。使用协议库,你完全可以建立一个SSL服务器和SSL客户端。

    应用程序是基于密码算法库和SSL协议库实现的命令,熟悉OpenSSL可以从使用这些应用程序开始。应用程序覆盖了密码技术的应用,主要包括了各种算法的加密程序和各种类型密钥的产生程序(如RSA、Md5、Enc等等)、证书签发和验证程序(如Ca、X509、Crl等)、SSL连接测试程序(如S_client和S_server等)以及其它的标准应用程序(如Pkcs12和Smime等)。

    实验步骤

    • 下载安装包:

    • 安装指令

     ./config
     make
     make test
     sudo make install
    
    • 编写测试代码:

    #include <stdio.h>
    #include <openssl/evp.h>
    
    int main(){
        OpenSSL_add_all_algorithms();
        return 0;
    }
    

    实验结果

    2

    • 在Ubuntu中实现对实验二中的“wc服务器”通过混合密码系统进行防护
    • 提交测试截图

    运行程序命令:

    • 编译
    gcc -o server server.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
    
    gcc -o telent telent.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
    
    • 生产私钥和证书
    openssl genrsa -out privkey.pem 1024
    openssl req -new -x509 -key privkey.pem -out CAcert.pem -days 1095
    
    • 程序运行方式:
    ./server 7838 1 CAcert.pem privkey.pem
    ./telent 127.0.0.1 7838
    

    实验结果

    实验中遇到的问题

    问题1:

    • **首先遇到的问题,就是在OpenSSL的安装时,我发现我输入了make install 的指令之后,显示了安装错误。然后我搜索了一下, 还发现我的虚拟机上本来就有OpenSSL。但我后面试了一下,改成了sudo make install 指令就正常了 。 **

    问题2:

    • 实验一中要求我们研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5。我发现我在OPENSSL的指令上不太会使用。

    • 让我们了解一下OpenSSL

    • 我找到了一些关于OpenSSL的指令内容:

    • 对称算法

    使用的标准命令为 enc
    openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
       [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
       [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
    
    -in filename:指定要加密的文件存放路径
    
    -out filename:指定加密后的文件存放路径
    
    -salt:自动插入一个随机数作为文件内容加密,默认选项
    
    -e:可以指明一种加密算法,若不指的话将使用默认加密算法
    
    -d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致
    
    -a/-base64:使用-base64位编码格式
    
    
    • AES
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass pass:123456 //密码123456
    
    • RSA
    openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
       [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]
    常用选项:
    
    -in filename:指明私钥文件
    
    -out filename:指明将提取出的公钥保存至指定文件中 
    
    -pubout:根据私钥提取出公钥
    
    • MD5
    openssl passwd -1 -in test.txt -salt 12345678    
    
    生成密码需要使用的标准命令为 passwd ,用法如下:
    
    openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
    常用选项有:
    
    -1:使用md5加密算法
    
    -salt string:加入随机数,最多8位随机数
    
    -in file:对输入的文件内容进行加密
    
    -stdion:对标准输入的内容进行加密
    

    实验的感想

    • 这次的实验让我对于Openssl有了更深入的认识,学会了更多的东西,另外,也觉得通过OpenSSL来测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5等,这种学科之间交融的感觉很奇妙,也让我认识到学习之间都是互相有联系的,每一门课程的学习,都为未来的内容打下基础。
  • 相关阅读:
    使用MobaXterm远程连接Ubuntu,启动Octave,界面不能正常显示
    ABP .Net Core 日志组件集成使用NLog
    ABP .Net Core Entity Framework迁移使用MySql数据库
    ABP前端使用阿里云angular2 UI框架NG-ZORRO分享
    阿里云 Angular 2 UI框架 NG-ZORRO介绍
    Visual Studio 2019 Window Form 本地打包发布猫腻
    VS Code + NWJS(Node-Webkit)0.14.7 + SQLite3 + Angular6 构建跨平台桌面应用
    ABP .Net Core 调用异步方法抛异常A second operation started on this context before a previous asynchronous operation completed
    ABP .Net Core To Json序列化配置
    .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”
  • 原文地址:https://www.cnblogs.com/xuanyan/p/8052278.html
Copyright © 2011-2022 走看看