zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155315 《信息安全系统设计基础》实验五 通讯协议设计

    实验内容

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

    实验知识点

    • OpenSSL
    • TCP通信
    • 混合密码系统

    实验步骤

    (一)Linux下OpenSSL的安装与使用

    • OpenSSL整个软件包大概可以分成三个主要的功能部分:
      • 密码算法库
      • SSL协议库
      • 应用程序
    • 安装过程
    ./configure
    make
    sudo make install
    
    • 测试AES
    • 测试RSA
    • 测试test_openssl.c
    • 主要问题:按照教程一步步进行的时候,发现安装包中有config和Configure,一开始运行Configure,在make的时候总是会出现错误。全部重新来过运行config才正常。查找资料发现其实configure也是一种命令,但是在这次实验中要运行config才可以。

    (二)TCP通信

    • 一人实现服务器,一人实现客户端
    • 服务器伪代码
    socket()
    bind()
    listen()
    accept()
    closesocket()
    
    • 客户端伪代码
    socket()
    bind()
    connect()
    closesocket()
    
    • 运行结果

    (三)混合密码系统

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

    生成证书
    • 生成服务器端的私钥(key文件)
      openssl genrsa -des3 -out server.key 1024
    • 生成服务器端的csr文件
      openssl req -new -key server.key -out server.csr -config
    • 客户端生成key文件
      openssl genrsa -des3 -out client.key 1024
    • 生成客户端的csr文件
      openssl req -new -key client.key -out client.csr -config
    • 生成自己的CA,生成ca.key和ca.crt证书文件
      openssl req -new -x509 -keyout ca.key -out ca.crt -config
    • 用生成的ca给服务器的csr文件签名,生成服务器端的证书
      Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
    • 用生成的ca给客户端的csr文件签名,生成客户端的证书
      Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
    • 主要问题:在生成服务器端的证书时,提示部门与CA中的定义的部门不符,重新进行第一步修改部门之后生成server.crt。在生成服务器端的证书时,提示因为与前面使用的common name相同,需要修改文件demoCA/index.txt.attr,
      将里面的:unique_subject = yes改为unique_subject = no保存退出再重新输入就可以了。

    用混合密码系统进行防护

    • 基本框架与socket编程一样,只是其中需要加入头文件:
    #include <openssl/ssl.h>
    #include <openssl/err.h>
    #include <openssl/evp.h>
    

    和一些其他的代码:

    SSL_library_init();
    OpenSSL_add_all_algorithms();
    SSL_load_error_strings();
    ctx = SSL_CTX_new(SSLv23_server_method());
    if (ctx == NULL) 
     {
        ERR_print_errors_fp(stdout);
        exit(1);
     }
    if (SSL_CTX_use_certificate_file(ctx, argv[3], SSL_FILETYPE_PEM) <= 0) 
    {
        ERR_print_errors_fp(stdout);
        exit(1);
     }
    if (SSL_CTX_use_PrivateKey_file(ctx, argv[4], SSL_FILETYPE_PEM) <= 0)
     {
        ERR_print_errors_fp(stdout);
        exit(1);
     }
    if (!SSL_CTX_check_private_key(ctx)) 
     {
        ERR_print_errors_fp(stdout);
        exit(1);
     }    
    
    • 运行结果

    参考资料

    PSP时间统计

    步骤 耗时 百分比
    需求分析 10min 10%
    设计 20min 20%
    代码实现 50min 50%
    测试 10min 10%
    总结分析 10min 10%
  • 相关阅读:
    深入浅出理解依赖注入这种由外部负责其依赖需求的行为,我们可以称其为 “控制反转(IoC)”
    php 远程下载图片到本地
    深入理解 RESTful Api 架构
    uva 10369 Arctic Network (最小生成树加丁点变形)
    UVALive
    UVA
    UVA
    POJ 1182 食物链(经典带权并查集 向量思维模式 很重要)
    HDU 1829 A Bug's Life (种类并查集)
    UVA
  • 原文地址:https://www.cnblogs.com/-zyl/p/8046930.html
Copyright © 2011-2022 走看看