Apache 2.4系でHTTP/2サーバを構築してみるテスト。
OpenSSL1.1.0と以前のバージョンとの互換性OpenSSLは、暗号通信のライブラリといったイメージがありますが、コマンドライン上で、ファイルを暗号化する機能もあります。 OpenSSL1.1.0系は出たばかりですので、まだまだOpenSSL1.0.2系以前を使うホストマシンと暗号ファイルのやり取りをすることがあると思います。 このバージョンの違いに落とし穴があって、嵌まったので自戒の念込めて書いてみたいと思います。
ファイルの暗号化コマンド今回のお話の対象、はopensslの、encコマンドです。 以下のような使い方で、ファイルを暗号化し、 $ /usr/local/ssl/bin/openssl enc -e -aes-128-cbc -pass pass:[pass_phrase] -in [src_path] -out [enc_path] 同様に、以下のような使い方で、ファイルを復号化する使い方です。 $ /usr/local/ssl/bin/openssl enc -d -aes-128-cbc -pass pass:[pass_phrase] -in [enc_path] -out [dec_path] 図にすると、以下のような感じです。 SALTは、送信側ホストで疑似乱数から生成します。 このSALTによって、同一内容の平文を暗号化しても毎回、内容が異なる暗号化ファイルに見せることができます。 同一バージョンの、OpenSSLを使ったホスト間では、問題なく上記コマンドで、暗号化ファイルのやり取りが行えるのですが、片方が、OpenSSL1.0.2で、片方がOpenSSL1.1.0だと、うまく復号化できなくなっています。
変更されたのは、パスフレーズから鍵を生成するデフォルトの一方向関数上記の図のように、OpenSSLのファイル暗号化では、一般に、パスフレーズから、初期値IV(Initial Vector)と鍵を生成しています。 OpenSSL1.0.2以前では、パスフレーズから初期値IVと鍵を生成するための一方向関数として、MD5がデフォルトで利用されます。 一方、OpenSSL1.1.0では、パスフレーズから初期値IVと鍵を生成するための一方向関数として、SHA256がデフォルトで利用されます。 そのため、同じコマンドを使っても、異なる鍵生成処理が行われ、復号化に失敗してしまいます。 対策としては、2通り有ります。 ここでは、送信側が、OpenSSL1.1.0で、受信側が、OpenSSL 1.0.2の場合を例にしましす。 送信受信のOpenSSLのバージョンが逆の場合は、それぞれ、一方向関数が適合するように、変更して下さい。 OpenSSL 1.0.2以前が、SHA256による鍵生成に対応している場合パスフレーズから、鍵と初期値を生成する際の、一方向関数の選択は-mdオプションを使います。 ヘルプを見ると、-mdオプションには、md2, md5, sha or sha1としか表示されないので、SHA256はつかえないと勘違いしてしまいますが、OpenSSL 1.0.2ではmdオプションにSHA256を指定することができます。 この場合は、以下のように、受信側ホスト(OpenSSL1.0.2以前)で、
$ /usr/local/ssl/bin/openssl enc -d -aes-128-cbc -md sha256 -pass pass:[pass_phrase] -in [enc_path] -out [dec_path]
とすると、復号化できるようになります。 当然、パスフレーズからの鍵生成は、暗号強度の高い一方向関数を使った方が良いので、SHA256を使うこの方法が推奨です。 OpenSSL 1.0.2以前が、SHA256による鍵生成に対応していない場合とはいえ、復号側ホストをいじれなかったり、復号側ホストに、OpenSSL0.9.8などがインストールされている場合も考えられます。 この場合、送信側ホストのOpenSSL1.1.0側で、md5を使った鍵生成で暗号化を行う必要があります。 この場合は、送信側ホスト(OpenSSL1.1.0)で、
$ /usr/local/ssl/bin/openssl enc -e -aes-128-cbc -md md5 -pass pass:[pass_phrase] -in [src_path] -out [enc_path]
とすると、受信側ホストで、復号化できるようになります。
openssl encコマンドのリファレンスということで、最後に、OpenSSLのencコマンドのリファレンスを載せておきます。 /usr/local/ssl/bin/openssl enc [オプション] オプション
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||