LoginSignup
1
0

More than 5 years have passed since last update.

CentOS7でOpenSSLを利用しているときにSSLv2のClient Helloが受付られなかった時について

Posted at

CentOS7を利用して外部連携用にApacheでHTTPサーバを立てた時にHTTPS通信が受けられない事態が発生した

前提条件

  • CentOS7(CentOS Linux release 7.6.1810 (Core))
  • Apache2(httpd-2.4.6-88)
  • OpenSSL(openssl-1.0.2k-16)

発生した事象

外部連携先から正常にHTTP通信出来なかった。
アクセスログに何も表示されず、外部連携先ではエラー結果として下記のような文言が表示されたらしい
Remote host closed connection during handshake

以前からTLS1.0が利用されている事は認識していたので、プロトコル指定(SSLProtocol)でTLS1.0も許可しても結果は変わらず。
暗号化方式が一致しないのかと思い、暗号化方式(SSLCipherSuite)の設定を緩くしても結果は変わらず。

仕方が無いので、最後の手段でtcpdumpを利用したパケットキャプチャにて状況の把握を開始する。
結果としては、下記の結果につきるものだった。

SSLv2 Record Layer: Client Hello

えええ!!SSLv2ですか!!
とはいえ、ちょいと昔はTLSを利用していてもハンドシェイクは互換性のために
SSLv2の方式を許可する事が一般的だったらしいのですが、CentOS7に標準で導入されるOpenSSLではもう対応していないとのこと。

対応策

別途古いOpenSSLを導入
TLSで利用するモジュールをOpenSSLからNSSに変更したことで、SSLv2のハンドシェイクに対応できました。
以下はNSSの設定内容となります。
鍵をストアのようなところに格納してNSSNicknameNSSCertificateDatabaseで指定するところ以外はOpenSSLの設定と同じようなものです。
※連携先とは接続元IPの制限をかけていて、一般に公開しているサービスではないのでで、全体的に脆弱な部分は目をつむる感じで。。。

Listen 14443
<VirtualHost *:14443>
    DocumentRoot {DocumentRoot}

    NSSPassPhraseDialog  builtin
    NSSPassPhraseHelper /usr/libexec/nss_pcache
    NSSSessionCacheSize 10000
    NSSSession3CacheTimeout 86400
    NSSRenegotiation off
    NSSRequireSafeNegotiation off

    NSSEngine on
    NSSCipherSuite +rsa_aes_256_sha
    NSSProtocol TLSv1.0
    NSSNickname {NSSNickname}
    NSSCertificateDatabase /etc/httpd/alias

</VirtualHost>

最後に

今回、CentOS5からCentOS7にサーバのバージョンを上げた事で、今まで接続出来ていた通信が接続不能となりました。
新しくなることで接続不能になる可能性は想定していましたが、設定レベルでどうにか出来ると高を括っていました。
でも、yumでインストール可能な基本パッケージだけでどうにか出来てよかった。

その他

SSLv2を利用したハンドシェイクで正常に通信出来るかの検証のために、Java1.4を別途準備してHTTPS通信を実行した。
まさか、今更Java1.4を利用することが来るとは思わなかった。
古いものの検証には、古いものが必要なんですね。。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0