openssl的CRYPTO_set_locking_callback

openssl可以在多线程环境下使用,但前提是向openssl提供线程锁设施,通过CRYPTO_set_locking_callback设置。

在一些复杂软件环境环境中,可能存在多个上层模块同时使用openssl,并且都通过CRYPTO_set_locking_callback设置锁设施,如果出现这种情况,就悲剧了,例如:

xxx.exe - curl - openssl

\ qtnetworks - openssl

上面的例子是xxx.exe依赖curl及qtnetwork,curl和qtnetwork都使用CRYPTO_set_locking_callback设置锁设施。

类似的问题在openssl的bugtrack里面也有人反映,但openssl没有正面回应这个问题,所以这种情况还是需要开发者自己解决。

http://rt.openssl.org/Ticket/Display.html?id=2293&user=guest&pass=guest

解决方法

1.参考openssl CRYPTO_thread_setup函数自己实现锁,屏蔽外界CRYPTO_set_locking_callback调用;

或者

2.在xxx.exe内hook openssl CRYPTO_set_locking_callback,实现线程安全,不重复设置逻辑。

时间: 2024-07-29 00:45:21

openssl的CRYPTO_set_locking_callback的相关文章

源码更新curl后报CRYPTO_set_locking_callback错误

CRYPTO_set_locking_callback() is available in all versions of SSLeay and OpenSSL.undefined symbol: CRYPTO_set_locking_callback正确解决办法是编译时指定ssl的路径. 编译LNMP新环境物料过程,源码编译安装了curl后,发现很多调用curl库文件的地方报错. 比如无意中执行了yum安装命令,就发现有如下报错,pycurl.so调用出错. 报错内容: /usr/lib64/

libcurl 多线程使用注意事项(补充)——HTTPS,openssl多线程使用加锁

问题 多线程libcurl运行一段时间后出现崩掉,没有确定的点,没有确定的URL.一直查看源代码没有问题,最后通过debug跟踪发现是在访问SSL的时候出现的crash. 才想起来openssl是不支持多线程的,要自己做加锁处理.而且libcurl中并没有支持相关的加锁操作. 解决办法: 在初始化libcurl的时候为openssl创建一个互斥锁函数,一个回调函数传给openss openssl锁l函数原形 :void (* func )(int ,int , const char * ,int

php7实现基于openssl的加密解密方法

还需要注意的是加密字符串长度问题,如果加密字符串长度太长需要进行分段加解密,如下代码: 加密:(公匙加密,私密一般用来解密) function encrypt($originalData){ $publicKeyFilePath = '/www/ceshi/rsa_public_key.pem'; extension_loaded('openssl') or die('php需要openssl扩展支持'); file_exists($publicKeyFilePath) or die('公钥的文

基于源码编译openssl

openssh依赖于openssl,由于ssl频繁曝出漏洞,牵扯到openssh.而自身也存在漏洞... 00.下载openssl https://www.openssl.org/source/ https://github.com/openssl/openssl/releases https://www.openssl.org/source/openssl-1.0.2l.tar.gz 01.准备工作 yum -y install perl perl-devel gcc gcc-c++ 02.编

openssl基础

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) prot

OpenSSL Heartbleed “心脏滴血”漏洞简单攻击示例

OpenSSL Heartbleed漏洞的公开和流行让许多人兴奋了一把,也让另一些人惊慌了一把. 单纯从攻击的角度讲,我已知道的,网上公开的扫描工具有: 1.  Nmap脚本ssl-heartbleed.nse: http://nmap.org/nsedoc/scripts/ssl-heartbleed.html 1 nmap -sV --script=ssl-heartbleed <target> 2. Jared Stafford的testssl.py: https://gist.gith

Centos7 httpd+openssl+ssh登录实现过程(爱你就给你写详细点)

上篇已经讲了LAMP的yum简易搭建 http://rexchow.blog.51cto.com/11619161/1885533 我们针对这套服务延伸openssl功能 原理就不多说了,谷X百X去 环境说明: server:CentOS7-192.168.230.202 client: win8.1-192.168.230.59 Apache/2.4.6 php Version 5.4.16 5.5.52-MariaDB 新增签发服务器:192.168.230.204 需要安装openssl

openssl、openssh升级

近期公司应用需要用到https协议:Centos6.5自带的的openssl 1.0.1e版本存在名为"心脏出血"的漏洞. 环境:CentOS6.5_x86_64 准备相关的包openssh下载地址:http://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable/openssl相关包下载:http://www.openssl.org/source/pam相关包下载:http://pkgs.org/centos-6/centos-x

Windows 一键安装OpenSSL

原理:OpenSSL在github上有开源项目,我们只需要把代码克隆到本地,在本地编译一下就好了 注意事项: 1->在github上获取源码,必须要安装git for windows,网址 https://git-for-windows.github.io 2->OpenSSL的配置文件需要Perl语言来解析,所以本地电脑需要安装Perl脚本运行环境 perl官网下载地址 : https://www.perl.org/get.html  我选择的是草莓版(Strawberry) ,下载后安装P