什么是SSL连接

SSL 的英文全称是 “Secure Sockets Layer” ,中文名为 “ 安全套接层协议层 ” ,它是网景( Netscape )公司提出的基于 WEB 应用的安全协议。 SSL 协议指定了一种在应用程序协议(如 HTTP 、 Telenet 、 NMTP 和 FTP 等)和 TCP/IP 协议之间提供数据安全性分层的机制,它为 TCP/IP 连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。

SSL是在Web服务器和Web客户机之间建立经过身份验证和加密会话的Web协议。SSI。以首先建立TCP/IP连接的握手例行程序开始。接着,通过验证服务器的公钥为客户机验证服务器。一旦通过验证,服务器即会选择客户机和服务器都支持的并在具体的国家/地区所实施的限制内的最强密码算法。下一步将生成用来对上述客户机和服务器之间的所有数据流进行加密的共享密钥。最终,一个加密的SSL,连接便建立了。 如上所述,在客户机和服务器之间发送的所有信息都经过加密,包括所有的HTTP请求和响应以及客户机请求的URL。该级别的加密可确保信用卡号、访问授权信息(用户名)以及服务器返回的敏感数据等敏感信息的保护。 因为加密需要大量的计算,所以SSL.会话通常仅用于敏感信息的传输。ssl证书申请

SSL连接详情

下面主要介绍openssl进行SSL通信的一些函数以及过程,主要是初始化过程,至于数据的接收以及后续处理可以具体问题具体分析。
load所有的SSL算法
OpenSSL_add_ssl_algorithms();
建立SSL所用的method
SSL_METHOD *meth=SSLv23_method();
初始化上下文情景
SSL_CTX *ctx=SSL_CTX_new(meth);
ret->quiet_shutdown=1;默认的是ret->quiet_shutdown=0;他相当于SSL_set_shutdown函数将参数设置为SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN
当设置为1时,假如关闭后,不通知对方,这样不适合TLS标准
SSL_CTX_set_quiet_shutdown(ctx,1);
ctx->options|=SSL_OP_ALL,SSL/TLS有几个公认的bug,这样设置会使出错的可能更小
SSL_CTX_set_options(ctx,SSL_OP_ALL);
设置cache的大小,默认的为1024*20=20000,这个也就是可以存多少个session_id,一般都不需要更改的。假如为0的话将是无限
SSL_CTX_sess_set_cache_size(ctx,128);
SSL_CTX_load_verify_locations用于加载受信任的CA证书,CAfile如果不为NULL,则他指向的文件包含PEM编码格式的一个或多个证书,可以用e.g.来简要介绍证书内容
CApath如果不为NULL,则它指向一个包含PEM格式的CA证书的目录,目录中每个文件包含一份CA证书,文件名是证书中CA名的HASH值
可以用c-rehash来建立该目录,如cd /some/where/certs(包含了很多可信任的CA证书) c_rehash .。返回一成功,0 失败。SSL_CTX_set_default_verify_paths找寻默认的验证路径,在这里肯定找不到的。
这里主要set cert_store
char *CAfile=NULL,*CApath=NULL;
SSL_CTX_load_verify_locations(ctx,CAfile,CApath);
当需要客户端验证的时候,服务器把CAfile里面的可信任CA证书发往客户端。
if(CAfile !=NULL )SSL_CTX_set_client_CA_list(ctx,SSL_load_client_CA_file(CAfile));
设置最大的验证用户证书的上级数。
SSL_CTX_set_verify_depth(ctx,10);
当使用RSA算法鉴别的时候,会有一个临时的DH密钥磋商发生。这样会话数据将用这个临时的密钥加密,而证书中的密钥中做为签名。
所以这样增强了安全性,临时密钥是在会话结束消失的,所以就是获取了全部信息也无法把通信内容给解密出来。
static unsigned char dh512_p[]={
0xDA,0x58,0x3C,0x16,0xD9,0x85,0x22,0x89,0xD0,0xE4,0xAF,0x75,
0x6F,0x4C,0xCA,0x92,0xDD,0x4B,0xE5,0x33,0xB8,0x04,0xFB,0x0F,
0xED,0x94,0xEF,0x9C,0x8A,0x44,0x03,0xED,0x57,0x46,0x50,0xD3,
0x69,0x99,0xDB,0x29,0xD7,0x76,0x27,0x6B,0xA2,0xD3,0xD4,0x12,
0xE2,0x18,0xF4,0xDD,0x1E,0x08,0x4C,0xF6,0xD8,0x00,0x3E,0x7C,
0x47,0x74,0xE8,0x33,
};
static unsigned char dh512_g[]={0x02,};
DH *dh=DH_new();
dh->p=BN_bin2bn(dh512_p,sizeof(dh512_p),NULL);
dh->g=BN_bin2bn(dh512_g,sizeof(dh512_g),NULL);
SSL_CTX_set_tmp_dh(ctx,dh);
下面加载服务器的证书和私钥,私钥可以和证书在一个文件之中。判断私钥和证书是否匹配。
char *s_cert_file=”server.pem”;
char *s_key_file=NULL;
SSL_CTX_use_certificate_file(ctx,s_cert_file,SSL_FILETYPE_PEM);
获取私钥之前先把私钥的密码给写上
char *pKeyPasswd=”serve”;
SSL_CTX_set_default_passwd_cb_userdata(ctx, pKeyPasswd);
SSL_CTX_use_PrivateKey_file(ctx,s_cert_file,SSL_FILETYPE_PEM);
SSL_CTX_check_private_key(ctx);
设置一个临时的RSA,在出口算法中,有规定需要这么做的。
RSA *rsa=RSA_generate_key(512,RSA_F4,NULL,NULL);
SSL_CTX_set_tmp_rsa(ctx,rsa);
用于设置验证方式。s_server_verify是以下值的逻辑或
SSL_VERIFY_NONE表示不验证,SSL_VERIFY_PEER用于客户端时要求服务器必须提供证书,用于服务器时服务器会发出证书请求消息要求客户端提供证书,但是客户端也可以不提供
SSL_VERIGY_FAIL_IF_NO_PEER_CERT只适用于服务器且必须提供证书。他必须与SSL_VERIFY_PEER一起使用
当SSL_VERIFY_PEER被设置时verify_callback可以控制验证的行为。任何一个验证失败信息都会终止TLS连接
static int s_server_verify=SSL_VERIFY_NONE;
SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER,NULL/*verify_callback*/);
为了从自己本身的程序中产生一个session_id,所以要给本程序设定一个session_id_context,否则程序从外部获取session_id_context来得到session_id,那很容易产生错误
长度不能大于SSL_MAX_SSL_SESSION_ID_LENGTH
const unsigned char s_server_session_id_context[100]=”1111asdfd”;
SSL_CTX_set_session_id_context(ctx,s_server_session_id_context,sizeof s_server_session_id_context);


