首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用APR和OpenSSL解决Tomcat的心脏出血问题。编译错误

用APR和OpenSSL解决Tomcat的心脏出血问题。编译错误
EN

Stack Overflow用户
提问于 2014-04-10 08:37:43
回答 5查看 7.5K关注 0票数 0

我在一台使用Tomcat作为web服务器的Windows机器上运行TeamCity,并使用(APR)和OpenSSL作为SSL。

我没有成功地将OpenSSL的版本升级到1.0.1g,我认为原因在于Tomcat本机库二进制文件(tc天生-1.dll) (http://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.1.29/binaries/tomcat-native-1.1.29-win32-bin.zip)同时包含OpenSSL的APR和1.0.1e,而且我找不到1.0.1.g的新二进制文件。

我尝试自己编译Tomcat本机库,但是在编译"libapr“项目时会出现编译错误。

我得到的编译错误如下:

代码语言:javascript
复制
Error   4   error LNK2019: unresolved external symbol __InterlockedIncrement referenced in function _apr_atomic_inc32@4 C:\Users\heartbleed\tomcat-native-1.1.29-win32-src\jni\apr\apr_atomic.obj   libapr
Error   5   error LNK2019: unresolved external symbol __InterlockedExchangeAdd referenced in function _apr_atomic_add32@8   C:\Users\heartbleed\tomcat-native-1.1.29-win32-src\jni\apr\apr_atomic.obj   libapr
Error   6   error LNK2019: unresolved external symbol __InterlockedExchange referenced in function _apr_atomic_set32@8  C:\Users\heartbleed\tomcat-native-1.1.29-win32-src\jni\apr\apr_atomic.obj   libapr
Error   7   error LNK2019: unresolved external symbol __InterlockedDecrement referenced in function _apr_atomic_dec32@4 C:\Users\heartbleed\tomcat-native-1.1.29-win32-src\jni\apr\apr_atomic.obj   libapr
Error   8   error LNK2019: unresolved external symbol __InterlockedCompareExchange referenced in function _apr_atomic_cas32@12  C:\Users\heartbleed\tomcat-native-1.1.29-win32-src\jni\apr\apr_atomic.obj   libapr
Error   9   error LNK1120: 5 unresolved externals   C:\Users\heartbleed\tomcat-native-1.1.29-win32-src\jni\apr\Debug\libapr-1.dll   1   1   libapr

我正试图在Visual终极2013中编译(可能是Visual的新版本?)。

我该如何解决这个问题?

是否有人成功地使用OpenSSL 1.0.1.g构建了Tomcat本机库?

更新

我已经将"Platform“设置为v100 (按照这里的建议,https://groups.google.com/forum/#!topic/UniMRCP/Iybpn51UYnI),以前的编译错误消失了,但现在我得到了新的错误:

代码语言:javascript
复制
Error   9   error C1083: Cannot open include file: 'apr.h': No such file or directory   C:\Users\heartbleed\tomcat-native-1.1.29-win32-src\jni\native\include\tcn.h 26  1   tcnative

更多更新

我确实解决了编译问题,并用OpenSSL 1.0.1g构建了一个to 1.dll,并且我的TeamCity已经启动并运行,修复了心脏出血问题!我现在很忙。但是,请询问你是否需要详细的程序描述。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-04-10 18:26:38

目前,本机团队已经完成了下一个版本的工作,该版本具有“心脏出血”修复程序。所以我们可以从http://people.apache.org/~mturk/native/1.1.30/获得这个版本。

这个版本很快就会正式发布。

票数 2
EN

Stack Overflow用户

发布于 2014-04-10 17:45:58

我就是这么做的。

我从Visual 2013开始。

安装VisualC++ 2010 Express (http://go.microsoft.com/?linkid=9709949)。

安装OpenSSL (http://slproweb.com/products/Win32OpenSSL.html),我选择了"Win32 OpenSSL v1.0.1g“。

下载Tomcat原住民(http://apache.mirrors.spacedump.net//tomcat/tomcat-connectors/native/1.1.29/source/tomcat-native-1.1.29-win32-src.zip),将其解压缩到某个地方。

下载APR源代码(http://apache.mirrors.spacedump.net//apr/apr-1.5.0-win32-src.zip),将其解压缩并移动到“tomcat-本机-1.1.29-Win32-src/jni”目录中。将其从"apr-1.5.0“目录重命名为"apr",以便在"jni”文件夹中有一个"apr“文件夹。

在2013中打开"tomcat-native-1.1.29-win32-src/jni/native/libtcnative.dsw“。它会带来一些转变。

从“调试”改为“发布”。

对于项目"apr“和"tcnative”。右键单击它们,进入Properties ->配置属性。将"Platform“设置为"v100”。

右键单击"tcnative“,单击”属性“->配置属性-> C/C++ ->附加包含目录->编辑

  • 更改“./srclib/apr/包括”to“/./apr/include”
  • 将“./srclib/apr/include/arch/win32 32”改为“./apr/include/arch/win32 32”
  • 添加“C:\OpenSSL 32\include”(或安装OpenSSL的地方)。

转到配置属性->链接器->输入->附加依赖项->编辑

  • 将"libeay32.lib“改为"libeay32MT.lib”
  • 将"ssleay32.lib“改为"ssleay32MT.lib”

转到Configuration -> Linker ->附加库目录->编辑。

  • 添加“C:\OpenSSL 32\lib\VC\静态”(或安装OpenSSL的地方)。

右键单击tcnative,然后单击Build。

构建完成后,您将找到“tc本机-1.dll”

内部"tomcat-native-1.1.29-win32-src\jni\native\LibR“

票数 3
EN

Stack Overflow用户

发布于 2014-04-11 06:58:03

Apache 7.0.53 (最新版本)如果您正在使用Tomcat本机(请检查Tomcat 1.dll是否在bin文件夹中),则容易受到心脏出血的攻击。如果您下载Tomcat二进制文件,情况就是如此。

您可以在x86和x64上找到http://people.apache.org/~mturk/native/1.1.30/binaries/的二进制文件。

我希望他们能很快在http://tomcat.apache.org/download-native.cgi上正式发布。

只需下载DLL文件,将其放入Tomcat/bin文件夹,重新启动Tomcat,您就完成了。

若要验证修复,请检查文件catalina.log

代码语言:javascript
复制
Apr 11, 2014 8:39:27 AM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1g 7 Apr 2014)

自OpenSSL 1.0.1f以来,心脏出血修复一直在OpenSSL中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22982848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档