古めのJMeter環境で負荷テストを実施しようとしたところ、次のようなエラーが出てきました。
Non HTTP response code: javax.net.ssl.SSLException:Non HTTP response message: Received fatal alert: protocol_version
昨年までは出ていなかったのに。。。ということで、理由と解決方法について記録しておきます。
エラー原因
エラーの原因は、TLS1.0/1.1の無効化に起因するもののようです。
Javaのバージョンを確認してみると、Java7を利用していました。
# java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (rhel-2.6.7.2.el6_8-x86_64 u111-b01)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
Javaのドキュメントにも気になる文言の記載があります。
脚注 1 Java SE 7 リリースの SunJSSE は TLS 1.1 と TLS 1.2 をサポートしますが、クライアント接続の場合はどちらのバージョンもデフォルトで有効になりません。一部のサーバーは、上位互換性を正しく実装していないため、TLS 1.1 または TLS 1.2 クライアントとの通信を拒否します。SunJSSE は、相互運用性を確保するため、クライアント接続の場合は TLS 1.1 または TLS 1.2 をデフォルトで有効にしません。
参考:https://docs.oracle.com/javase/jp/7/technotes/guides/security/SunProviders.html
対処法
結論としては、Java8にアップデート、Java7の最新にバージョンアップの2種類で解決しました。
Java8へバージョンアップ
Java7の削除を行い、Java8へのバージョンアップを行いました。
Java8ダウンロード
下記ページよりダウンロードを行います。ダウンロードが完了したら、サーバ上へアップロードします。
https://www.java.com/ja/download/linux_manual.jsp
Java7削除
Java7の削除を行います。
# java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (rhel-2.6.7.2.el6_8-x86_64 u111-b01)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
# yum remove java*
Java8インストール
# rpm -ivh jre-8u261-linux-x64.rpm
# java -version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
Java7の最新にバージョンアップ
Java8にしなくても、Java7の最新までバージョンアップすることでもエラーの解消ができました。
#yum update java*
#java -version
java version "1.7.0_261"
OpenJDK Runtime Environment (rhel-2.6.22.1.el6_10-x86_64 u261-b02)
OpenJDK 64-Bit Server VM (build 24.261-b02, mixed mode)
システムプロパティの指定
※システムプロパティに、下記を入れることで解決するような記事もありましたが、残念ながらうまくいきませんでした
-Dhttps.protocols=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2
まとめ
JMeterで、「javax.net.ssl.SSLException」が出た場合の対処法についてまとめてみました。
JMeterの環境といえども、常に最新バージョンの構成を維持できればベストです。しかしながら、定期的に、年1、2回の頻度で行う場合は、どうしても環境が古くなりがちです。古いバージョンを使っていると、今回のようなエラーが出てくることがあるので、可能な限り最新バージョンで維持していきたいですね。