Problém:libssl.so.1.0.0
a libcrypto.so.1.0.0
nejsou k dispozici žádné informace o verzi varování/chyba.
Po mnoha výzkumech, čase a úsilí (trvalo týdny) jsem nakonec udělal toto...
V adresáři, kde jste skončili s extrahováním zdrojového kódu pro vaši verzi openssl 1.0.1h (mělo by fungovat i pro jiné verze.) vytvořím soubor s názvem openssl.ld
Do tohoto souboru vložte toto...
OPENSSL_1.0.0 {
global:
*;
};
uložte. Nyní zadejte...
make clean
(Jen pro jistotu, že začínáme znovu.)
Nyní k té opravdu děsivé části...
./config --prefix=/usr/local --openssldir=/usr/local/openssl shared -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions
Pak...
make
make test
make install
ldconfig
A to by mělo stačit. (Je to tak jednoduché. Nevyžaduje se žádné záplatování.)
Toto řešení jsem aplikoval na Debian Wheezy jak 32, tak 64bitové verze. A udělali pozorování. 64bitová verze se automaticky nastaví na novou verzi libssl.so.1.0.0
a libcrypto.so.1.0.0
soubory, které jsou vytvořeny v /usr/local/lib
adresář. 32bitová verze ne. Což je důvod, proč jsem si zpočátku myslel, že 32bitová verze Debian Wheezy tímto problémem netrpí, ale jakmile získáte 32bitovou verzi, budete moci používat nové knihovny openssl v /usr/local/lib
dir.
Pomocí ldd
Příkaz k otestování, jaké knihovny binární soubory používají, byl také neocenitelný při zjišťování tohoto.
Zkompiloval jsem a nainstaloval openssl. Poté jsem nainstaloval ssh přes apt-get.
Pravděpodobně se jedná o dvě různé verze OpenSSL. Pravděpodobně budete v pořádku, protože 1.0.0 je binárně kompatibilní s 1.0.1, 1.0.2 atd. (nebude však binárně kompatibilní s 1.1.0).
Vaše ssh
pravděpodobně používá verzi OpenSSL v /usr/lib/x86_64-linux-gnu/
. Měli byste použít LD_PRELOAD
abyste se ujistili, že se používá vaše verze OpenSSL (samozřejmě za předpokladu binární kompatibility).
Pokud nechcete používat LD_PRELOAD
a přátelé, pak postavte ssh
ze zdrojů. Nezapomeňte zadat rpath
abyste zajistili, že editor odkazů použije vaši verzi OpenSSL, nikoli verzi systému. Tedy vaše LDFLAGS
by měl obsahovat něco jako -Wl,-rpath,<path to your openssl>
. To je doplněk k obvyklému -lcrypto
, -lssl
a -L<path to your openssl>
.
Pokud používáte Mac OS X, mějte na paměti, že možnosti linkeru jako -Bstatic
a -rpath
jsou tiše ignorovány. Setkáte se se záhadnými pády kvůli nekompatibilním binárním souborům, protože OS X poskytuje 0.9.8.
nejsou k dispozici žádné informace o verzi
Pokud jde o žádné informace o verzi, netuším. ssh
můžete použít buď OPENSSL_VERSION_NUMBER
v době kompilace nebo SSLeay
/SSLeay_version
za běhu. Viz OPENSSL_VERSION_NUMBER(3)
pro podrobnosti.
Jak tuto chybu opravit?
Možná to čtu špatně, ale nikde v příspěvku nevidím chybu.