竭诚为您提供优质文档/双击可除ssl协议未开启如何处理篇一:ssl协议_openssl_附代码ssl协议1实验原理1.1ssl协议ssl(securesocketlayer,安全套接字层)在通信双方间建立了一个传输层安全通道,它使用对称加密来保证通信保密性,使用消息认证码(mac)来保证数据完整性,并且在建立连接时主要使用pki对通信双方进行身份认证。
netscapenavigator和internetexplorer都支持ssl。
1.2ssl协议的分层结构ssl协议基于c/s(client/server)模式,位于tcp/ip 协议与各种应用层协议之间,为数据通信提供安全支持。
它可分为两层:1.ssl记录协议(sslRecordprotocol)它建立在可靠的传输控制协议(如tcp)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
2.ssl握手协议(sslhandshakeprotocol)它建立在ssl记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。
作为分层的协议,在每一层,消息可以包含长度、描述和内容字段。
ssl发出消息,先把数据分成可管理的块,然后压缩、加密并发出加密后的结果。
接收消息后进行解密、验证、解压和重组,再把结果发往更高一层的客户。
1.3ssl握手协议ssl握手协议的作用是在正式的秘密通信之前,让服务器和客户之间互相鉴别对方的身份并协商一种会话的加密算法和加密密钥,主要可分为以下两个方面:(1)客户端和服务器端之间互相验证身份c/s主要是通过证书来验证,首先通过对方证书中权威发证机构签字的验证,来确定对方拥有的证书是否有效。
如果证书有效,接着就从这个证书中提取出公钥,通过对方的签名验证用户是不是假冒的。
如果二者都通过,则证明对方的身份是真实可信的。
其中服务器对客户端的验证是可选的。
(2)客户端和服务器之间协商安全参数协商的参数一般包括协议的版本号、密钥交换算法、数据加密算法和hash算法,通过协商达成一致性。
其中版本号一般要求一致。
关于密钥交换算法和数据加密算法,是先由客户端向服务器端发送一个列表,其中详细列举了客户端所支持的算法,然后由服务器端从中选取自己支持且加密性能优良的算法,将其返回给客户端,至此完成了算法的协商;最后由客户端随机产生一个用于数据加密的对称密钥,用一种商议好的密钥交换协议将它传给服务器端。
ssl支持的密钥交换算法有Rsa密钥交换和diffie-hellman密钥交换两种。
ssl握手协议顺序图2实验内容2.1实验环境1、win72、Vs20xx3、openssl函数库2.2实验代码2.2.1server端//ssl_server.cpp:定义控制台应用程序的入口点。
////server#include"stdafx.h"#include#include#include#include"openssl/x509.h"#include"openssl/ssl.h"#include"openssl/err.h"#definemsglength1024#definepoRt8888#definecaceRt"./private/ca.crt"#definesVRceRtF"./certs/server.crt" #definesVRkeyF"./private/server.key" #pragmacomment(lib,"wsock32.lib")#pragmacomment(lib,"libeay32.lib") #pragmacomment(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));//加载服务器端的证书if(!ssl_ctx_use_certificate_file(ctx,sVRceRtF,ssl_F iletype_pem)){eRR_print_errors_fp(stderr);exit(1);}//加载服务器端的私钥if(!ssl_ctx_use_privatekey_file(ctx,sVRkeyF,ssl_Fil etype_pem)){eRR_print_errors_fp(stderr);exit(1);}//检查服务器端的证书和私钥是否匹配if(!ssl_ctx_check_private_key(ctx)){printf("\n\n私钥与证书公钥不匹配!\n");exit(1);}//加密方式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){printf("\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;//绑定sockintnResult=bind(sock,(sockaddr*)if(nResult==socket_eRRoR){printf("\n\n绑定socket有问题.\n");return0;}/*接受tcp链接*/sockaddr_insa_cli;interr=listen(sock,5);if(-1==err)exit(1);intclient_len=sizeof(sa_cli);intss=accept(sock,(structsockaddr*)if(ss==-1){exit(1);}closesocket(sock);printf("\n连接端口:%d,port%d\n",sa_cli.sin_addr.s_addr,sa_cli.sin_ port);/*tcp链接已建立.开始ssl握手过程..........................*///绑定套接字ssl=ssl_new(ctx);if(null==ssl)exit(1);if(!ssl_set_fd(ssl,ss)){printf("\n连接失败!\n");exit(1);}//ssl握手//ssl_accept(ssl);intk=ssl_accept(ssl);if(k!=1){printf("%d\n",k);printf("\n连接失败!\n");exit(1);}//进行信息验证x509*client_cert;client_cert=ssl_get_peer_certificate(ssl);printf("\n**************************************\n" );printf("\n服务器启动成功,端口:%d\n\n等待连接.....\n",poRt);篇二:ssl协议1、引言ssl是一种在客户端和服务器端之间建立安全通道的协议。
ssl一经提出,就在internet上得到广泛的应用。
ssl 最常用来保护web的安全。
为了保护存有敏感信息web的服务器的安全,消除用户在internet上数据传输的安全顾虑。
openssl是一个支持ssl认证的服务器.它是一个源码开放的自由软件,支持多种操作系统。
openssl软件的目的是实现一个完整的、健壮的、商业级的开放源码工具,通过强大的加密算法来实现建立在传输层之上的安全性。
openssl包含一套ssl协议的完整接口,应用程序应用它们可以很方便的建立起安全套接层,进而能够通过网络进行安全的数据传输。
2、ssl协议概述ssl是securesocketlayer英文缩写,它的中文意思是安全套接层协议,指使用公钥和私钥技术组合的安全网络通讯协议。
ssl协议是网景公司(netscape)推出的基于web应用的安全协议,ssl协议指定了一种在应用程序协议(如http、telenet、nmtp和Ftp等)和tcp/ip协议之间提供数据安全性分层的机制,它为tcp/ip连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证,主要用于提高应用程序之间数据的安全性,对传送的数据进行加密和隐藏,确保数据在传送中不被改变,即确保数据的完整性。
ssl以对称密码技术和公开密码技术相结合,可以实现如下三个通信目标:(1)秘密性:ssl客户机和服务器之间传送的数据都经过了加密处理,网络中的非法窃听者所获取的信息都将是无意义的密文信息。
(2)完整性:ssl利用密码算法和散列(hash)函数,通过对传输信息特征值的提取来保证信息的完整性,确保要传输的信息全部到达目的地,可以避免服务器和客户机之间的信息受到破坏。