Lighttpd: network.c:483: error: 'EC_KEY' undeclared (first use in this function) 错误及解决方法
我正在尝试在 RHEL 6.1 AMD64 下安装最新版本的 Lighttpd v1.4.29 Web 服务器,但出现以下错误:
network.c:在函数“network_init”中:
network.c:483:错误:未声明“EC_KEY”(在此函数中第一次使用)
network.c:483:错误:(每个未声明的标识符仅报告一次
network.c:483:错误:对于它出现的每个函数。)
network.c:483:错误:未声明“ecdh”(在此函数中第一次使用)
network.c:484:警告:未使用的变量“nid”
make[3]:*** [network.o] 错误 1
make[3]:离开目录“/opt/new/lighttpd-1.4.29/src”
make[2]:*** [all] 错误 2
make[2]:离开目录“/opt/new/lighttpd-1.4.29/src”
make[1]:*** [all-recursive] 错误 1
make[1]:离开目录`/opt/new/lighttpd-1.4.29′
make: *** [all] 错误 2
如何在 CentOS 5.x、RHEL、Red Hat Enterprise Linux 6.x 或 Fedora Linux 下修复此问题?
椭圆曲线加密(ECC) 是一种用于移动/无线环境的新型公钥加密系统。Lighttpd 支持 ECC,但 RHEL 6.x 或 CenOS 5.x 附带旧版本的 OpenSSL。要解决此问题:
- 使用支持椭圆曲线加密的较新版本的 OpenSSL。(这意味着您需要在 RHEL 上重新编译 OpenSSL)
- 不使用 OpenSSL 编译 lighttpd(这仅在您运行的所有网站均不支持 https 时才有效)
- 使用 OPENSSL_NO_ECDH 补丁编译 lighttpd。它在 network.c 中添加了对 OPENSSL_NO_ECDH 的缺失检查,由于专利问题,该检查已从 Fedora/RHEL/CentOS Linux 中的 openssl 中删除。此补丁将包含在 lighttpd v1.4.30 中。
应用补丁的命令如下。 将补丁下载到 /tmp 中:
cd 到 lighttpd v1.4.29 源代码目录:应用补丁,输入:
现在,您可以按如下方式编译 lighttpd:
将 --option1、--option2 替换为所需选项。这是一个工作示例:
$ cd /tmp
$ wget http://redmine.lighttpd.net/attachments/1294/lighttpd_1.4.29_ssl_no_ecdh.patch
$ cd /opt/lighttpd-1.4.29
$ patch -p1 < /tmp/lighttpd_1.4.29_ssl_no_ecdh.patch
$ ./configure --with-openssl --option1 --option2
$ make
$ sudo make install
$ ./configure --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --with-openssl --with-fam
$ make
$ sudo make install