web-dev-qa-db-ja.com

UbuntuにOpenSSL1.0.0をインストールしてビルドするにはどうすればよいですか?

これをフォローアップの質問と見なすことができます buntuにOpenSSL C++ライブラリをインストールするにはどうすればよいですか?

OpenSSL1.0.0を必要とするUbuntu10.04LTSでコードをビルドしようとしています。

Ubuntu 10.04LTSにはOpenSSL0.9.8kが付属しています。

$ openssl version
OpenSSL 0.9.8k 25 Mar 2009

したがって、Sudo apt-get install libssl-devを実行してビルドした後、lddを実行すると、0.9.8でリンクしたことが確認されます。

$ ldd foo
        ...
        libssl.so.0.9.8 => /lib/i686/cmov/libssl.so.0.9.8 (0x00110000)
        ...
        libcrypto.so.0.9.8 => /lib/i686/cmov/libcrypto.so.0.9.8 (0x002b0000)
        ...

OpenSSL 1.0.0および1.0.0開発パッケージをインストールするにはどうすればよいですか?

Update:読んだ後にこの更新を書いています [〜#〜] sb [〜#〜] の答え(しかし、試す前に)、OpenSSL1.0.0をダウンロードしてインストールするという明白な解決策が機能しないことは明らかなので説明する必要があります。

以下を正常に実行した後(INSTALLファイルで推奨):

  $ ./config
  $ make
  $ make test
  $ make install

...私はまだ得ます:

OpenSSL 0.9.8k 25 Mar 2009

...そして:

$ Sudo apt-get install libssl-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libssl-dev is already the newest version.
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.32-21 linux-headers-2.6.32-21-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

...そして(念のために)コードを再構築した後でも、lddは同じものを返します。

アップデート#2:「-I/usr/local/ssl/include」と「-L/usr/local/ssl/lib」を追加しましたオプション( [〜#〜] sb [〜#〜] )をメイクファイルに追加しましたが、次のような未定義の参照コンパイルエラーが多数発生しています。

/home/dspitzer/foo/foo.cpp:86: undefined reference to `BIO_f_base64'
/home/dspitzer/foo/foo.cpp:86: undefined reference to `BIO_new'

/ usr/local/ssl/include /にはopensslディレクトリ(多数の.hファイルが含まれています)のみが含まれているため、「-I/usr/local/ssl/include/openssl」も試しましたが、同じエラーが発生しました。

更新#3:OpenSSLインクルードを(たとえば)から変更してみました:

#include <openssl/bio.h>

...に:

#include "openssl/bio.h"

... .cppソースファイルにありますが、同じ未定義の参照エラーが発生します。

更新#4:これらの未定義の参照エラーがリンカーエラーであることに気付きました。 Makefileから「-L/usr/local/ssl/lib」を削除しても、エラーは発生しません(ただし、OpenSSL 0.9.8にリンクしています)。/usr/local/ssl/lib /の内容は次のとおりです。

$ ls /usr/local/ssl/lib/
engines  libcrypto.a  libssl.a  pkgconfig

-lcryptoを追加すると、エラーはなくなりました。

12
Daryl Spitzer

ここ から1.0.0aソースを取得します。

# tar -xf openssl-1.0.0a.tar.gz
# cd openssl-1.0.0a
# ./config
# Sudo make install

これにより、デフォルトで/ usr/local/sslに配置されます

ビルドするときは、/ usr/local/ssl/includeでヘッダーを探し、/ usr/local/ssl/libのlibsとリンクするようにgccに指示する必要があります。これは、次のようにして指定できます。

gcc test.c -o test -I/usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto

[〜#〜] edit [〜#〜]システムライブラリを上書きしないでください。新しいライブラリを/ usr/localに保持することをお勧めします。 Ubuntuのデフォルトを上書きすると、健康に害を及ぼし、システムを破壊する可能性があります。

さらに、Ubuntu 10.04 VMでこれを試したばかりなので、パスについて間違っていました。修繕。

デフォルトでリンクするopensslライブラリは静的ライブラリであるため、LD_LIBRARY_PATHを変更する必要がないことに注意してください(少なくともデフォルトでは、。/ configステップで動的ライブラリとして構成する方法がある可能性があります)。

Libcryptoパッケージでビルドおよび定義されているいくつかの呼び出しを使用しているため、libcryptoに対してリンクする必要がある場合があります。 openssl 1.0.0は、実際にはlibcryptoとlibsslの2つのライブラリを構築します。

EDIT 2gcc行に-lcryptoを追加しました。

18
NG.

の代わりに:

    $ ./config
    $ make
    $ make test
    $ make install

行う:

    $ Sudo ./config --prefix=/usr
    $ Sudo make
    $ Sudo make test
    $ Sudo make install

これは、openssl 1.0.1gに更新して、CVE-2014-0160(Heartbleed)のパッチを適用するのに役立ちます。

OpenSSLセキュリティアドバイザリ[2014年4月7日]

TLSハートビート読み取りオーバーラン(CVE-2014-0160)

TLSハートビート拡張の処理における境界チェックの欠落を使用して、接続されたクライアントまたはサーバーに最大64kのメモリを公開できます。

1.0.1fおよび1.0.2-beta1を含むOpenSSLの1.0.1および1.0.2-betaリリースのみが影響を受けます。

このバグを発見してくれたGoogleSecurityのNeelMehtaと、修正の準備をしてくれたAdamLangleyとBodoMoellerに感謝します。

影響を受けるユーザーは、OpenSSL1.0.1gにアップグレードする必要があります。すぐにアップグレードできないユーザーは、代わりに-DOPENSSL_NO_HEARTBEATSを使用してOpenSSLを再コンパイルできます。

1.0.2は1.0.2-beta2で修正されます。

出典: https://www.openssl.org/news/secadv_20140407.txt

4
Mariano Ivaldi

これが私のためにそれを解決したものです: buntuで最新バージョンのOpenSSLをアップグレードする

主な情報の転記:

Download the OpenSSL v1.0.0g source:

$ wget http://www.openssl.org/source/openssl-1.0.0g.tar.gz

Unpack the archive and install:

$ tar xzvf openssl-1.0.0g.tar.gz
$ cd openssl-1.0.0g
$ ./config
$ make
$ make test
$ Sudo make install

All files, including binaries and man pages are install under the directory /usr/local/ssl. To ensure users use this version of OpenSSL instead of the previous version you must update the paths for man pages and binaries.

Edit the file /etc/manpath.config adding the following line before the first MANPATH_MAP:

MANPATH_MAP     /usr/local/ssl/bin      /usr/local/ssl/man

Update the man database (I honestly can't remember and don't know for sure if this command was necessary - maybe try without it and at the end when testing if the man pages are still the old versions come back and run mandb):

Sudo mandb

Edit the file /etc/environment and insert the path for OpenSSL binaries (/usr/local/ssl/bin) before the path for Ubuntu's version of OpenSSL (/usr/bin). My environment file looks like this:

PATH="/usr/local/sbin:/usr/local/bin:/usr/local/ssl/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

Logout and login and test:

$ openssl version
OpenSSL 1.0.0g 18 Jan 2012

Also test the man pages by running man openssl and at the very bottom in the left hand corner it should report 1.0.0g.

Note that although the users will now automatically use the new version of OpenSSL, existing programs (e.g. Apache) may not as they are linked against the libraries from the Ubuntu version.
1
Zakit