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に対応
インストール方法ソースコンパイル時のデフォルトのインストール先が、/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 のハンドシェイクを優先 ライブラリの利用方法の変更■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に対応
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とともに、こちらの暗号の使用も終息していくことになるようですね。
|