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

エラーメッセージ

SSL routines:tls_setup_handshake:no protocols available

別の表記

  • error:0A0000BF:SSL routines::no protocols available

openssl CLI(3.0 と 3.5)は「error:0A0000BF:SSL routines:tls_setup_handshake:no protocols available」と出力します。関数名を含めずにエラーを整形するアプリケーションでは「error:0A0000BF:SSL routines::no protocols available」と表示されます。

OpenSSL (client or server side) — SSL_R_NO_PROTOCOLS_AVAILABLE before the handshake starts

このエラーの意味

すべての制限を適用した結果、提示できるプロトコルバージョンが何も残らなかったため、OpenSSL はハンドシェイクを開始することさえ拒否しました。典型的なのは、OpenSSL のセキュリティレベル(現行のディストリビューションではデフォルトで 2)が TLS 1.0 と 1.1 を禁止しているのに、アプリケーションがそれらを要求した場合や、設定された最低バージョンが最大バージョンを上回っている場合です。サーバーには何も送信されていません。

発生する理由

修正方法

  1. 1.

    制限している設定を見つける

    openssl.cnf とシステムの暗号ポリシーで、MinProtocol、MaxProtocol、CipherString の @SECLEVEL の値を確認してください。

    bash
    openssl version -d                                  # where openssl.cnf lives
    grep -nE 'MinProtocol|MaxProtocol|CipherString' /usr/lib/ssl/openssl.cnf /etc/ssl/openssl.cnf 2>/dev/null
    update-crypto-policies --show 2>/dev/null           # RHEL/Fedora system policy
  2. 2.

    古い機器:1 つのコマンドに限ってレベルを下げる

    暗号スイートの指定文字列に @SECLEVEL=0 を追加すると、その実行に限って TLS 1.0/1.1 が再び有効になります。このような例外はシステム全体の設定に含めず、信頼できないネットワークでも使わないでください。

    bash
    # For a one-off test against a legacy device: lower the security level for this command only
    echo | openssl s_client -connect legacy.example.com:443 -tls1 -cipher 'DEFAULT:@SECLEVEL=0'
  3. 3.

    矛盾のないバージョン範囲を使う

    最低バージョンが最大バージョンを超えないようにしてください。現在の一般的な範囲は TLS 1.2〜TLS 1.3 です。

    ini
    # openssl.cnf (system_default_sect): a consistent range
    MinProtocol = TLSv1.2
    MaxProtocol = TLSv1.3

関連するエラー

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