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

Зачем зависеть? Просто попробуйте сделать и сделать установку. – doptimusprime

+0

'./Config' печатает, что мне нужно выдать' make depend' – Maxim

+0

Вы должны * не * использовать 'AES_encrypt' и друзей. Вы должны использовать 'EVP_ *' функции. См. [Симметричное шифрование и дешифрование EVP] (https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption) в вики OpenSSL. Фактически, вы, вероятно, должны использовать аутентифицированное шифрование, поскольку оно обеспечивает * и * конфиденциальность и аутентичность. См. [EVP Authenticated Encryption and Decryption] (https://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption) в вики OpenSSL. – jww

ответ

7

У меня была та же проблема с компиляцией OpenSSL 1.0.1e на SLES 11 Linux. На другом веб-сайте я нашел подсказку «очистить» перед вызовом make.

В моем случае, безуспешным первая попытка была:

Записан как обычный пользователь (не корень):

. ./config 
make 

Это не удалось, с теми же ошибками, вы упомянули в своем вопросе.

успешно попытка была:

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

, который работал для меня, спасибо. Я также использовал './config --prefix = $ HOME enable-ec enable-ecdh enable-ecdsa zlib', но я не уверен, что все это было необходимо. –

+0

Спасибо! Это сработало и для меня; RHEL 5.10. Я использовал './config --prefix = $ HOME/usr_local --openssldir = $ HOME/usr_local/openssl zlib'. –

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 является скорости для 64-битных платформах, где GCC предлагает 128-битное целое число.
  • Обычно вы хотите 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 является ключом для повторного конфигурирования.


См. Также Compilation and Installation в вики-продаже OpenSSL.

Смежные вопросы