0

我在使用 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)包含 OpenSSL 的 APR 和 1.0.1e 版本,我找不到 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 问题!我现在很忙。但请询问您是否需要该程序的详细说明。

4

5 回答 5

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”,这样在“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 并单击构建。

构建完成后你会发现“tcnative-1.dll”

在“tomcat-native-1.1.29-win32-src\jni\native\LibR”里面

于 2014-04-10T17:45:58.573 回答
2

目前,tcnative 团队已经完成了下一个包含 Heartbleed 修复的版本的工作。因此可以从带有 heartbleed fix 的最新 tcnative获取此版本。

该版本即将正式发布。

于 2014-04-10T18:26:38.923 回答
1

如果您使用的是 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)

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

于 2014-04-11T06:58:03.923 回答
0

现在这是我构建的 dll: https ://docs.google.com/file/d/0B4GOp0amHg-0SU5GXzZuM2lJT3c/edit

于 2014-04-10T11:39:23.827 回答
0

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

于 2014-04-11T06:04:27.287 回答