- 1、本文档共115页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ssl连接建立过程分析
目录
1. 应用程序接口 2
1.1 SSL初始化 2
1.2 建立SSL新连接 3
1.3 SSL通信 3
1.4 SSL释放 4
2. SSL实现分析 4
2.1 SSL_load_error_strings 4
2.2 SSLeay_add_ssl_algorithms() 5
2.3 SSL23_server_method() 7
2.4 SSL23_client_method() 11
2.5 SSL_CTX_new () 12
2.6 SSL_CTX_set_default_passwd_cb[_userdata]() 18
2.7 SSL_CTX_use_certificate_file() 19
2.8 SSL_CTX_use_PrivateKey_file() 21
2.9 SSL_CTX_check_private_key() 22
2.10 SSL_new 23
2.11 SSL_set_fd 29
2.12 SSL_accept 30
2.13 SSL_connect 58
2.14 SSL_read 79
2.15 SSL_write 103
2.16 SSL_free 113
3. 结论 115
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@
来源:
1. 应用程序接口
1.1 SSL初始化
SSL_CTX* InitSSL(int server, char *cert, char *key, char *pw)
{
SSL_CTX* ctx;
SSL_METHOD *meth;
int status;
// 算法初始化
// 加载SSL错误信息
SSL_load_error_strings();
// 添加SSL的加密/HASH算法
SSLeay_add_ssl_algorithms();
// 服务器还是客户端
If(server)
meth = SSLv23_server_method();
else
meth = SSLv23_client_method();
// 建立新的SSL上下文
ctx = SSL_CTX_new (meth);
if(!ctx) return NULL;
// 设置证书文件的口令
SSL_CTX_set_default_passwd_cb_userdata(ctx, pw);
//加载本地证书文件
status=SSL_CTX_use_certificate_file(ctx, cert, SSL_FILETYPE_ASN1);
if (status = 0) {
frintf(stderr, Use cert fail, status=%d\n, status);
goto bad;
}
// 加载私钥文件
if (SSL_CTX_use_PrivateKey_file(ctx, key, SSL_FILETYPE_PEM) = 0) {
fprintf(stderr, Use private key fail\n);
goto bad;
}
// 检查证书和私钥是否匹配
if (!SSL_CTX_check_private_key(ctx)) {
fprintf(Private key does not match the certificate public key\n);
goto bad;
}
fprintf(Cert and key OK\n);
return ctx;
bad:
SSL_CTX_free (ctx);
return NULL;
}
1.2 建立SSL新连接
服务器:
// 建立SSL
ssl = SSL_new (ctx);
// 将SSL与TCP socket连接
SSL_set_fd (ssl, sd);
//接受新SSL连接
err = SSL_accept (ssl);
客户端:
// 建立SSL
ssl = SSL_new (ctx);
// 将SSL与TCP socket连接
SSL_set_fd (ssl, sd);
// SSL连接
err = SSL_connect (ssl);
服务器的SSL_accept()和客户端的SSL_connect()函数共同完成SSL的握手协商过程。
1.3 SSL通信
和普通的read()/
您可能关注的文档
最近下载
- 医院内部控制管理手册.pdf VIP
- 2025江苏徐州云龙区翠屏山街道残疾人之家管理服务人员岗位招聘1人备考试题及答案解析.docx VIP
- 协会标准-TCECS 1113-2022给水排水工程微型顶管技术规程.pdf VIP
- 2025江苏徐州云龙区翠屏山街道残疾人之家管理服务人员岗位招聘1人笔试模拟试题及答案解析.docx VIP
- 施工HSE作业指导书.doc VIP
- 嘉兴市英语六年级小升初期末复习试卷.doc VIP
- 标准图集-08D800-7-民用电气设计与施工-室外布线.pdf VIP
- 中等职业学校三年发展规划2024-2026学年.docx VIP
- 场地租赁协议场地租赁合同.doc VIP
- 2025江苏徐州云龙区翠屏山街道残疾人之家管理服务人员岗位招聘1人笔试备考试题及答案解析.docx VIP
文档评论(0)