1 openssl
我想重用 SSL_SESSION,因此我使用 i2d_SSL_SESSION() 对其进行序列化,并使用 d2i_SSL_SESSION 进行反序列化。但是d2i_SSL_SESSION失败了,测试代码很简单:
ssl握手完成后
SSL_SESSION *session = SSL_get1_session(ssl);
int len = i2d_SSL_SESSION(session, NULL);
unsigned char *pp = new unsigned char[len];
len = i2d_SSL_SESSION(session, &pp);
SSL_SESSION *s_new = d2i_SSL_SESSION(NULL, (const unsigned char **)&pp, len);
ERR_print_errors_fp(stderr);
cout << "s_new = " << s_new << endl;
Run Code Online (Sandbox Code Playgroud)
i2d_SSL_SESSION 没问题,len = 2205
但d2i_SSL_SESSION失败,s_new为NULL,错误消息为:3078067960:error:0D06703D:asn1编码例程:a2i_ASN1_STRING:expecting an asn1 sequence:ssl_asn1.c:370:address=3219682277 offset=0
我错过了什么吗?
i2d_SSL_SESSION将 指向的指针增加到pp保存数据后的一个字节(不幸的是,手册页在这一点上不是很清楚)。
尝试改为:
int len = i2d_SSL_SESSION(session, NULL);
unsigned char *buffer = new unsigned char[len];
unsigned char *p = buffer;
const unsigned char *cp = buffer;
len = i2d_SSL_SESSION(session, &p);
SSL_SESSION *s_new = d2i_SSL_SESSION(NULL, &cp, len);
Run Code Online (Sandbox Code Playgroud)
请注意,d2i_SSL_SESSION()以相同的方式递增传递的指针。手册d2i_X509()页是有关 OpenSSL 中所有d2i_*()和i2d_*()函数的一般行为的最佳文档。
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |