在我开始存储和共享上下文之前,这工作正常.在每个新的传入连接上,我创建了一个新的客户端套接字和上下文,将ca-bundle加载为验证文件,然后创建新的服务器上下文,获取欺骗性证书.它正在运行,但我开始开发EC_KEY对象被双重释放等问题. I learned from another question of mine,我正在以错误的方式解决这个问题,并开始重构以回收和共享CTX对象.具体来说,我正在使用单个客户端共享CTX,在程序启动时加载CA-Bundle进行验证.
但是,由于这个重构,我在客户端和服务器上都得到了这个:
decryption Failed or bad record mac
…与一个bajillion“短读”混合.如果我试图强制所有TLSv1.2,我得到
block cipher pad is wrong
在读/写失败后给我这些错误,我在上游或下游套接字上调用async_shutdown,这在回调中设置了错误(因此关闭失败).
我已经搜索了从apache httpd和Nginx这样的地方发现jira帖子的互联网,其中这个错误以不同的方式修复(调整读取缓冲区大小,openSSL补丁,强制SSLv3,依此类推).
我认为多线程可能存在问题(我的io-service使用线程池)但是我可以在代码中看到提升do_init为openSSL设置锁定机制,并且我的所有IO都被包装成单个链.
我完全失去了,我想知道是否有人可以了解可能发生的事情.我意识到我没有发布任何代码,因为我已经有数百行了,并且不希望通过巨大的代码转储来解决问题.我意识到这是一个相当复杂的程序,因此是一个复杂的问题所以请问,我会尽我所能.
编辑
我想我应该提一下,我在openssl 1.0.2和1.0.2a,Win 8.1 x64上都遇到了这些错误,并且我通过Windivert通过我的代理拦截和路由http / https流量.
编辑2
将整个程序减少到1个线程,效果相同.为每个客户端连接创建了新的客户端CTX,同样的问题.尝试禁用AES-NI,问题仍然存在.试过不同的电脑,效果一样.从源代码重新编译openssl(使用预编译的二进制文件),问题仍然存在.尝试设置与降级检测,填充错误等相关的当前文档中描述的其他OP_变通方法标志,问题仍然存在.我想我会马上开始随机混搭键盘和编辑按钮.
这很复杂,准备好了吗?如果取消/中止挂起的异步SSL *** 作,则会出现此错误. Mind->吊杆().如果你按照文档说的那样做并且使用async_shutdown这样做会更加令人困惑,因为即使回调到async_shutdown也会失败(设置错误代码)并且你的错误信息会随机变成像“解密失败或者解密”这样的愚蠢行为坏记录mac“或”块密码垫错误“或”SSLv3警报!“等等等等.当看到这样的错误时,忽略错误并分析IO *** 作的控制流程,在某个地方你要么过早地结束它们,要么让它们无序.
在我的情况下,过早的结束是有意的,因为在这个愚蠢的重型重构期间,我决定改变问题范围之外的东西,比如我的httpheader解析器,我偷偷摸摸并最终导致它几乎失败100 %因此中止连接. :)错误字符串通过告诉我由于某种原因加密失败来掩盖真正的原因.我知道,这是一个愚蠢的错误,但我很幸福成为第一个(显然)认识它的人. 总结
以上是内存溢出为你收集整理的c – OpenSSL解密失败或错误记录mac boost :: asio全部内容,希望文章能够帮你解决c – OpenSSL解密失败或错误记录mac boost :: asio所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)