zoukankan      html  css  js  c++  java
  • 实验五 通讯协议设计

    实验五 通讯协议设计

    5-1实验要求:

    在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业

    学习内容:

    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协议库、应用程序

    安装:

    ./config
    make
    make test
    make install
    

    测试:

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

    提交运行结果截图

    5-2实验要求:

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

    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);
     }    
    

    运行结果:

  • 相关阅读:
    Chrome developer tool:本人钟爱的 console、Network 功能简谈
    Node.js:实现知乎(www.zhihu.com)模拟登陆,获取用户关注主题
    简谈 JavaScript、Java 中链式方法调用大致实现原理
    jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究
    jQuery UI 多选下拉框插件:jquery-ui-multiselect
    为什么 JavaScript 中基本数据类型拥有 toString 之类方法?
    谈谈 JavaScript 中的 this 指向问题
    重写和重载的区别
    JAVA的静态方法,静态变量,静态类。
    重载
  • 原文地址:https://www.cnblogs.com/lyx1996/p/8051663.html
Copyright © 2011-2022 走看看