手元のopensslで使えるTLSの暗号スイートや、ハッシュ・暗号アルゴリズムの一覧を確認したいときは、openssl ciphersやopenssl listを使う。処理速度を比較したいときはopenssl speedを使う。

$ openssl ciphers -v
TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256   TLSv1.3 Kx=any      Au=any   Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD
...

実行例はUbuntu 24.04のOpenSSL 3.0.13のもの。

バージョンと設定を確認する

openssl versionで、バージョンを確認できる。-aを付けると、ビルドの情報や設定ファイルの場所も表示する。

$ openssl version
OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
$ openssl version -a
OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
built on: Wed Sep 16 18:47:02 2026 UTC
platform: debian-arm64
...
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/aarch64-linux-gnu/engines-3"
MODULESDIR: "/usr/lib/aarch64-linux-gnu/ossl-modules"

OPENSSLDIRは、設定ファイル(openssl.cnf)や信頼済みCAの証明書を置くディレクトリである。-dでOPENSSLDIRだけを表示できる。

$ openssl version -d
OPENSSLDIR: "/usr/lib/ssl"

複数のopensslをインストールしている環境では、which opensslで、実行されるopensslのパスも確認する。macOSでは、/usr/bin/openssl(LibreSSL)とHomebrewのopensslが共存し、PATHの順で実行されるものが決まる。

使えるTLSの暗号スイートを一覧表示する

openssl ciphersは、TLSの暗号スイートを表示する。デフォルトでは、名前だけをコロン区切りで出力する。

$ openssl ciphers | tr ':' '\n' | head -5
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-GCM-SHA384

-vで、TLSのバージョンや鍵交換(Kx)、認証(Au)、暗号化(Enc)、MAC(Mac)の詳細を表示する。

$ openssl ciphers -v | head -4
TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256   TLSv1.3 Kx=any      Au=any   Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD

-Vを付けると、暗号スイートのコード値(16進数)も表示する。-stdnameを付けると、RFCで定義された標準の名前も表示する。

$ openssl ciphers -V -tls1_2 'ECDHE-ECDSA-AES256-GCM-SHA384' | tail -1
          0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD
$ openssl ciphers -stdname -ciphersuites '' 'ECDHE+AESGCM' | head -2
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384       - ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384         - ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH     Au=RSA   Enc=AESGCM(256)            Mac=AEAD

-stdnameの出力は、Wiresharkの表示や、ほかのツールのドキュメントに使われている名前との対応付けに使える。

暗号スイートを絞り込む

引数で暗号スイートの条件を指定すると、条件に合う暗号スイートだけを表示する。ECDHE+AESGCMのように+でつなぐと、両方の条件を満たす暗号スイートだけが残る。

$ openssl ciphers -v -ciphersuites '' 'ECDHE+AESGCM'
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH     Au=RSA   Enc=AESGCM(256)            Mac=AEAD
...

-ciphersuites ''は、TLS 1.3の暗号スイートを除外する指定である。TLS 1.3の暗号スイートは、絞り込みの条件とは別の-ciphersuitesで管理されている。そのため、条件と無関係で、常に先頭へ表示される。TLS 1.2以前だけを見る場合は、-ciphersuites ''を付ける。

TLS 1.3の暗号スイートを指定する

TLS 1.3の暗号スイートを指定して表示するには、-ciphersuitesを使う。

$ openssl ciphers -ciphersuites TLS_AES_128_GCM_SHA256 -v | head -1
TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD

s_clientやs_serverの-cipherと-ciphersuitesに渡す文字列の確認に使える。

参考: 【openssl】SNIやTLSバージョンを指定してサーバーに接続する (s_client)

アルゴリズムの一覧を表示する

openssl listは、アルゴリズムやコマンドの一覧を表示する。

オプション表示内容
-commandsopensslのサブコマンド
-cipher-algorithms暗号アルゴリズム
-digest-algorithmsハッシュアルゴリズム
-mac-algorithmsMACアルゴリズム
-kdf-algorithms鍵導出アルゴリズム
-public-key-algorithms公開鍵アルゴリズム
-providers有効なプロバイダー
-disabled無効になっている機能
$ openssl list -commands | head -6
asn1parse         ca                ciphers           cmp               
cms               crl               crl2pkcs7         dgst              
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
fipsinstall       gendsa            genpkey           genrsa            
help              info              kdf               list              

openssl dgstやopenssl encで指定できるアルゴリズムは、listで確認できる。

$ openssl list -digest-commands
blake2b512        blake2s256        md5               rmd160            
sha1              sha224            sha256            sha3-224          
...
$ openssl list -cipher-commands | head -3
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       aria-128-cbc      aria-128-cfb      
aria-128-cfb1     aria-128-cfb8     aria-128-ctr      aria-128-ecb      

