




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机学院数字鉴别与身份认证实验报告 基于X509证书和SSL协议的身份认证编程实现实验的目的和意义 通过实验了解X509证书的生成过程,理解和实践基于公钥基础设施PKI的基本原理。理解PKI中各个组成部分,如CA的工作原理。如何产生CA的自签名证书,以及CA中心如何颁布证书,如何签名认证证书,如何作废证书的基本过程。学习和使用OPENSSL体系进行编程,学习使用OPENSSL指令,学习使用OPENSSL库。实验的原理证书(certificate),有时候简称为cert,PKI适用于异构环境中,所以证书的格式在所使用的范围内必须统一。证书是一个机构颁发给一个安全个体的证明,所以证书的权威性取决于该机构的权威性。一个证书中,最重要的信息是个体名字、个体的公钥、机构的签名、算法和用途,签名证书和加密证书分开。最常用的证书格式为X.509 v3。X.509证书格式:版本:1、2、3序列号:在CA内部唯一签名算法标识符:指该证书中的签名算法签发人名字:CA的名字有效时间:起始和终止时间个体名字个体的公钥信息:算法、参数、密钥签发人唯一标识符:主体唯一标识符扩展域签名X509标准PKIX:1)署名用户向证明机构(CA)提出数字证书申请;2)CA验明署名用户身份,并签发数字证书;3)CA将证书公布到证书库中;4)署名用户对电子信件数字签名作为发送认证,确保信件完整性,不可否认性,并发送给依赖方。5)依赖方接收信件,用署名用户的公钥验证数字签名,并到证书库查明署名用户证书的状态和有效性;6)证书库返回证书检查结果;密钥/证书生命周期管理分三个阶段:初始化阶段,颁发阶段,取消阶段(证书过期、证书撤销)。CA系统的主要内容:概括地说,认证中心(CA)的功能有:证书发放、证书更新、证书撤销和证书验证。CA的核心功能就是发放和管理数字证书,具体描述如下:1、接收验证最终用户数字证书的申请。2、确定是否接受最终用户数字证书的申请-证书的审批。 3、向申请者颁发、拒绝颁发数字证书-证书的发放。4、接收、处理最终用户的数字证书更新请求-证书的更新。 5、接收最终用户数字证书的查询、撤销。6、产生和发布证书废止列表(CRL)。7、数字证书的归档。8、密钥归档。9、历史数据归档。 CA的密钥管理功能:1、公私密钥对的产生2、公钥的获取3、密钥备份和恢复4、证书撤消5、自动更新密钥6、密钥历史档案Secure Sockets Layer(SSL):作用: SSL被设计用来使用TCP提供一个可靠的端到端安全服务,为两个通讯个体之间提供保密性和完整性(身份鉴别)SSL 提供四个基本功能:Authentication 、 Encryption、 Integrity、Key ExchangeSSL采用两种加密技术:非对称加密用于认证和交换加密密钥,对称加密用于加密传输数据SSL程序设计:SSL 通讯模型为标准的C/S 结构,除了在 TCP 层之上进行传输之外,与一般的通讯没有什么明显的区别主要介绍如何使用OpenSSL进行安全通讯的程序设计。过程主要包括:OpenSSL初始化、SSL环境申请、证书验证、证书加载、绑定到套接字、SSL握手、SSL通信、关闭SSL连接。实验的操作过程 OPENSSL安装和环境配置 1、预先安装PERL组件ActivePerl-5.8.0.806-MSWin32-x86.rar和windows vc6 开发 工 具; 2、openssl.0.9.8.tar.gz 解压到d: 3、cd d:D:openssl-0.9.8openssl-0.9.8 4、perl Configure VC-WIN32 5、msdo_ms6、nmake -f msntdll.mak将OPENSSL编译成功生成D:openssl-0.9.8openssl-0.9.8out32dll文件夹 能够发布CA自签名证书;建立一个小型的CA中心;熟悉CA证书系统的密钥对的产生、提出证书申请、发布证书、撤销证书、发布CRL列表等流程; 发布以自己姓名(汉语全拼)为名字的个人证书; 发布Server服务器端的证书; 熟悉基于socket的网络通信编程的相关知识,编写简单的Client程序和Server程序,实现Client程序与Server程序之间基于X509证书和SSL协议身份认证和通信加密;具体可参考Openssl目录下的 设计用户界面,能够由用户自己输入想要传输的message;比如 “zhangsan is working”,服务器能够接收并且显示消息。实验过程 小型CA中心的发布: 文件夹中产生ca.key和ca.crt文件。 个人证书和服务器证书的生成: ca签名证书:文件夹中产生了以我名字为名字的用户证书,同理可以发布server服务端证书。同时可以观察到c:caroot目录下的index文件的更新撤销证书:撤销后在crl文件夹中创建了撤销文件列表 程序测试 当有一方输入bye时通讯结束 实验的心得体会附加程序的完成的源代码Client代码:/ client.cpp : Defines the entry point for the console application./modify by zhangxuan/2009-11-8#include stdafx.h#include #include #include #include #include #include #include openssl/rsa.h #include openssl/crypto.h#include openssl/x509.h#include openssl/pem.h#include openssl/ssl.h#include openssl/err.h#include openssl/rand.h/*所有需要的参数信息都在此处以#define的形式提供*/#define CERTF client.crt /*客户端的证书(需经CA签名)*/#define KEYF client.key /*客户端的私钥(建议加密存储)*/#define CACERT ca.crt /*CA 的证书*/#define PORT 4433 /*服务端的端口*/#define SERVER_ADDR 127.0.0.1 /*服务段的IP地址*/#define CHK_NULL(x) if (x)=NULL) exit (-1)#define CHK_ERR(err,s) if (err)=-1) perror(s); exit(-2); #define CHK_SSL(err) if (err)=-1) ERR_print_errors_fp(stderr); exit(-3); int main ()int err;int sd;struct sockaddr_in sa;SSL_CTX* ctx;SSL* ssl;X509* server_cert;char* str;char buf 4096;SSL_METHOD *meth;int seed_int100; /*存放随机序列*/WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)printf(WSAStartup()fail:%dn,GetLastError();return -1; OpenSSL_add_ssl_algorithms(); /*初始化*/SSL_load_error_strings(); /*为打印调试信息作准备*/meth = TLSv1_client_method(); /*采用什么协议(SSLv2/SSLv3/TLSv1)在此指定*/ctx = SSL_CTX_new (meth); CHK_NULL(ctx);SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER,NULL); /*验证与否*/SSL_CTX_load_verify_locations(ctx,CACERT,NULL); /*若验证,则放置CA证书*/if (SSL_CTX_use_certificate_file(ctx, CERTF, SSL_FILETYPE_PEM) = 0) ERR_print_errors_fp(stderr);exit(-2);if (SSL_CTX_use_PrivateKey_file(ctx, KEYF, SSL_FILETYPE_PEM) = 0) ERR_print_errors_fp(stderr);exit(-3);if (!SSL_CTX_check_private_key(ctx) printf(Private key does not match the certificate public keyn);exit(-4); /*构建随机数生成机制,WIN32平台必需*/srand( (unsigned)time( NULL ) );for( int i = 0; i 0)presult = (char*) malloc(nresult + 1);err = SSL_read(ssl, presult, nresult);if ( err = nresult)presultnresult = 0;/CHK_SSL(err);printf (server:%sn, presult);free(presult);/SSL_write(ssl, 1, 1);while(strcmp(buf,bye);SSL_shutdown (ssl); /* send SSL/TLS close_notify */* 收尾工作 */shutdown (sd,2);SSL_free (ssl);SSL_CTX_free (ctx); system(pause);return 0;Server:/modify by zhangxuan/2009-10-8#include #include #include #include #include #ifdef WIN32#include #else /* Networking headers */#include /* struct sockaddr_in */#include /* getpeername */#include /* inet_ntoa */#include /* select */#include /* ioctl */#include #include #include #ifndef INADDR_ANY#define INADDR_ANY (u32)0x00000000#endif#ifndef INADDR_LOOPBACK#define INADDR_LOOPBACK (u32)0x7F000001#endifextern int errno;#define get_last_socket_error() errno#define get_last_error() errno#define readsocket(s,b,n) read(s),(b),(n)#define writesocket(s,b,n) write(s),(b),(n)#define closesocket(s) close(s)#define ioctlsocket(a,b,c) ioctl(a),(b),(c)#include globalmem.h#endif#include openssl/rsa.h #include openssl/crypto.h#include openssl/x509.h#include openssl/pem.h#include openssl/ssl.h#include openssl/err.h/*所有需要的参数信息都在此处以#define的形式提供*/#define CERTF server.crt /*服务端的证书(需经CA签名)*/#define KEYF server.key /*服务端的私钥(建议加密存储)*/#define CACERT ca.crt /*CA 的证书*/#define PORT 4433 /*准备绑定的端口*/#define CHK_NULL(x) if (x)=NULL) exit (1)#define CHK_ERR(err,s) if (err)=-1) perror(s); exit(1); #define CHK_SSL(err) if (err)=-1) ERR_print_errors_fp(stderr); exit(2); int main ()int err;int listen_sd;int sd;struct sockaddr_in sa_serv;struct sockaddr_in sa_cli;int client_len;SSL_CTX* ctx;SSL* ssl;X509* client_cert;char* str;char buf 4096;SSL_METHOD *meth;#ifdef WIN32WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)printf(WSAStartup()fail:%dn,GetLastError();return -1;#endifSSL_load_error_strings(); /*为打印调试信息作准备*/OpenSSL_add_ssl_algorithms(); /*初始化*/meth = TLSv1_server_method(); /*采用什么协议(SSLv2/SSLv3/TLSv1)在此指定*/ctx = SSL_CTX_new (meth); CHK_NULL(ctx);SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER,NULL); /*验证与否*/SSL_CTX_load_verify_locations(ctx,CACERT,NULL); /*若验证,则放置CA证书*/if (SSL_CTX_use_certificate_file(ctx, CERTF, SSL_FILETYPE_PEM) = 0) ERR_print_errors_fp(stderr);exit(3);if (SSL_CTX_use_PrivateKey_file(ctx, KEYF, SSL_FILETYPE_PEM) = 0) ERR_print_errors_fp(stderr);exit(4);if (!SSL_CTX_check_private_key(ctx) printf(Private key does not match the certificate public keyn);exit(5);SSL_CTX_set_cipher_list(ctx,RC4-MD5); /*开始正常的TCP socket过程.*/printf(Begin TCP socket.n);listen_sd = socket (AF_INET, SOCK_STREAM, 0); CHK_ERR(listen_sd, socket);memset (&sa_serv, 0, sizeof(sa_serv);sa_serv.sin_family = AF_INET;sa_serv.sin_addr.s_addr = INADDR_ANY;sa_serv.sin_port = htons (PORT); err = bind(listen_sd, (struct sockaddr*) &sa_serv,sizeof (sa_serv); CHK_ERR(err, bind);/*接受TCP链接*/err = listen (listen_sd, 5); CHK_ERR(err, listen);client_len = sizeof(sa_cli);#ifdef WIN32sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len);#elsesd = accept(listen_sd, (struct sockaddr *)&sa_cli, (socklen_t*)&client_len);#endifCHK_ERR(sd, accept);closesocket (listen_sd);printf (Connection from %lx, port %xn,sa_cli.sin_addr.s_addr, sa_cli.sin_port);/*TCP连接已建立,进行服务端的SSL过程. */printf(Begin server side SSLn);ssl = SSL_new (ctx); CHK_NULL(ssl);SSL_set_fd (ssl, sd);err = SSL_accept (ssl);printf(SSL_accept finishedn);CHK_SSL(err);/*打印所有加密算法的信息(可选)*/printf (SSL connection using %sn, SSL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 版权转让合同
- Unit 6 Lesson 36 教学设计 冀教版八年级英语上册
- 2025年新能源汽车行业反垄断合规风险前瞻报告
- 2025年分布式新能源在能源互联网中的应用与创新研究报告
- 中暑预案应急演练
- 2025年新能源行业安全管理新技术研发与应用前景分析
- 七年级英语上册 Unit 8 When is your birthday Section A 2a-3c说课稿(新版)人教新目标版
- 河湖洪涝风险防控与安全保障
- 2025年新能源企业数字化转型中的数字化转型风险评估报告
- 2025年氢能基础设施建设投融资风险控制与案例分析报告
- 武汉从业资格证摸拟考试及答案解析
- 创新驱动人工智能+法律服务研究报告
- 《物联网技术》课件-第3章 无线传感器网络
- 保健行业员工知识培训课件
- 人民调解员培训课件
- 网约车全国公共科目考试题库与答案
- 胃手术并发症及处理
- 2025至2030 中国热成型钢(PHS)行业现状调查与前景策略研究报告
- 培训机构教务老师工作计划
- 《探索人工智能:机器翻译课件解析》
- 门机控制器调试手册
评论
0/150
提交评论