してみるテストロゴ
Apache 2.4系でHTTP/2サーバを構築してみるテスト。

OpenSSL1.1.0について

OpenSSL1.1.0は、OpenSSL1.0.2系に機能を追加し、脆弱性のある暗号のサポートや、古いプラットフォームへの対応を終了したバージョンになります。

このページでは変更された主な機能と、(追加されたもの、削除されたもの)、を紹介します。

なお、OpenSSL1.1.0は、長期サポート対象ではありません。

OpenSSL1.1.0のサポート期限は、2018年8月30日となっております。

長期サポートが必要な場合は、OpenSSL1.0.2系(2019年12月31日までサポート)をご利用ください。

後半に書きますが、Apach HTTPDサーバがOpenSSL1.1.0に対応するには、少し時間がかかる見込みです。Apache HTTPサーバ 2.4.26で対応しました。

インストール方法

ソースコンパイル時のデフォルトのインストール先が、/usr/local/ssl⇒/usr/localに変更

ライブラリのリンケージ順序が変わってしまうため、注意が必要です。

$ cd ~/src
$ curl -O https://www.openssl.org/source/openssl-1.1.0g.tar.gz
$ gzip -dc openssl-1.1.0g.tar.gz|tar xvf -
$ cd openssl-1.1.0g
$ ./Configure --help
…(省略:アーキテクチャの一覧が出ます。)…
$ ./Configure BSD-x86-elf  ←x86のOpenBSDなどの場合
$ ./Configure solaris-x86-gcc  ←x86のSolarisの場合
…(省略)…
$ gmake depend
$ gmake
…(省略)…
$ sudo gmake install

なお、./Configureにアーキテクチャ名を付けないと、カーネルのビット数からアーキテクチャを判断します。

32ビットバイナリの方が、CPUキャッシュを効率的に利用できるなどの理由で、32ビットを好む場合は注意してください。

変更された主な機能

OpenSSL1.1.0では、機能の追加と、削除が行われています。

追加された機能

OpenSSL1.1.0では、以下の機能が追加されました。

■ChaCha20 と Poly1305 の追加

■署名書透過性情報(Certificate Transparency)に対応

■ RFC5869 HMAC-based Extract-and-Expand Key Derivation Function (HKDF)のサポート追加

■X25519 のサポート追加

■RFC6698/RFC7671 DANE TLSA peer authentication.のサポート追加

■ P-224とB-233の楕円曲線を利用した、FIPS自己テスト追加

■RSA, DSA, ECDSAの各暗号に使用する疑似乱数生成セキュリティーの強度確認(FIPS186-3, SP800-57 and SP800-131A.)の追加

暗号スイート関連

暗号スイート関連では、以下の修正が行われています。

■3DES cipher suites が暗号リストのデフォルトから外れ、HIGHからMIDIUMに移動

■DES and RC4 ciphersuitesがデフォルトから除外

■Kerberos ciphersuitesのサポートが終了

■デフォルト暗号リストの変更

- RSAより、(EC)DHE のハンドシェイクを優先
- 従来の暗号より、 AEAD暗号を優先
- RSA証明書より、ECDSA証明書を優先
- TLSv1.2 の前方秘匿性を備えた暗号を優先.
- DSS, SEED, IDEA, CAMELLIA, and AES-CCM をデフォルト暗号リストから除外

ライブラリの利用方法の変更

■DH ,RSA,DSA,BIOの各構造体と関数の不透明化(パブリックヘッダファイルから移動)

これは、後述しますが、機能としては差がありません。

セキュリティーホールを突かれた際の耐性を上げるための措置といえます。

ライブラリを利用するソースファイルに、そこそこ手を入れる必要があります。

サポートの終了

■MIPS o32 ABI on IRIX,Ultrix, Netware, OS/2のサポート終了

■Sony NEWS4, BEOS and BEOS_R5, NeXT, SUNOS, MPE/iX. Sinix/ReliantUNIX RM400. DGUX. NCR. Tandem. Cray. 16-bit platforms such as WIN16.の各プラットフォームのサポート終了

NeXTのサポート終了は、時代の流れを感じてしまいます。

Apache HTTPDサーバの対応は?

機能としては、上記の変更なのですが、機能としては、同じでも、ソースコード上、利用方法が変更されている機能もあります。

そのため、Apache HTTPDサーバに限らずですが、従来のOpenSSLを利用したソフトウエアを、OpenSSL1.1.0以降に対応するためには、以下の変更を行う必要があります。

結構、変更が必要になります。

以下、ソースを追っかけて見かけた修正点。

mallocラップ関数名の変更

以下のように、CRYPTO_malloc_init();関数が、OPENSSL_malloc_init();に変わります。

  #if OPENSSL_VERSION_NUMBER < 0x10100000L
  CRYPTO_malloc_init();
  #else
  OPENSSL_malloc_init();
  #endif  

Cryptoライブラリ以外でも使用しているため、単に名称だけを変更したと思われます。

呼び出さなければならない関数の追加

init_bio_methods();とfree_bio_methods();のの追加

bioの利用に、初期化と終了処理が必要になります。

SSL_CTX_set_max_proto_version(ctx, prot); SSL_CTX_set_min_proto_version(ctx, prot);の追加

これは、SSL(TLS)の使用するプロトコルバージョンの最低と最高を指定します。

DH ,RSA,DSA,BIOの各構造体と関数の不透明化

これが一番大きいのですが、OpenSSL1.1.0では、一部構造体の秘密鍵に係わる部分へのアクセスを制限する目的で、構造体への直接参照ができません。

たとえば、DH構造体では、従来の

  DH *dh = DH_new();
  dh->p = p;
  dh->q = q;
  dh->g = g;
といった記述の代わりに、
  DH *dh = DH_new();
  DH_set0_pqg(dh,p,q,g);

といった記述になります。

このようにOpenSSL1.1.0では、直接、DH構造体の中の変数を参照できなくなりました。

代わりに、関数経由の設定・参照となります。

以上の通り、かなりの変更点が加わるため、mod_sslが、OpenSSL1.1.0に対応するには、少々時間がかかる見込みです。Apache HTTPサーバ 2.4.26で対応しました。

Webサーバで利用できる暗号スイート

OpenSSLで使用できる暗号スイートのうち、Webサーバで使うのは以下の暗号スイートでしょうか。

つまり、前方秘匿性(Forward Secrecy)に対応した暗号スイートです。

待望のCHACHA20-POLY1305が、TLSv1.2のくくりで、追加されています。

序列としては、AES256-GCM-SHA386⇒CHACHA20-POLY1305⇒AES128-GCM-SHA256⇒AES256-CBC-SHA386⇒AES128-CBC-SHA256のようです。

    ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
    ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
    DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
    ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
    ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
    DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH       Au=RSA  Enc=CHACHA20/POLY1305(256) Mac=AEAD
    ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
    ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
    DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
    ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
    ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
    DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
    ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
    ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
    DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256

ここから下は、SHA1なので、徐々に利用を抑えていった方が良いでしょう。

    ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
    ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
    DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
    ECDHE-ECDSA-AES128-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
    ECDHE-RSA-AES128-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
    DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1

SSLv3とともに、こちらの暗号の使用も終息していくことになるようですね。

NEXT >> OpenSSL1.1.0系の暗号スイート

©Copyrights 2015-2023, non-standard programmer

このサイトは、あくまでも私の個人的体験を、綴ったものです。 軽く参考程度にご利用ください。