版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、力刀刀刀目录一、背景描述 1二、实验环境 1三、总体概述 四、实验过程及结果分析五、详细设计 六、测试 七、心得体会 参考文献 一、背景知识描述CA拥有一个证书(内含公钥和私钥)。网上的公众用户通过验证CA的签字从而信任 CA,任何人都可以得到CA的证书(含公钥),用以验证它所签发的证书。数字证书在用户公钥后附加了用户信息及CA的签名。公钥是密钥对的一部分,另一部分是私钥。公钥公之于众,谁都可以使用。私钥只有自己知道。由公钥 加密的信息只能由与之相对应的私钥解密。为确保只有某个人才能阅读自己的信 件,发送者要用收件人的公钥加密信件;收件人便可用自己的私钥解密信件。同样,为证实发件人的身份,发送
2、者要用自己的私钥对信件进行签名;收件人可使用发送 者的公钥对签名进行验证,以确认发送者的身份。它能保证用户之间在网上传递信 息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实 性进行验证,也需要有一个具有权威性、公正性、唯一性的机构,负责向电子商务 的各个主体颁发并管理符合国内、国际安全电子交易协议标准的电子商务安全证, 并负责管理所有参与网上交易的个体所需的数字证书。二、实验环境Windows XP、Visual C+ 6.0、openssl三、总体概述程序分为两部分,客户端和服务器端,我们的目的是利用openssl开发包编写建立在SSL上的C/S程序,利用SSL/TL
3、S的特性保证通信双方能够互相验证对方身份(真实性),并保证数据的完整性,私密性。以达到对其传输信息进行加密。功能结构图:ServerClie nt四、实验过程及对结果的分析1、建立openssl环境二LSI 至des-ofbde*3desxideaidea-ebebidea-ecbIdea-oFbrc2rc2-40-cberc2-ifc4-chcre2-chcpc2-cfbFc2=ecbre20if hrc4re4-40rc5pc5-匚berc5-cfbrcS-ecbrcS-ofb东? C: MlID0VSsyst32CID. ezeOpenS-SL pkcs!2e : hj Mmi/kejy
4、i. pf x -out e: MijXmi/pem.pemEi*ror apenlng inpuiC file e t Xhjniyl pkcsl2 一in e : ij123pf x -out e : hj Mnypein. pern Enter Import Password:MAC iierif ied OKEnter PEE pass phraseUei*if - Enter PEM pass phraseOpenSL quitE: XWLopenssl-B.S .7bopenssl-0.9 .?boLit32d!ll2、下载CA证书并对其进行分割3、编写server端程序及编写cl
5、ient端程序4、利用证书,对通信进行加密 验证实验结果:E: 2009214935 胡静IL op enssl-0 op enssl-0. 9 Tbout32 dll MJ ebueSSL cl i. eze SSL connection us in g DES-CBC3-MD5Seiuer cert if icate :subject: ZCN=HUJINGissuer: /CN=cquptGot 11 chars:JI heap you-1这是连接成功服务器端的程序匸E: 2009214935胡静ILopenssl-0openssl-03 Tbout32dllDebueSSL cli.
6、exe connect: No evropPress any key to continue这是连接成功客户端的程序)五、详细设计主要代码块的说明:1、程序结构客户端程序的框架为 :/*生成一个SSL结构*/meth = SSLv23_client_method();ctx = SSL_CTX_new (meth); ssl = SSL_new(ctx);/* 下面是正常的 TCP socket 过程 */ printf(Begin tcp socket.n);sd = socket (AF_INET, SOCK_STREAM, 0); CHK_ERR(sd, socket);memset (
7、&sa, , sizeof(sa);sa.sin_family = AF_INET;= inet_addr (SERVER_ADDR); /* Server IP */ sa.sin_port = htons (PORT); /* Server Port number */err = connect(sd, (struct sockaddr*) &sa, sizeof(sa);CHK_ERR(err, connect);/* TCP 链接已建立 .开始 SSL 握手过程 */printf(Begin SSL negotiation n);ssl = SSL_new (ctx);CHK_NULL
8、(ssl);SSL_set_fd (ssl, sd);err = SSL_connect (ssl);CHK_SSL(err);/*把建立好的socket和SSL结构联系起来*/SSL_set_fd(ssl,fd);/* 数据交换开始 ,用 SSL_write,SSL_read 代替 write,read */ printf(Begin SSL data exchangen);err = SSL_write (ssl, Hello World!, strlen(Hello World!); CHK_SSL(err);err = SSL_read (ssl, buf, sizeof(buf) -
9、 1); CHK_SSL(err);)buferr = ;printf (Got %d chars:%sn, err, buf);SSL_shutdown (ssl); /* send SSL/TLS close_notify */服务端程序的框架为 :/*生成一个SSL结构*/meth = SSLv23_server_method(); ctx = SSL_CTX_new (meth); ssl = SSL_new(ctx);/*接受 TCP 链接*/ err = listen (listen_sd, 5); CHK_ERR(err, listen); client_len = sizeof
10、(sa_cli);sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len); CHK_ERR(sd, accept);/*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); /*把建立好的socket和SSL结构联
11、系起来*/ SSL_set_fd(ssl,fd);/* 数据交换开始 ,用 SSL_write,SSL_read 代替 write,read */ err = SSL_read (ssl, buf, sizeof(buf) - 1);CHK_SSL(err);buferr = ;printf (Got %d chars:%sn, err, buf);err = SSL_write (ssl, I hear you., strlen(I hear you.); CHK_SSL(err);2、根据 RFC2246(TLS1.0)整个TLS(SSL)的流程如下:Client Server)Clien
12、tHello ServerHelloCertificate*ServerKeyExchange*CertificateRequest*ChangeCipherSpec FinishedApplication Data Application Data对程序来说 ,openssl 将整个握手过程用一对函数体现 ,即客户端的 SSL_connect 和服务端的SSL_accept. 而后的应用层数据交换则用 SSL_read 和 SSL_write 来完成 .函数介绍:1、 int SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);根据SSL/T
13、LS规范,在ClientHello中,客户端会提交一份自己能够支持的加密方法的列表, 由服务端选择一种方法后在 ServerHello 中通知服务端 , 从而完成加密算法的协商 . 可用的算法有 :EDH-RSA-DES-CBC3-SHAEDH-DSS-DES-CBC3-SHADES-CBC3-SHADHE-DSS-RC4-SHAIDEA-CBC-SHARC4-SHARC4-MD5我们在程序中选用了 RC4做加密,MD5做消息摘要(先进行MD5运算后进行RC4加密).即 SSL_CTX_set_cipher_list(ctx,RC4-MD5);2、int SSL_CTX_load_verify
14、_locations(SSL_CTX *ctx, const char *CAfile,const char *CApath); 要验证对方的话,当然装要有CA的证书了,此函数用来便是加载 CA的证书文件的.3、int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); 加载自己的证书文件 .4、int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); 加载自己的私钥 ,以用于签名 .5、int SSL_CTX_
15、check_private_key(SSL_CTX *ctx);)调用了以上两个函数后 ,自己检验一下证书与私钥是否配对 .6、OpenSSL_add_ssl_algorithms() 或 SSLeay_add_ssl_algorithms() 其实都是调用 int SSL_library_init(void)进行一些必要的初始化工作 ,用 openssl 编写 SSL/TLS 程序的话第一句便应是它 .7、void SSL_load_error_strings(void ); 如果想打印出一些方便阅读的调试信息的话,便要在一开始调用此函数 .8、void ERR_print_errors_f
16、p(FILE *fp);如果调用了 SSL_load_error_strings() 后 ,便可以随时用 ERR_print_errors_fp() 来打印错误信息 了.9、X509 *SSL_get_peer_certificate(SSL *s);握手完成后 ,便可以用此函数从 SSL 结构中提取出对方的证书 (此时证书得到且已经验证过 了)整理成 X509 结构 .六、测试测试通信是否已经加密的方法:使用网络监视器来验证在应用程序服务器与数据库服 务器之间传送的数据是否已加密。首先以明文形式发送数据,然后通过先配置服务器, 再配置客户端来启用加密。七、心得体会在实验中,我感受到 openssl 是 sslv2,sslv3,tlsv1 的一份完整实现 ,内部包含了大量加 密算法程序 .其命令行提供了丰富的加密 ,验证 ,证书生成等功能 ,甚至可以用其建立一个完 整的CA.与其同时,它也提供了一套完整的库函数,可用开发用SSL/TLS的通信程序我们这几天的实训内容是“ CA证书服务器的建立与使用”,在开始的申请证书、导 出包含公私钥
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中控协议书音量加减反向
- 精神分裂症的药物治疗与护理策略
- 大学柔韧素质及其训练
- 甲状腺影像分级解读
- 2026四川安和精密电子电器股份有限公司招聘电控硬件工程师等岗位3人备考题库及一套完整答案详解
- 老年人智能手机社区
- 2026江西省妇幼保健院产科科研助理招聘2人备考题库及答案详解参考
- 2026福建南平市消防救援局招聘政府专职消防员19人备考题库及答案详解【网校专用】
- 骨科护理新思维
- 医学影像技术及临床应用
- 机械制造技术基础 课件 5.2 影响机械加工精度的因素
- 产品经销协议书
- DB32∕T 5188-2025 经成人中心静脉通路装置采血技术规范
- GB/T 9641-2025硬质泡沫塑料拉伸性能的测定
- 《医疗器械不良事件监测和再评价管理办法》培训试卷+参考答案
- 金融专题党课
- 泊寓框架协议书
- GB/T 41780.4-2025物联网边缘计算第4部分:节点技术要求
- 汽车驾驶员高级工考试题库及答案
- 2025届高考语文专项修改病句专题练习含答案
- 大学英语四级(仔细阅读)专项练习试卷1(共225题)
评论
0/150
提交评论