1. 加载SSL库
SSL_load_error_strings();
SSLeay_add_ssl_algorithms();
2. 加载CA证书和私钥文件
SSL_CTX* ctx = SSL_CTX_new(SSLv23_server_method());
SSL_CTX_use_certificate_file(ctx, CA_CERT, SSL_FILETYPE_PEM)
SSL_CTX_set_default_passwd_cb_userdata(ctx, PASSWORD)
SSL_CTX_use_PrivateKey_file(ctx, PRVTKEY, SSL_FILETYPE_PEM)
SSL_CTX_check_private_key(ctx)
3. 建立TCP连接并监听
略
4. 接收客户端请求并建立SSL连接
SSL*ssl = SSL_new(ctx);
SSL_set_fd(ssl, fd_accept)
SSL_accept(ssl)
5. 获取客户端证书信息
SSL_get_peer_certificate(ssl)
X509_NAME_oneline(X509_get_subject_name(cli_cert), NULL, 0)
X509_NAME_oneline(X509_get_issuer_name(cli_cert), NULL, 0)
X509_free(cli_cert)
6. 接收和发送数据
SSL_write
SSL_read
7. 释放套接字和SSL
SSL_CTX_free(ctx)
SSL_free(ssl)
客户端主要流程:
1. 加载SSL库
SSL_load_error_strings();
SSLeay_add_ssl_algorithms();
2. 如果需要验证服务器端的信息的话步骤同服务器的步骤2一样
3. 创建套接字连接到服务器
4. 创建SSL连接
SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method());
5. 基于套接字建立SSL连接
SSL* ssl = SSL_new(ctx);
SSL_set_fd(ssl, fd_connect);
SSL_connect(ssl)
6. 收发数据
SSL_write
SSL_read
7. 释放连接和SSL
SSL_CTX_free(ctx)
SSL_free(ssl)