手元の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は、アルゴリズムやコマンドの一覧を表示する。
| オプション | 表示内容 |
|---|---|
-commands | opensslのサブコマンド |
-cipher-algorithms | 暗号アルゴリズム |
-digest-algorithms | ハッシュアルゴリズム |
-mac-algorithms | MACアルゴリズム |
-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で変換する。
