2013-05-10 314 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

相關問題