本文へスキップ
ecdsa.com
OpenSSL (client side)OpenSSL CLI

エラーメッセージ

SSL routines:ssl_choose_client_version:unsupported protocol

別の表記

  • error:0A000102:SSL routines::unsupported protocol

openssl CLI は「<thread>:error:0A000102:SSL routines:ssl_choose_client_version:unsupported protocol:<source>」と出力します。curl、Node.js などのアプリケーションでは「error:0A000102:SSL routines::unsupported protocol」と表示されます。OpenSSL 1.1.1 ではコード 1425F102 でした。

OpenSSL (client side) — SSL_R_UNSUPPORTED_PROTOCOL: the server chose a version the client does not allow

このエラーの意味

クライアントは TLS 1.2 と 1.3 を提示しましたが、サーバーの ServerHello はそれより古いバージョン(通常は TLS 1.0)を選択しました。クライアントの OpenSSL は、そのバージョンの使用を許可されていません。クライアントは ssl_choose_client_version で処理を中止します。古い TLS スタックはクライアントが提示した範囲を無視し、単に自分のバージョンで応答します。最近のスタックであれば、代わりに protocol_version アラートで拒否するはずです。

発生する理由

修正方法

  1. 1.

    サーバーのバージョンを確認する

    この診断用のコマンドに限ってセキュリティレベル 0 で TLS 1.0 を強制すると、サーバーが古いバージョンにしか対応していないかどうかがわかります。

    bash
    # Allowed only for this diagnostic command: which version does the server pick?
    echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com \
      -tls1 -cipher 'DEFAULT:@SECLEVEL=0' -brief 2>&1 | grep -E 'Protocol version|error'
  2. 2.

    サーバーで TLS 1.2 と 1.3 を有効にする

    サーバーをアップグレードする(または前段に最新の TLS 終端装置を置く)ことが、唯一の恒久的な修正策です。

    text
    # Server side
    ssl_protocols TLSv1.2 TLSv1.3;     # nginx
    SSLProtocol -all +TLSv1.2 +TLSv1.3 # Apache httpd

関連するエラー

署名エラーデータベースをすべて見る