openssl开发过程中的一些总结
来源:互联网 发布:实时查询打车软件 编辑:程序博客网 时间:2024/05/22 21:22
1.从客户端到服务器的ssl连接的建立过程:
#define CERTFILE_PATH "/root/CA/client.pem"#define CERTKEY_PATH "/root/CA/clientkey.pem"#define CACERT_PATH "/root/CA/cacert.pem"初始化ssl库:
SSL_library_init();SSL_load_error_strings(); //提供将错误号解析为字符串的功能OpenSSL_add_all_algorithms(); //支持所有算法建立ssl上下文(CTX),并进行设置为建立SSL连接作准备:
SSL_METHOD* m_method = SSLv3_method();//SSLv3_client_method();if(NULL == m_method) return false;//根据SSL连接和验证方式建立CTXmSSL_CTX* m_ctx = SSL_CTX_new(m_method);if(NULL == m_ctx) return false;//载入CA证书if( SSL_CTX_load_verify_locations(m_ctx,CACERT_PATH, NULL) != 1 ){ return false;}//载入客户端证书if( SSL_CTX_use_certificate_file(m_ctx, CERTFILE_PATH, SSL_FILETYPE_PEM) != 1) return false;//载入certificate_chain_file,这是一个PEM格式的文件,里面依次为客户端证书和CA证书,必须以CA根证书为结尾if( SSL_CTX_use_certificate_chain_file(m_ctx,CERTCHAIN) != 1) return false;//为客户端私钥设置默认密码SSL_CTX_set_default_passwd_cb_userdata(m_ctx, (void *)CERTKEY_PW);//载入客户端私钥,如果在上面没有设置默认密码,调用这个函数时openssl会在终端提示用户手动输入密码if(SSL_CTX_use_PrivateKey_file(m_ctx,MLE_RES_CERTKEY_PATH, SSL_FILETYPE_PEM) !=1 ) return false; //检查客户端私钥和证书是否匹配 if( SSL_CTX_check_private_key(m_ctx) != 1 ) return false;//建立SSLSSL* m_ssl = SSL_new(m_ctx);if(NULL == m_ssl) return false;//绑定普通socket到ssl,这个普通socket必须是已经使用socket的connect函数链接成功了的if(SSL_set_fd(m_ssl, m_socket) == -1) return false;//使用SSL连接服务器SSL_connect(m_ssl);//获取连接到的服务器的证书信息,如果服务器不需要证书也会返回NULLX509 *x590test = SSL_get_peer_certificate(m_ssl);if(x590test == NULL ){ return false;}//获得服务器证书验证结果,X509_V_OK为验证通过if(SSL_get_verify_result(m_ssl) != X509_V_OK){ return false;}
- openssl开发过程中的一些总结
- openssl开发过程中的一些总结
- rails3.2 开发过程中的一些总结
- 关于Raphael开发过程中的一些总结
- swift 开发过程中的一些小总结
- iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结
- WebGame开发过程中的一些思考和总结
- [iphone] iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结[转载]
- iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结
- iPhone 开发过程中的一些小技术的总结
- windows下设置tomcat开机时启动
- Unicode下CString与char*的转换
- Windows GDI和GDI+区别(实例剖析)
- 响应式设计 CSS 技巧
- spring的下载与安装
- openssl开发过程中的一些总结
- 深入了解CLR的加载过程
- ORA-00018: maximum number of sessions exceeded
- java-当中的IO.(1)( 第32集)
- 用OpenSSL编写SSL,TLS程序 - Win32版
- textField 不能弹起键盘
- git 命令之 如何将本地新建分支推到服务器上
- 小小android程序之控件demo
- javafx TableColumn.CellDataFeatures