使用APR和OpenSSL解决Tomcat上的Heartbleed问题。编译错误

时间:2014-04-10 08:37:44

标签: windows tomcat openssl apr heartbleed-bug

我在使用Tomcat作为Web服务器的Windows机器上运行TeamCity,并使用Apache Portable Runtime(APR)和OpenSSL for SSL。

我还没有设法将OpenSSL的版本升级到1.0.1g,我认为原因是因为Tomcat本机库二进制文件(tcnative-1.dll)(http://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.1.29/binaries/tomcat-native-1.1.29-win32-bin.zip)包含APR和版本1.0 .1e的OpenSSL,我找不到1.0.1.g的新二进制文件。

我自己尝试编译Tomcat本机库,但在尝试编译" libapr"时遇到了编译错误。项目

我得到的编译错误是:

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 Studio Ultimate 2013中编译(可能是Visual Studio的新版本?)。

如何解决此问题?

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

更新

我已经设置了"平台工具集"到v100(这里建议https://groups.google.com/forum/#!topic/UniMRCP/Iybpn51UYnI)并且以前的编译错误消失了,但现在我得到了新的:

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构建了一个tcnative-1.dll,并且我的TeamCity启动并运行了Heartbleed问题!我现在很忙。但请询问您是否需要详细说明该程序。

5 个答案:

答案 0 :(得分:3)

这就是我所做的。

我从Visual Studio 2013开始。

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

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

下载Tomcat Native(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-native-1.1.29-win32-src / jni"。 将其重命名为" apr-1.5.0"目录到" apr",以便你有一个" apr" " jni"中的文件夹文件夹中。

打开" tomcat-native-1.1.29-win32-src / jni / native / libtcnative.dsw"在Visual Studio 2013中。它将进行一些转换。

更改"调试"到"发布"。

对于项目" apr"和" tcnative"。 右键单击它们,进入属性 - >配置属性。 设置"平台工具集"到" v100"。

右键点击" tcnative"单击属性 - >配置属性 - > C / C ++ - >其他包含目录 - >修改

  • 更改" ./ srclib / apr / include"到" ../ apr / include"
  • 更改" ./ srclib / apr / include / arch / win32"到" ../ apr / include / arch / win32"
  • 添加" C:\ OpenSSL-Win32 \ include" (或者无论你在哪里安装OpenSSL)。

转到配置属性 - >链接器 - >输入 - >附加依赖性 - >修改

  • 改变" libeay32.lib" to" libeay32MT.lib"
  • 更改" ssleay32.lib"到" ssleay32MT.lib"

转到配置属性 - >链接器 - >其他图书馆目录 - >编辑。

  • 添加" C:\ OpenSSL-Win32 \ lib \ VC \ static" (或者无论你在哪里安装OpenSSL)。

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

构建完成后,您将找到" tcnative-1.dll"

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

答案 1 :(得分:2)

目前,tcnative团队已经完成了Heartbleed修复的下一个版本的工作。所以可以从 Latest tcnative with heartbleed fix 获得此版本。

此版本即将正式发布。

答案 2 :(得分:1)

Apache Tomcat 7.0.53(最新版本)容易受到Heartbleed的影响,如果您使用的是Tomcat Native(检查tcnative-1.dll是否在bin文件夹中。如果您下载Tomcat Windows二进制文件就是这种情况)。

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

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

只需下载DLL文件,将其放入Tomcat / bin文件夹,重新启动Tomcat即可。

要验证此修复程序,请检查文件catalina.log

Apr 11, 2014 8:39:27 AM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1g 7 Apr 2014)

Heartbleed修复自OpenSSL 1.0.1f以来一直在OpenSSL中。

答案 3 :(得分:0)

答案 4 :(得分:0)

我相信Tomcat并不容易受到Heartbleed的攻击。<​​/ p>

是的,APR库已链接且SSLEngine已启用。

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

但是如果你查看默认Tomcat部署的server.xml配置文件,它的SSL连接器使用JSSE,而不是APR库。

<!-- Define a SSL HTTP/1.1 Connector on port 8443
     This connector uses the BIO implementation that requires the JSSE
     style configuration. When using the APR/native implementation, the
     OpenSSL style configuration is required as described in the APR/native
     documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />
-->

所以它不应该通过Heartbleed进行解释。除非您手动更改SSL连接器以使用APR,否则我认为可以肯定,您并不容易受到攻击。