【问题标题】:Solving Heartbleed issue on Tomcat with APR and OpenSSL. Compilation errors使用 APR 和 OpenSSL 解决 Tomcat 上的 Heartbleed 问题。编译错误
【发布时间】:2014-05-23 20:28:53
【问题描述】:

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

我还没有设法将 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 问题!我现在很忙。但请询问您是否需要详细的程序说明。

【问题讨论】:

  • 一定要找详细的过程描述。谢谢!
  • 请。如果您可以让您编译的 dll 可供下载,那就更好了。

标签: windows tomcat openssl apr heartbleed-bug


【解决方案1】:

这就是我所做的。

我从 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”,这样在“jni”文件夹下就有一个“apr”文件夹了。

在Visual Studio 2013中打开“tomcat-native-1.1.29-win32-src/jni/native/libtcnative.dsw”,会进行一些转换。

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

适用于“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”更改为“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”中

【讨论】:

  • 如果仍有问题,请尝试将“..\apr\libR”添加到您的链接器附加目录,并将 apr-1.lib 添加到链接器输入附加依赖项。
【解决方案2】:

目前,tcnative 团队已经完成了下一个包含 Heartbleed 修复程序的版本。因此可以从 Latest tcnative with heartbleed fix 获取此版本。

此版本即将正式发布。

【讨论】:

【解决方案3】:

如果您使用的是 Tomcat Native,Apache Tomcat 7.0.53(最新版本)容易受到 Heartbleed 的影响(检查 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 中。

【讨论】:

  • 实际上修复是在 Open SSL 1.0.1g 中。来自heartbleed.com:OpenSSL 的哪些版本受到影响? OpenSSL 1.0.1 到 1.0.1f(含)易受攻击 OpenSSL 1.0.1g 不受攻击 OpenSSL 1.0.0 分支不受攻击 OpenSSL 0.9.8 分支不受攻击
【解决方案4】:

【讨论】:

    【解决方案5】:

    我相信 Tomcat 在开箱即用时不会受到 Heartbleed 的影响。

    是的,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,否则我认为可以肯定地说,您不会受到攻击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2015-08-22
      • 2012-06-15
      • 2019-03-26
      • 2014-10-08
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多