-providersで、有効なプロバイダーを確認できる。OpenSSL 3.0では、defaultプロバイダーだけが有効である。MD4やRC2などの古いアルゴリズムは、legacyプロバイダーに分かれている。

$ openssl list -providers
Providers:
  default
    name: OpenSSL Default Provider
    version: 3.0.13
    status: active

参考: 【openssl】ファイルのハッシュ値を計算する (dgst)

参考: 【openssl】ファイルをパスワードで暗号化・復号する (enc)

楕円曲線を一覧表示する

EC鍵で指定できる曲線の一覧は、openssl ecparam -list_curvesで表示する。

$ openssl ecparam -list_curves | grep -E 'prime256v1|secp384r1|secp521r1'
  secp384r1 : NIST/SECG curve over a 384 bit prime field
  secp521r1 : NIST/SECG curve over a 521 bit prime field
  prime256v1: X9.62/SECG curve over a 256 bit prime field

参考: 【openssl】秘密鍵を作成する (genpkey)

処理速度を計測する

openssl speedは、ハッシュ、暗号、署名などの処理速度を計測する。アルゴリズム名を指定すると、そのアルゴリズムだけを計測する。-secondsで、1つの計測にかける秒数を指定する。

$ openssl speed -seconds 1 -bytes 1024 sha256
The 'numbers' are in 1000s of bytes per second processed.
type           1024 bytes
sha256         1992392.62k

数値は、1秒間に処理できるバイト数(1000バイト単位)である。この例は、arm64のコンテナでの結果で、環境によって値は大きく変わる。

暗号の速度を計測する

-evpを付けると、OpenSSLが提供する標準のインターフェース(EVP)経由で計測する。

$ openssl speed -seconds 1 -evp aes-256-cbc
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
AES-256-CBC     876376.31k  1033707.64k  1085442.07k  1087694.85k  1111323.41k  1102938.11k

署名の速度を計測する

RSAなどの公開鍵暗号は、1秒あたりの署名と検証の回数を表示する。

$ openssl speed -seconds 1 rsa2048
                  sign    verify    sign/s verify/s
rsa 2048 bits 0.000561s 0.000014s   1781.8  72870.7

RSAは、署名が遅く、検証が速い。署名の回数が性能の上限になるサーバーの設計などで参考にできる。

複数のプロセスで計測する

-multiで、複数のプロセスを使って計測する。CPUのコア数に応じた、全体の性能を測る場合に使う。

$ openssl speed -seconds 1 -multi 2 -bytes 1024 sha256

計測は、ほかの負荷がない状態で行う。ほかのプロセスが動いている環境では、値が低く出る。

素数を判定・生成する

openssl primeは、数値が素数かを判定する。出力の先頭の数値は16進数で、括弧内が10進数である。

$ openssl prime 97
61 (97) is prime
$ openssl prime 100
64 (100) is not prime
$ openssl prime -hex 61
61 (61) is prime

-generateと-bitsで、指定したビット数の素数を生成する。-safeを付けると、安全素数を生成する。

$ openssl prime -generate -bits 32
3425041583

エラーコードを文字列に変換する

OpenSSLのエラーメッセージに含まれる16進数のコードは、openssl errstrで、エラーの内容に変換できる。

$ openssl errstr 0A000418
error:0A000418:SSL routines::tlsv1 alert unknown ca

サーバーのログにコードだけが出力されている場合に使う。先頭の0xは省略できる。

$ openssl errstr 1C800064
error:1C800064:Provider routines::bad decrypt

バージョンによる違い

OpenSSL 3.6でも、ciphers、prime、errstr、list -providersは同じように動く。

macOS標準の/usr/bin/openssl(LibreSSL 3.3.6)では、以下が異なる。

  • openssl listがなく、'list' is an invalid commandになる。サブコマンドの一覧はopenssl helpで確認する
  • ciphersの暗号スイート名が、AEAD-CHACHA20-POLY1305-SHA256のように、OpenSSL 3.xと異なる
  • errstrが、OpenSSL 3.xのエラーコードを正しく解釈できない
  • speedの-secondsに対応していない。計測時間は-elapsedなどで調整する
$ /usr/bin/openssl errstr 0A000418
error:0A000418:dsa routines:dsa routines:reason(1048)

OpenSSL 3.xのログに出たエラーコードは、OpenSSL 3.xのopenssl errstrで変換する。

参考

openssl-ciphers - OpenSSL Documentation openssl-speed - OpenSSL Documentation