我正在尝试在CentOS上使用OpenSSL设置Tomcat。我已经下载了OpenSSL源代码,Tomcat本地库源代码和Tomcat APR。
编译了上述所有来源,使用以下选项编译OpenSSL
./config shared
添加了生成的" .so"文件到LD_LIBRARY_PATH。但是当我启动tomcat时,我得到以下错误并且tomcat无法启动
/usr/java/jre1.7.0_51/bin/java: symbol lookup error: /usr/local/apr-1.5.1/lib/libtcnative-1.so.0.1.32: undefined symbol: EC_KEY_new_by_curve_name
我是否缺少编译OpenSSL的命令行参数? BTW我提到https://wiki.openssl.org/index.php/Compilation_and_Installation来编译OpenSSL。
修改
编译我引用的Apache本机库 - http://tomcat.apache.org/native-doc/
答案 0 :(得分:0)
我遇到了同样的问题。 我试图用自己在另一台机器上构建的tcnative启动Tomcat,但具有相同的架构和操作系统。
似乎已经安装在我的SunOS中的OpenSSL由于一些遗留方面而没有ECC支持而构建。 请参阅“ECC和NSA从属许可证”下的OpenSSL用户指南http://www.openssl.org/docs/fips/UserGuide-2.0.pdf。
我所做的是再次重建图书馆。对于带Sun-studio编译器的SunOS 11.2:
./配置solaris64-x86_64-cc --openssldir = / work / shared / openssl --libdir = lib shared zlib-dynamic
./配置CC = cc CFLAGS =“ - m64”LDFLAGS =“ - m64”--prefix = / work / shared / apr --exec-prefix = / work / shared / apr
./ configure CC = cc --prefix = / work / shared / tcnative --with-apr = / work / shared / apr --with-ssl = / work / shared / openssl --with-java-home = / usr / jdk / jdk1.7.0_80 CFLAGS =“ - m64 -fPIC”LDFLAGS =“ - m64”
同样在Tomcat / bin文件夹中,我创建了setenv.sh,其中包含以下内容:
LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:$ CATALINA_HOME / lib:/ work / shared / tcnative / lib export LD_LIBRARY_PATH JAVA_OPTS =“ - d64 -Djava.library.path = / work / shared / tcnative / lib:/ usr / jdk / latest / lib -Dfile.encoding = UTF-8 -Xms512m -Xmx512m -XX:NewSize = 256m -XX: MaxNewSize = 256m -XX:PermSize = 256m -XX:MaxPermSize = 512m -XX:+ OptimizeStringConcat -XX:+ UseStringCache -XX:+ DisableExplicitGC“ 出口JAVA_OPTS
正如您所看到的,我在任何地方都使用了Prefix路径,以避免过度压缩系统文件夹中的文件。我不确定100%有关修复的原因,但上述步骤可能对您有帮助。
更新: 在有问题的环境中检查“ldd libtcnative-1.so”看起来当系统无法从编译期间从它们拍摄的路径中找到apr和openssl库时,它们将从默认系统文件夹中获取它们,这就是惊喜 - 你好OpenSSL没有ECC。 因此,如果您在同一个地方构建所有3个并且只是将这个预配置的文件夹复制到维护相同路径的新系统(如果需要) - 一切都应该工作而不需要触及任何系统库。