OpenSSLコマンドチートシート:よく使うコマンド一覧とオプション早見表(詳細解説)
OpenSSLは、SSL(Secure Sockets Layer)およびTLS(Transport Layer Security)プロトコルを実装するためのオープンソースのツールキットです。暗号化、デジタル証明書、鍵の生成、署名など、セキュリティに関連する多岐にわたる機能をコマンドラインインターフェースから利用できます。本記事では、OpenSSLでよく使うコマンドとそのオプションについて、具体的な使用例と合わせて詳細に解説します。
1. OpenSSLの基本
OpenSSLのコマンドラインインターフェースは、openssl
コマンドに続けて、サブコマンド(例えば genrsa
, req
, x509
など)とオプションを指定することで利用します。
bash
openssl [subcommand] [options]
OpenSSLを利用する前に、OpenSSLがインストールされていることを確認してください。Linuxディストリビューションでは、通常、パッケージマネージャー(apt, yumなど)を使ってインストールできます。
“`bash
Debian/Ubuntuの場合
sudo apt update
sudo apt install openssl
CentOS/RHELの場合
sudo yum install openssl
“`
2. 鍵の生成 (Key Generation)
暗号化通信やデジタル署名を行うためには、まず鍵が必要です。OpenSSLで鍵を生成する主なコマンドは genrsa
と ecparam
です。
2.1. RSA鍵の生成 (genrsa
)
RSA (Rivest–Shamir–Adleman) は、公開鍵暗号方式の一つです。genrsa
コマンドを使ってRSA鍵を生成できます。
bash
openssl genrsa -out private.key 2048
genrsa
: RSA鍵を生成するコマンド。-out private.key
: 生成された秘密鍵をprivate.key
というファイルに保存することを指定します。2048
: 鍵のビット長を指定します。一般的には2048ビット以上の鍵長が推奨されます。4096ビットを選択することもできますが、計算コストが増加します。
オプション:
-
-aes128
,-aes192
,-aes256
: 秘密鍵を暗号化するアルゴリズムを指定します。パスフレーズが必要になります。-des3
も利用できますが、セキュリティ上の理由から非推奨です。bash
openssl genrsa -aes256 -out private.key 2048上記コマンドを実行すると、パスフレーズの入力を求められます。このパスフレーズを使って秘密鍵が暗号化されます。
-
-passout pass:パスフレーズ
: パスフレーズをコマンドラインで指定します。スクリプトなどで自動化する際に便利ですが、セキュリティ上のリスクがあるため、慎重に使用してください。bash
openssl genrsa -aes256 -passout pass:mysecretpassword -out private.key 2048
2.2. EC鍵の生成 (ecparam
+ genkey
)
楕円曲線暗号 (Elliptic Curve Cryptography, ECC) は、RSAに比べて短い鍵長で同等のセキュリティ強度を実現できる暗号方式です。ecparam
コマンドで楕円曲線パラメータを生成し、genkey
コマンドで鍵を生成します。
bash
openssl ecparam -name prime256v1 -genkey -noout -out ec_private.key
ecparam
: 楕円曲線パラメータを扱うコマンド。-name prime256v1
: 使用する楕円曲線の名前を指定します。prime256v1
は、NIST P-256とも呼ばれる標準的な曲線です。他にもsecp384r1
(P-384) やsecp521r1
(P-521) などがあります。-genkey
: 鍵ペアを生成します。-noout
: 標準出力にパラメータを表示しないようにします。-out ec_private.key
: 生成された秘密鍵をec_private.key
というファイルに保存することを指定します。
オプション:
-
-param_enc explicit
: 楕円曲線パラメータのエンコード方式を指定します。デフォルトはnamed_curve
ですが、explicitにすることで、証明書にパラメータが明示的に含まれるようになります。bash
openssl ecparam -name prime256v1 -genkey -noout -out ec_private.key -param_enc explicit -
-aes128
,-aes192
,-aes256
,-des3
: RSA鍵と同様に、秘密鍵を暗号化するアルゴリズムを指定します。
3. 証明書署名要求 (CSR) の作成 (req
)
CSR (Certificate Signing Request) は、認証局 (CA) に証明書の発行を依頼するために必要なファイルです。CSRには、組織の情報、ドメイン名、公開鍵などが含まれています。
bash
openssl req -new -key private.key -out csr.pem
req
: 証明書関連の操作を行うコマンド。-new
: 新しいCSRを作成することを指定します。-key private.key
: 使用する秘密鍵を指定します。-out csr.pem
: 生成されたCSRをcsr.pem
というファイルに保存することを指定します。
コマンドを実行すると、組織名、部署名、共通名(Common Name, CN)などの情報をインタラクティブに入力するように求められます。共通名は、通常、証明書を適用するドメイン名(例:example.com)を入力します。
オプション:
-
-subj "/C=JP/ST=Tokyo/L=Shibuya/O=Example Corp./OU=IT Department/CN=example.com"
: CSRに含める情報をコマンドラインで指定します。インタラクティブな入力を省略できます。C
は国コード、ST
は都道府県、L
は市区町村、O
は組織名、OU
は部署名、CN
は共通名です。bash
openssl req -new -key private.key -out csr.pem -subj "/C=US/ST=California/L=San Francisco/O=My Company/OU=IT/CN=www.example.com" -
-config openssl.cnf
: OpenSSLの設定ファイルを指定します。設定ファイルを使用することで、デフォルト値を変更したり、拡張機能を追加したりできます。 -
-sha256
: CSRの署名アルゴリズムを SHA256 に指定します。古いシステムでは SHA1 が使われることもありますが、セキュリティ上の理由から SHA256 以上が推奨されます。bash
openssl req -new -key private.key -out csr.pem -sha256 -
-extensions v3_req
: 設定ファイル (openssl.cnf
) で定義された拡張機能を CSR に含めることを指定します。例えば、Subject Alternative Name (SAN) を指定する場合に使用します。まず、
openssl.cnf
ファイルに以下のような設定を追加します。“`
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = California
localityName = Locality Name (eg, city)
localityName_default = San Francisco
organizationName = Organization Name (eg, company)
organizationName_default = My Company
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = IT
commonName = Common Name (eg, fully qualified host name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64[v3_req]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names[alt_names]
DNS.1 = www.example.com
DNS.2 = example.com
DNS.3 = mail.example.com
IP.1 = 192.168.1.1
“`そして、以下のコマンドを実行します。
bash
openssl req -new -key private.key -out csr.pem -config openssl.cnf -extensions v3_reqこれにより、Subject Alternative Name に
www.example.com
,example.com
,mail.example.com
,192.168.1.1
が含まれた CSR が作成されます。
4. 証明書の発行 (x509
)
認証局 (CA) は、CSRを受け取ると、署名して証明書を発行します。自己署名証明書を作成することもできます。
4.1. 自己署名証明書の作成
自己署名証明書は、自分で署名した証明書です。テスト環境や、内部ネットワークでの利用に適しています。
bash
openssl req -new -x509 -key private.key -out certificate.pem -days 365
req
: 証明書関連の操作を行うコマンド。-new
: 新しいCSRを作成し、自己署名証明書を生成することを指定します。-x509
: 自己署名証明書を作成することを指定します。-key private.key
: 使用する秘密鍵を指定します。-out certificate.pem
: 生成された証明書をcertificate.pem
というファイルに保存することを指定します。-days 365
: 証明書の有効期間を365日(1年間)に設定します。
オプション:
-
-subj "/C=JP/ST=Tokyo/L=Shibuya/O=Example Corp./OU=IT Department/CN=example.com"
: 自己署名証明書に含める情報をコマンドラインで指定します。bash
openssl req -new -x509 -key private.key -out certificate.pem -days 365 -subj "/C=US/ST=California/L=San Francisco/O=My Company/OU=IT/CN=www.example.com" -
-extensions v3_ca
: 設定ファイル (openssl.cnf
) で定義された拡張機能を証明書に含めることを指定します。CA 証明書を作成する場合に便利です。まず、
openssl.cnf
ファイルに以下のような設定を追加します。“`
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = California
localityName = Locality Name (eg, city)
localityName_default = San Francisco
organizationName = Organization Name (eg, company)
organizationName_default = My Company
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = IT
commonName = Common Name (eg, fully qualified host name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64[v3_req]
basicConstraints = CA:TRUE
keyUsage = keyCertSign, cRLSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer[v3_ca]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer
basicConstraints = critical, CA:true
keyUsage = keyCertSign, cRLSign
“`そして、以下のコマンドを実行します。
bash
openssl req -new -x509 -key private.key -out certificate.pem -days 365 -extensions v3_ca -config openssl.cnfこれにより、CA 証明書として機能する自己署名証明書が作成されます。
4.2. CSR を使った証明書の発行 (x509
)
認証局 (CA) がCSRに基づいて証明書を発行する際にも、x509
コマンドが使用されます。
bash
openssl x509 -req -in csr.pem -CA ca.crt -CAkey ca.key -CAcreateserial -out certificate.pem -days 365 -sha256
x509
: 証明書関連の操作を行うコマンド。-req
: 入力ファイルが CSR であることを指定します。-in csr.pem
: 入力 CSR ファイルを指定します。-CA ca.crt
: CA 証明書を指定します。-CAkey ca.key
: CA の秘密鍵を指定します。-CAcreateserial
: CA のシリアル番号ファイルが存在しない場合に作成します。-out certificate.pem
: 生成された証明書をcertificate.pem
というファイルに保存することを指定します。-days 365
: 証明書の有効期間を365日に設定します。-sha256
: 証明書の署名アルゴリズムを SHA256 に指定します。
5. 証明書の確認 (x509
)
発行された証明書の内容を確認するには、x509
コマンドを使用します。
bash
openssl x509 -in certificate.pem -text -noout
-in certificate.pem
: 確認する証明書ファイルを指定します。-text
: 証明書の内容をテキスト形式で表示することを指定します。-noout
: 証明書の内容を標準出力に出力しないようにします(-text
オプションと組み合わせて使用します)。
オプション:
-
-dates
: 証明書の有効期限を表示します。bash
openssl x509 -in certificate.pem -dates -noout -
-subject
: 証明書のサブジェクト(Subject)を表示します。bash
openssl x509 -in certificate.pem -subject -noout -
-issuer
: 証明書の発行者(Issuer)を表示します。bash
openssl x509 -in certificate.pem -issuer -noout -
-serial
: 証明書のシリアル番号を表示します。bash
openssl x509 -in certificate.pem -serial -noout
6. 証明書の検証 (verify
)
証明書が信頼できるかどうかを検証するには、verify
コマンドを使用します。
bash
openssl verify -CAfile ca.crt certificate.pem
verify
: 証明書を検証するコマンド。-CAfile ca.crt
: 信頼されたCA証明書ファイル (chain certificate) を指定します。自己署名証明書を検証する場合は、その証明書自身を指定します。certificate.pem
: 検証する証明書ファイルを指定します。
オプション:
-
-verbose
: 詳細な検証情報を表示します。bash
openssl verify -CAfile ca.crt certificate.pem -verbose -
-untrusted intermediate.pem
: 中間CA証明書を指定します。ルートCA証明書以外の中間証明書が必要な場合に指定します。bash
openssl verify -CAfile root.crt -untrusted intermediate.pem certificate.pem
7. 証明書形式の変換 (x509
, pkcs12
)
証明書の形式を変換する必要がある場合があります。例えば、PEM形式からDER形式へ、またはPKCS12形式へ変換できます。
7.1. PEM形式とDER形式の変換
PEM形式は、テキスト形式でエンコードされた証明書です。DER形式は、バイナリ形式でエンコードされた証明書です。
-
PEM から DER への変換:
bash
openssl x509 -in certificate.pem -out certificate.der -outform DER -
DER から PEM への変換:
bash
openssl x509 -in certificate.der -inform DER -out certificate.pem -outform PEM
7.2. PKCS12形式への変換 (pkcs12
)
PKCS12形式 (または PFX形式) は、証明書、秘密鍵、中間証明書などを一つのファイルにまとめて格納するための形式です。
bash
openssl pkcs12 -export -in certificate.pem -inkey private.key -out certificate.pfx
pkcs12
: PKCS12形式のファイルを扱うコマンド。-export
: PKCS12ファイルをエクスポートすることを指定します。-in certificate.pem
: 証明書ファイルを指定します。-inkey private.key
: 秘密鍵ファイルを指定します。-out certificate.pfx
: 生成されたPKCS12ファイルをcertificate.pfx
というファイルに保存することを指定します。
コマンドを実行すると、エクスポートパスワードの入力を求められます。このパスワードは、PKCS12ファイルを保護するために使用されます。
オプション:
-
-certfile ca.crt
: 中間CA証明書ファイルを追加します。bash
openssl pkcs12 -export -in certificate.pem -inkey private.key -certfile ca.crt -out certificate.pfx -
-passout pass:パスフレーズ
: パスフレーズをコマンドラインで指定します。bash
openssl pkcs12 -export -in certificate.pem -inkey private.key -passout pass:mypassword -out certificate.pfx
7.3. PKCS12形式からの抽出 (pkcs12
)
PKCS12ファイルから証明書や秘密鍵を抽出することもできます。
-
証明書の抽出:
bash
openssl pkcs12 -in certificate.pfx -nokeys -out certificate.pemパスワードの入力を求められます。
-
秘密鍵の抽出:
bash
openssl pkcs12 -in certificate.pfx -nocerts -out private.keyパスワードの入力を求められます。
オプション:
-
-nodes
: 秘密鍵を暗号化せずに抽出します。bash
openssl pkcs12 -in certificate.pfx -nocerts -nodes -out private.key -
-passin pass:パスフレーズ
: PKCS12ファイルのパスフレーズをコマンドラインで指定します。bash
openssl pkcs12 -in certificate.pfx -nocerts -nodes -passin pass:mypassword -out private.key
8. 暗号化と復号 (enc
)
enc
コマンドは、ファイルを暗号化および復号化するために使用されます。
“`bash
暗号化
openssl enc -aes-256-cbc -salt -in plaintext.txt -out ciphertext.enc
復号化
openssl enc -aes-256-cbc -d -salt -in ciphertext.enc -out plaintext.txt
“`
enc
: 暗号化と復号化を行うコマンド。-aes-256-cbc
: 使用する暗号化アルゴリズムを指定します (AES-256-CBC)。-salt
: ソルトを使用して暗号化することを指定します。セキュリティのために推奨されます。-in plaintext.txt
: 入力ファイル (暗号化するファイルまたは復号化するファイル) を指定します。-out ciphertext.enc
: 出力ファイルを指定します。-d
: 復号化モードを指定します。
オプション:
-
-k password
: パスワードをコマンドラインで指定します。セキュリティ上のリスクがあるため、慎重に使用してください。bash
openssl enc -aes-256-cbc -salt -in plaintext.txt -out ciphertext.enc -k mysecretpassword -
-pass pass:パスフレーズ
: パスフレーズをコマンドラインで指定します。bash
openssl enc -aes-256-cbc -salt -in plaintext.txt -out ciphertext.enc -pass pass:mypassword
9. SSL/TLS のテスト (s_client
)
s_client
コマンドは、SSL/TLS サーバーへの接続をテストするために使用されます。
bash
openssl s_client -connect example.com:443
s_client
: SSL/TLS クライアントとして動作するコマンド。-connect example.com:443
: 接続先のサーバーとポートを指定します。
オプション:
-
-tls1_2
,-tls1_3
: 使用する TLS プロトコルのバージョンを指定します。bash
openssl s_client -connect example.com:443 -tls1_2 -
-cipher TLS_AES_128_GCM_SHA256
: 使用する暗号スイートを指定します。bash
openssl s_client -connect example.com:443 -cipher TLS_AES_128_GCM_SHA256 -
-cert client.crt
,-key client.key
: クライアント証明書と秘密鍵を指定します。クライアント認証が必要な場合に指定します。bash
openssl s_client -connect example.com:443 -cert client.crt -key client.key
10. その他便利なコマンド
-
version
: OpenSSL のバージョンを表示します。bash
openssl version -
ciphers
: 使用可能な暗号スイートの一覧を表示します。bash
openssl ciphers -
dgst
: ファイルのハッシュ値を計算します。bash
openssl dgst -sha256 filename.txt
まとめ
OpenSSLは強力なツールキットであり、そのコマンドとオプションは多岐にわたります。本記事では、よく使うコマンドとそのオプションについて、具体的な使用例と合わせて詳細に解説しました。これらのコマンドを理解し、適切に利用することで、セキュリティに関する様々なタスクを効率的に実行できます。 より詳しい情報は、OpenSSLの公式ドキュメントを参照してください。 また、利用する際には、常にセキュリティベストプラクティスに従い、パスワードの管理や鍵の保護に十分注意してください。