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

エラーメッセージ

SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

別の表記

  • error:0A00042E:SSL routines::tlsv1 alert protocol version
  • SSL alert number 70

OpenSSL 3.0 と 3.5 はどちらも「error:0A00042E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:<source>:SSL alert number 70」と出力します。OpenSSL 1.1.1 ではコード 1409442E でした。OpenSSL を基盤とするクライアント(curl、Python、Ruby、PHP)にも、同じ理由の文字列が表示されます。

OpenSSL (client side) — TLS alert 70 (protocol_version) received from the server

このエラーの意味

クライアントはサーバーから TLS アラート 70(protocol_version)を受け取りました。クライアントが提示したプロトコルバージョンのどれも、サーバーが受け入れられなかったということです。「tlsv1」は、TLS 1.0 以降で定義されたアラートに OpenSSL が使う系統名にすぎません。実際には、サーバーが TLS 1.0/1.1 に限定されているのにクライアントが 1.2 と 1.3 を提示しているか、サーバーが無効にしているバージョンにクライアントが制限されているかのどちらかです。

発生する理由

修正方法

  1. 1.

    サーバーが受け付けるバージョンを確認する

    各バージョンを明示的に試してください(セキュリティレベル 0 にすると、このテストに限って TLS 1.0/1.1 の SHA-1 ベースのハンドシェイクが許可されます)。

    bash
    for v in tls1 tls1_1 tls1_2 tls1_3; do
      printf '%-7s ' "$v"
      echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com -"$v" \
        -cipher 'DEFAULT:@SECLEVEL=0' >/dev/null 2>&1 && echo accepted || echo refused
    done
  2. 2.

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

    サーバーのプロトコル設定を更新してください(TLS ライブラリが TLS 1.2 より古い場合は、ライブラリも更新してください)。

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

関連するエラー

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