使用openssl处理C套接字实现我遇到了问题,Safari不会重复使用SSL会话来加速连接。它适用于Firefox和Chrome。
要重现问题,我打开浏览器并指向IP:套接字的端口。以下是我用来保护套接字的相关openssl方法,按顺序执行:
全球
SSL_load_error_strings();
SSL_library_init();
OpenSSL_add_all_algorithms();
SSL_METHOD * meth = SSLv23_server_method();
sslInfo->ctx = SSL_CTX_new(meth);
SSL_CTX_set_session_cache_mode(sslInfo->ctx, SSL_SESS_CACHE_BOTH);
SSL_CTX_set_session_id_context(sslInfo->ctx, (void *)&ssl_session_ctx_id, sizeof(ssl_session_ctx_id));
SSL_CTX_set_generate_session_id(sslInfo->ctx, generateSslSession);
SSL_CTX_use_certificate_file(sslInfo->ctx, "....pem", SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(sslInfo->ctx, "....pem", SSL_FILETYPE_PEM);
每次连接
cSSL = SSL_new(data->ctx);
ssl_err = SSL_accept(cSSL);
sslfderr = SSL_set_fd(cSSL, data->clientfd);
reused = SSL_session_reused(cSSL);
if(reused) {
printf("Reused Session\n");
} else {
printf("New Session\n");
}
SSL_read(cSSL, buf, (int) bufSize);
SSL_write(cSSL, msg, (int) strlen(msg));
SSL_free(cSSL);
close(clientfd);
然后使用Safari浏览器连接到套接字,提供以下输出:
New Session
New Session
New Session
New Session
...
虽然使用Firefox或Chrome按预期提供输出:
New Session
Reused Session
Reused Session
Reused Session
现在的问题是,如果Safari有关会话的特殊事项吗?
提前致谢!