您的位置:首页 > 其它

使用socket实现SSL安全访问介绍

2014-11-20 11:38 561 查看
最近看了点使用Openssl库函数进行socket安全访问的内容,小结如下:(1)代码流程如下图所示(2)交互流程(3)libssl的API介绍SSL库初始化——准备好可调用的函数,但函数都未调用,直到SSL上下文建立SSL_library_init()载入所有SSL算法OpenSSL_add_all_algorithms()载入所有SSL错误SSL_load_error_strings()选择SSL交互协议SSL_METHOD*TLSv1_server_method(void); /* TLSv1.0 */SSL_METHOD*TLSv1_client_method(void); /* TLSv1.0 */SSL_METHOD*SSLv2_server_method(void); /* SSLv2 */SSL_METHOD*SSLv2_client_method(void); /* SSLv2 */SSL_METHOD*SSLv3_server_method(void); /* SSLv3 */SSL_METHOD*SSLv3_client_method(void); /* SSLv3 */SSL_METHOD*SSLv23_server_method(void); /* SSLv3 but can rollback to v2 */SSL_METHOD *SSLv23_client_method(void); /* SSLv3 but can rollback to v2 */创建SSL上下文——可理解文创建一个SSL运行环境SSL_CTX* SSL_CTX_new(SSL_METHOD*sslmethod)载入用户的数字证书, 此证书用来发送给客户端。 证书里包含有公钥int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type)载入用户私钥int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type)检验一下证书与私钥是否配对intSSL_CTX_check_private_key(SSL_CTX *ctx)基于SSL上下文,新建一个SSL链接SSL* SSL_new(SSL_CTX* sslctx)将连接用户的 socket加入到 SSLSSL_set_fd(SSL*ssl, int sockfd)服务端sockfd需bind、listen和accept客户端sockfd需connect到服务器即SSL握手过程,是在普通的TCP建链完成后再进行的。服务端开启SSL会话SSL_accept(SSL* ssl)客户端启动SSL握手SSL_connect(SSL*ssl)SSL收包SSL_read(SSL* ssl,char*buffer,int MAXBUF)SSL发包SSL_write(SSL* ssl,char*buffer,int buf_len)加载CA证书
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath)
设置验证方式voidSSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*callback)(int, X509_STORE_CTX *))mode取值:SSL_VERIFY_NONE服务端:不会认证客户端身份,客户端不会发证书到服务端客户端:服务器的证书会被验证,但是验证结果不影响SSL握手SSL_VERIFY_PEER双方都会发送自己的证书,也都会验证对方证书,如果有一方验证不合法,SSL握手立刻停止SSL_VERIFY_FAIL_IF_NO_PEER_CERT只用在服务端,如果客户端没有提供自身的证书,则SSL会话结束,该模式需要与上个模式共同使用SSL_VERIFY_CLIENT_ONCE只用在服务端,只对客户端在第一次SSL协商时要证书,后面重新协商时不会验证证书获取对方的证书X509* SSL_get_peer_certificate (SSL* ssl)错误日志打印ERR_print_errors_fp(stderr)关闭SSL连接int SSL_shutdown(SSL *ssl)释放SSL连接int SSL_free(SSL*ssl)释放SSL上下文int SSL_CTX_free(SSL_CTX *ctx)设置私钥密码void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx,void *pwd)(4)使用注意事项     客户端建立的普通socket连接在使用ssl_connect()连接上服务器之前,不要进行数据的发送,否则会导致ssl_connect()调用失败,SSL会话终止。
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: