4

我需要构建自己的 OpenSSL 二进制文件,因为 Fedora-18 提供的包没有椭圆曲线加密。我执行这些命令:

./config --prefix=/home/USERNAME/bin/ssl --openssldir=/home/USERNAME/bin/ssl/openssl -fPIC zlib no-idea no-mdc2 no-rc5
make depend
make

但我有链接错误:

../libcrypto.a(x86_64cpuid.o): In function `OPENSSL_cleanse':
(.text+0x1a0): multiple definition of `OPENSSL_cleanse'
../libcrypto.a(mem_clr.o):mem_clr.c:(.text+0x0): first defined here
../libcrypto.a(cmll-x86_64.o): In function `Camellia_cbc_encrypt':
(.text+0x1f00): multiple definition of `Camellia_cbc_encrypt'
../libcrypto.a(cmll_cbc.o):cmll_cbc.c:(.text+0x0): first defined here
../libcrypto.a(aes-x86_64.o): In function `AES_encrypt':
(.text+0x460): multiple definition of `AES_encrypt'
../libcrypto.a(aes_core.o):aes_core.c:(.text+0x62a): first defined here
../libcrypto.a(aes-x86_64.o): In function `AES_decrypt':
(.text+0x9f0): multiple definition of `AES_decrypt'
../libcrypto.a(aes_core.o):aes_core.c:(.text+0xad0): first defined here
../libcrypto.a(aes-x86_64.o): In function `private_AES_set_encrypt_key':
(.text+0xab0): multiple definition of `private_AES_set_encrypt_key'
../libcrypto.a(aes_core.o):aes_core.c:(.text+0x0): first defined here
../libcrypto.a(aes-x86_64.o): In function `private_AES_set_decrypt_key':
(.text+0xd80): multiple definition of `private_AES_set_decrypt_key'
../libcrypto.a(aes_core.o):aes_core.c:(.text+0x403): first defined here
../libcrypto.a(aes-x86_64.o): In function `AES_cbc_encrypt':
(.text+0xfa0): multiple definition of `AES_cbc_encrypt'
../libcrypto.a(aes_cbc.o):aes_cbc.c:(.text+0x0): first defined here
4

2 回答 2

9

我在 SLES 11 Linux 上编译 OpenSSL 1.0.1e 时遇到了同样的问题。在另一个网站上,我发现在调用 make 之前发出“make clean”的提示。

就我而言,不成功的第一次尝试是:

以普通用户(不是 root)身份登录:

. ./config
make

这失败了您在问题中提到的相同错误。

成功的尝试是:

su
make clean
./config zlib
make
make install
于 2013-09-04T07:44:23.113 回答
3
./config --prefix=/home/USERNAME/bin/ssl --openssldir=/home/USERNAME/bin/ssl/openssl -fPIC zlib no-idea no-mdc2 no-rc5
make depend
make

对于-fPIC,您使用shared.

没有必要,--prefix因为它会使用--openssldir. 所以配置调用将类似于:

./config shared zlib no-idea no-mdc2 no-rc5 no-ssl2 no-ssl3 \
    enable-ec_nistp_64_gcc_128 --openssldir=/home/USERNAME/bin/ssl/openssl

线上的一些注意事项:

  • enable-ec_nistp_64_gcc_128是 GCC 提供 128 位整数的 64 位平台的加速器。
  • 通常,您需要,no-comp因为压缩会泄漏信息
  • 因为压缩会泄露信息,你通常不希望zlib
  • no-ssl2完全删除 SSLv2,因为它不安全
  • no-ssl3完全删除 SSLv3,因为它不安全

--openssldir=/home/USERNAME/bin/ssl/openssl方法:

  • 二进制文件将在/home/USERNAME/bin/ssl/openssl/bin
  • 图书馆将在/home/USERNAME/bin/ssl/openssl/lib
  • 标题将在/home/USERNAME/bin/ssl/openssl/include

然后,您只需要运行以下命令。没有必要make depend

$ make
$ sudo make install

如果您需要清理现有配置然后重新配置,请执行以下操作:

make clean && make dclean

make dclean是重新配置的关键。


另请参阅OpenSSL wiki 上的编译和安装。

于 2015-05-15T20:35:07.737 回答