openssl中SSL_get0_raw_cipherlist的bug
来源:互联网 发布:java语句种类 编辑:程序博客网 时间:2024/05/21 17:45
在openssl的1.0.2版本中对外提供了一个SSL_get0_raw_cipherlist(s, plst)。这个接口有两个参数,第一个是SSL*, 第二个是字符数组。如果第二个参数传入的参数是NULL的时候返回的是对应的cipher占用字节的大小,如果不为NULL,则会将相应数据拷贝至该数组中。但是如果client发送的是无版本号的错误ssl握手信息,会造成设置ssl的method为ssl23相应的函数集。此时在SSL_get0_raw_cipherlist(s,NULL)中调用了ssl_put_cipher_by_char(s, NULL,NULL), ssl_put_cipher_by_char中调用了(ssl)->method->put_cipher_by_char(NULL, NULL)。该函数现在是ssl23_put_cipher_by_char(NULL, NULL)。但是在ssl23_put_cipher_by_char中的逻辑是这样的:
int ssl23_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
{
long l;
/* We can write SSLv2 and SSLv3 ciphers */
/* but no ECC ciphers */
if (c->algorithm_mkey == SSL_kECDHr ||
c->algorithm_mkey == SSL_kECDHe ||
c->algorithm_mkey == SSL_kEECDH ||
c->algorithm_auth == SSL_aECDH || c->algorithm_auth == SSL_aECDSA)
return 0;
if (p != NULL) {
l = c->id;
p[0] = ((unsigned char)(l >> 16L)) & 0xFF;
p[1] = ((unsigned char)(l >> 8L)) & 0xFF;
p[2] = ((unsigned char)(l)) & 0xFF;
}
return (3);
}
因为c为NULL,所以会引起core。
- openssl中SSL_get0_raw_cipherlist的bug
- openssl中的一个bug--附带asn1的点点滴滴
- OpenSSL 1.0.2a的一点小bug
- OpenSSL状态机中可选消息的处理
- openssl中算法的组织方式
- OpenSSL中读取PEM文件的问题
- OpenSSL中PKCS#7格式的数字签名
- openssl中libeay32!RAND_poll引发的死锁
- openssl库中MD算法的使用
- openssl库中BIGNUM的使用
- openssl中aes、rsa算法的使用
- kermit使用中遇到openssl的问题
- OpenSSL中AES加密的用法
- Linux中openssl命令的使用
- OPENSSL中PEM_read_bio_RSAPublicKey和PEM_read_bio_RSA_PUBKEY的区别
- openssl 0.9.7a-0.9.7d的一个多线程bug
- VC6中stringstream的BUG
- ImageList中似是而非的Bug
- wait和waitpid详解
- vc2010调试:“当前不命中断点”(附加进程)
- 转载:澄清P问题、NP问题、NPC问题的概念
- HDU 2181 哈密顿绕行世界问题(DFS)
- c++学习之类继承
- openssl中SSL_get0_raw_cipherlist的bug
- 关于android开发icon无法更改的问题
- 第三周 项目5-数据做数据成员(5)
- /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc
- 数据库:第一次作业
- 使用JMeter进行一次简单的带json数据的post请求测试,json可配置参数
- dwz学习--动态生成树
- C# Socket编程笔记
- iOS UITextField总结