2013-05-10 201 views
4

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

./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 
+0

为什么要依赖?试试make并安装。 – doptimusprime 2013-05-11 05:19:36

+0

'。/ config'打印我需要发出'make depend' – Maxim 2013-05-11 06:04:57

+0

你应该*不*使用'AES_encrypt'和朋友。您应该使用'EVP_ *'功能。请参阅OpenSSL wiki上的[EVP Symmetric Encryption and Decryption](https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption)。事实上,您应该使用经过身份验证的加密,因为它提供了*机密性和真实性。请参阅OpenSSL wiki上的[EVP Authenticated Encryption and Decryption](https://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption)。 – jww 2015-05-15 20:30:34

回答

7

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

在我的情况下,不成功的第一次尝试:

登录为普通用户(不是root):

. ./config 
make 

这种失败,你在你的问题中提到的同样的错误。

成功尝试是:

su 
make clean 
./config zlib 
make 
make install 
+0

为我工作,谢谢。我也使用'./config --prefix = $ HOME enable-ec enable-ecdh enable-ecdsa zlib',但我不确定这些是否都是必需的。 – 2014-01-14 04:57:01

+0

谢谢!这对我也有效; RHEL 5.10。我用'./config --prefix = $ HOME/usr_local --openssldir = $ HOME/usr_local/openssl zlib'。 – 2015-01-12 16:45:45

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因为压缩can leak information
  • 由于压缩泄漏信息,您通常不希望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上的Compilation and Installation