SSL连接是什么意思相关推荐

  1. mysql cert_Mysql使用SSL连接

    最近项目中用到了SSL连接,记录一下,环境为windows10,Mysql版本为5.6 查看是否支持 SSL 首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL: mysql&g ...

  2. haproxy ssl_我们如何微调HAProxy以实现2,000,000个并发SSL连接

    haproxy ssl by Sachin Malhotra 由Sachin Malhotra 我们如何微调HAProxy以实现2,000,000个并发SSL连接 (How we fine-tuned ...

  3. SSL连接并非完全问题解决

    教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)SSL 连接并非完全安全问题解决. 更多讨论或者错误提交,也请移步. 最近拿到了 TrustAsia ...

  4. Foxmail: 错误信息::ssl连接错误, errorCode: 5,各种解决方案的大杂烩。

    Foxmail: 错误信息::ssl连接错误, errorCode: 5,各种解决方案的大杂烩. 参考文章: (1)Foxmail: 错误信息::ssl连接错误, errorCode: 5,各种解决方 ...

  5. 使用 JSSE 定制 SSL 连接的属性--转载

    当数据在网络上传播的时候,通过使用 SSL 对其进行加密和保护,JSSE 为 Java 应用程序提供了安全的通信.在本篇有关该技术的高级研究中,Java 中间件开发人员 Ian Parkinson 深 ...

  6. mysql服务器证书验证提供信任库_连接到MySQL数据库时有关SSL连接的警告

    连接到MySQL数据库时有关SSL连接的警告 通过以下两个类,我尝试连接到MySQL数据库.但是,我总是得到这个错误:Wed Dec 09 22:46:52 CET 2015 WARN:不建议在没有服 ...

  7. java ssl证书_Java安全教程–创建SSL连接和证书的分步指南

    java ssl证书 在有关应用JEE安全性的系列文章中,我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程. 如我们之前的文章中所述, 安全套接字层(SSL)/ ...

  8. Java安全教程–创建SSL连接和证书的分步指南

    在有关应用JEE安全性的系列文章中,我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程. 如我们之前的文章中所述, 安全套接字层(SSL)/传输层安全性(TLS) ...

  9. MySQL启用SSL连接

    1.手动创建自认证证书 1.1 创建CA证书 openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3600 ...

  10. 华为云GuassDB(for Redis)发布全新版本推出:Lua脚本和SSL连接加密

    摘要:9月8日,华为云GuassDB(for Redis)正式推出全新版本.新版本内核带来性能提升.无损升级.慢日志统计等多维度产品体验,同时推出Lua脚本和SSL连接加密两大重要功能,让业务设计更加 ...

最新文章

  1. JSP+Servlet + JDBC 实现简单的登录验证模块
  2. Ubuntu 编译安装python3.7
  3. 忽略某些文件 —— Git 学习笔记 05
  4. 利用FRIDA攻击Android应用程序(一)
  5. nginx在linux自动启动脚本,nginx的自动启动脚本
  6. 超级计算机的英语作文80字,英语作文_为什么这台超级计算机如此快? (有声) _沪江英语...
  7. Python实战从入门到精通第十三讲——返回多个值的函数
  8. Spring Boot+Vaadin 14项目初始化
  9. win7系统添加wifi连接到服务器,win7系统设置域账号连接企业内部域wifi的具体方法...
  10. Qt Style Sheets Reference Qt css 样式属性列表[官版]
  11. 一个正经的前端学习 开源 仓库(阶段二十一)
  12. 高效记忆/形象记忆(10)110数字编码表 41-50
  13. Windows10更新工具
  14. 航空三字代码表_目前最全的航空城市三字代码表
  15. 给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1,N=3时,S=1+11+111=123。
  16. 排列组合C几几怎么算
  17. HTML5印章绘制电子签章图片,中文英文椭圆章、中文英文椭圆印章
  18. MySQL的查询及删除重复记录
  19. Java8获取年、月、周数据和某一天的开始结束时间
  20. PHP:ThinkPHP

热门文章

  1. c语言中文网GUI,golang gui介绍
  2. Matlab对语音信号做fft及对语音信号进行分帧加窗
  3. web项目的中英文切换功
  4. java 斑马_java调用斑马GK888t打印机(ZPL指令)
  5. Linux下编译链接动态库符号问题
  6. 无人机航拍全景图这些事情一定要知道
  7. 数字签名与数字加密的区别
  8. PCB封装欣赏了解之旅(上篇)—— 常用元器件
  9. 西安交大计算机录取分数线,2017年西安交通大学各省录取分数线
  10. JetSmartFilters: 如何制作搜索过滤器(1) 使用Jet-Engine