ssl协议实验代码Word格式文档下载.docx
《ssl协议实验代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ssl协议实验代码Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
接收消息后进行解密、验证、解压和重组,再把结果发往更高一层的客户。
1.3ssl握手协议
ssl握手协议的作用是在正式的秘密通信之前,让服务器和客户之间互相鉴别对方的身份并协商一种会话的加密算法和加密密钥,主要可分为以下两个方面:
(1)客户端和服务器端之间互相验证身份
c/s主要是通过证书来验证,首先通过对方证书中权威发证机构签字的验证,
来确定对方拥有的证书是否有效。
如果证书有效,接着就从这个证书中提取出公钥,通过对方的签名验证用户是不是假冒的。
如果二者都通过,则证明对方的身份是真实可信的。
其中服务器对客户端的验证是可选的。
(2)客户端和服务器之间协商安全参数
协商的参数一般包括协议的版本号、密钥交换算法、数据加密算法和hash算法,通过协商达成一致性。
其中版本号一般要求一致。
关于密钥交换算法和数据加密算法,是先由客户端向服务器端发送一个列表,其中详细列举了客户端所支持的算法,然后由服务器端从中选取自己支持且加密性能优良的算法,将其返回给客户端,至此完成了算法的协商;
最后由客户端随机产生一个用于数据加密的对称密钥,用一种商议好的密钥交换协议将它传给服务器端。
ssl支持的密钥交换算法有Rsa密钥交换和diffie-hellman密钥交换两种。
ssl握手协议顺序图
2实验内容
2.1实验环境
1、win72、Vs20xx
3、openssl函数库
2.2实验代码
2.2.1server端
//ssl_server.cpp:
定义控制台应用程序的入口点。
//
//server
#include"
stdafx.h"
#include
openssl/x509.h"
openssl/ssl.h"
openssl/err.h"
#definemsglength1024
#definepoRt8888
#definecaceRt"
./private/ca.crt"
#definesVRceRtF"
./certs/server.crt"
#definesVRkeyF"
./private/server.key"
#pragmacomment(lib,"
wsock32.lib"
)
libeay32.lib"
ssleay32.lib"
int_tmain(intargc,_tchaR*argv[])
{
wsadatawsadata;
wsastartup(makewoRd(2,2),
socketsock;
ssl_method*meth;
ssl_ctx*ctx;
ssl*ssl;
//ssl初始化
openssl_add_ssl_algorithms();
//ssl错误信息初始化
ssl_load_error_strings();
//创建本次会话所使用的协议
meth=(ssl_method*)tlsv1_server_method();
//申请ssl会话的环境
ctx=ssl_ctx_new(meth);
if(null
==ctx)
exit
(1);
//设置会话的握手方式并加载ca证书
ssl_ctx_set_verify(ctx,ssl_VeRiFy_peeR,null);
if(!
ssl_ctx_load_verify_locations(ctx,caceRt,null)){}printf("
%d\n\n下载ca证书出错!
\n"
ssl_ctx_load_verify_locations(ctx,caceRt,exit(-1);
null));
//加载服务器端的证书
ssl_ctx_use_certificate_file(ctx,sVRceRtF,ssl_Filetype_pem)){eRR_print_errors_fp(stderr);
}
//加载服务器端的私钥
ssl_ctx_use_privatekey_file(ctx,sVRkeyF,ssl_Filetype_pem)){eRR_print_errors_fp(stderr);
//检查服务器端的证书和私钥是否匹配
ssl_ctx_check_private_key(ctx)){
printf("
\n\n私钥与证书公钥不匹配!
);
//加密方式
ssl_ctx_set_cipher_list(ctx,"
Rc4-md5"
//处理握手多次
ssl_ctx_set_mode(ctx,ssl_mode_auto_RetRy);
/*以下是正常的tcpsocket建立过程..............................*/
sock=socket(aF_inet,sock_stReam,0);
if(sock==inValid_socket){
\n\nsocket有问题.\n"
return0;
sockaddr_inaddr;
memset(\0,sizeof(addr));
addr.sin_family=aF_inet;
addr.sin_port=htons(poRt);
/*serverportnumber*/
addr.sin_addr.s_addr=inaddR_any;
//绑定sock
intnResult=bind(sock,(sockaddr*)
if(nResult==socket_eRRoR){
\n\n绑定socket有问题.\n"
/*接受tcp链接*/
sockaddr_insa_cli;
interr=listen(sock,5);
if(-1==err)
intclient_len=sizeof(sa_cli);
intss=accept(sock,(structsockaddr*)
if(ss==-1){
closesocket(sock);
\n连接端口:
%d,port%d\n"
sa_cli.sin_addr.s_addr,sa_cli.sin_port);
/*tcp链接已建立.开始ssl握手过程..........................*/
//绑定套接字
ssl=ssl_new(ctx);
if(null==ssl)
ssl_set_fd(ssl,ss)){
\n连接失败!
//ssl握手
//ssl_accept(ssl);
intk=ssl_accept(ssl);
if(k!
=1){
%d\n"
k);
//进行信息验证
x509*client_cert;
client_cert=ssl_get_peer_certificate(ssl);
\n**************************************\n"
printf("
\n服务器启动成功,端口:
%d\n\n等待连接.....\n"
poRt);
篇二:
利用ssl实现安全数据传输实验报告
实验报告
专业计算机1001班级计算机1001
学号20xx20xx0122姓名曾怡君
实验题目利用ssl实现安全数据传输实验时间20xx.07.20
一、实验目的:
1.掌握数字证书的申请、安装过程。
2.通过配置web服务器的ssl功能进行安全的数据通信。
二、实验环境:
windowsserver20xx操作系统。
下载(拷贝)2k3ie8_sata_20xx09文件
安装windowsserver20xx-kb914961-sp2-x86-chs.exe
如需要,需安装iis,学校电脑有的
ps:
在做实验时,必须统一三台机子的时间。
三、实验内容:
1.安装证书管理软件和服务。
(记下此台机子的ip)
2.为web服务器申请和安装证书。
3.浏览器验证并访问安全的web站点。
四、实验步骤:
1.在实验之前先分清各主机扮演的角色以及工作过程,如图4-1。
www浏览器
图4-1assl角色分配图
图4-1bssl工作过程图
本实验是利用一个局域网上相互配合的3台主机协作完成。
其中主机一台扮演web浏览器,一台扮演web服务器,一台扮演证书颁发机构。
2..安装证书管理软件和服务。
安装证书管理软件和服务的步骤:
a.启动windows20xxserver网路操作系统,点击桌面的“开始|控制面板|添加或删除程序|添加/删除windows组件”命令进入“windows组件向导”对话框,如图4-2。
图4-2“windows组件向导”对话框
b.在“windows组件向导”对话框的组件列表中,选中“证书服务”选项,弹出证书服务警告,选择“是”按钮,单击“下一步”命令,进入“ca类型设置”对话框。
图4-3.“ca类型设置”对话框
c.选择“独立根ca”选项并在出现的“ca识别信息”对话框后键入ca公用名称、有效期限等有关信息,单击“下一步”,出现图4-3a,再下一步,弹出警告框,选择“是”按钮。
图4-3a.选择公钥/私钥对
图4-4.键入ca公用名称及后缀,有效期限默认为
图4-5“