zoukankan      html  css  js  c++  java
  • 【2018-2019-1】20165223 实验五 通讯协议设计


    实验成员:20165223

    实验名称:通讯协议设计


    目录


    一、实验目的

    二、实验内容

    二、实验总结


    一、实验目的

    1.了解OpenSSL

    • OpenSSL的简介
      OpenSSL是一个SSL协议的开源工具包,采用C语言作为开发语言,现了安全套接字层(SSL v2/v3)和传输层安全(TLS v1)协议以及全强大的通用加密库,且具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。

    • OpenSSL的组成和功能
      (1)SSL协议库:The SSL Library(SSL、TLS开发代码库)
      (2)密码算法库:The Crypto Library(密码学相关开发代码库)
      (3)应用程序:Command Line Tool(命令行工具,提供CA、证书等功能)

    • 使用 man OpenSSL 命令查看功能


    2.安装和使用OpenSSL

    二、实验内容


    任务一:通讯协议设计-1

    (一)实验要求

    1.在Ubuntu中完成 Linux下OpenSSL的安装与使用 中的作业
    2.提交运行结果截图

    (二)实验步骤

    (1)OpenSSL的安装与测试

    $ tar xzvf openssl-1.1.0-pre1.tar.gz
    

    • 2.安装OpenSSL
    $ cd openssl-1.1.0-pre1
    $ ./config
    

    $ sudo make
    

    $ sudo make install
    

    $ make test    //测试
    

    • 3.编写测试代码 test_openssl.c
    #include <stdio.h>
    #include <openssl/evp.h>
    
    int main(){
        
        OpenSSL_add_all_algorithms();
        
        return 0;
    }
    
    
    • 4.使用OpenSSL密码算法库编译运行
    //编译
    $ gcc -o test_openssl test_openssl.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
    
    //运行,打印0
    $ echo $?
    
    

    注意要加上 -lssl 链接OpenSSL密码算法库,否则会报错

    (2)Linux下OpenSSL的安装与使用中的作业

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

    首先了解一下OpenSSL算法的指令内容(man 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:对标准输入的内容进行加密
    

    再实现作业中的内容

    • 1.基于Socket实现TCP通信

    • 2.使用OpenSSL算法,测试对称算法AES

    • 3.使用OpenSSL算法,测试非对称算法RSA(生成私钥→生成公钥→加密→解密)
    /*生成RSA密钥*/
    
    $ openssl genrsa -des3 -passout pass:123456 -out RSA.pem 
    
    /*提取公钥*/
    $ openssl rsa -in RSA.pem -passin pass:123456 -pubout -out pub.pem 
    
    /*使用RSA作为密钥进行加密,实际上使用其中的公钥进行加密*/
    
    $ openssl rsautl -encrypt -in plain.txt -inkey RSA.pem -passin pass:123456 -out enc.txt
    
    /*使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密*/
    
    $ openssl rsautl -decrypt -in enc.txt -inkey RSA.pem -passin pass:123456 -out replain.txt
    
    /*比较原始文件和解密后文件*/
    
    $ diff plain.txt replain.txt 
    
    /*使用公钥进行加密*/
    
    $ openssl rsautl -encrypt -in plain.txt -inkey pub.pem -pubin -out enc1.txt
    
    /*使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密*/
    
    $ openssl rsautl -decrypt -in enc1.txt -inkey RSA.pem -passin pass:123456 -out replain1.txt
    
    /*比较原始文件和解密后文件*/
    
    $ diff plain.txt replain1.txt
    
    

    • 4.使用OpenSSL算法,测试Hash算法中的MD5(使用MD5加密“20165223cn”)

    (三)实验结果

    • 编译运行测试代码:test_openssl.c

    (四)代码分析

    返回目录


    任务二:通讯协议设计-2

    (一)实验要求

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

    (二)实验步骤

    • 1.编写客户端和服务器代码

    • 2.编译客户端和服务器代码

    $ 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
    
    

    • 3.产生私钥
    $ openssl genrsa -out privkey.pem 1024
    

    • 4.生成证书(需要填写信息)
    $ openssl req -new -x509 -key privkey.pem -out CAcert.pem -days 1095
    

    • 5.运行实现对实验二中的“wc服务器”通过混合密码系统进行防护
    $ ./server 8888 1 CAcert.pem privkey.pem
    $ ./telent 127.0.0.1 8888
    

    (三)实验结果

    • 实现对实验二中的“wc服务器”通过混合密码系统进行防护

    (四)代码分析

    返回目录


    二、实验总结


    (一)遇到的问题

    在编译测试代码的时候报错如下

    • 原因:没有加上-lssl来链接OpenSSL的密码算法库
    • 解决:在编译命令上加上-lssl即可
    $ gcc -o to test_openssl.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
    
    

    (二)分析与总结

    (1)实验心得

    • 这次的实验让我了解了OpenSSL的功能与基本使用方法,学会了通过OpenSSL来测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5等,掌握了许多新的知识。

    (2)OpenSSL知识点总结

    OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

    • OpenSSL的基本功能

      • 密码算法库
      • SSL协议库
      • 应用程序
    • OpenSSL实现对称加密
      OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

    • OpenSSL实现非对称加密
      OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。

    • OpenSSL的应用程序功能
      OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,提供了相对全面的功能。OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。

    (三)参考资料

    1. Linux下OpenSSL的安装与使用
    2. SSL编程- 简单函数介绍
    3. OpenSSL证书操作
    4. Linux下的OpenSSL编程——openssl例子

    返回目录

  • 相关阅读:
    How to Create a site at the specified URL and new database (CommandLine Operation)
    Using Wppackager to Package and Deploy Web Parts for Microsoft SharePoint Products and Technologies
    SQL Server Monitor v0.5 [Free tool]
    How to build Web Part
    Deploy web part in a virtual server by developing a Web Part Package file(.cab)
    How to recreate "sites" link if you delete it accidentally
    SharePoint Portal Server管理匿名访问设置
    Monitor sql connection from .Net SqlClient Data Provider
    Brief installation instruction of Sharepoint Portal Server
    How to Use SharePoint Alternate URL Access
  • 原文地址:https://www.cnblogs.com/moddy13162201/p/10126100.html
Copyright © 2011-2022 走看看