OpenSSLコマンドチートシート:よく使うコマンド一覧とオプション早見表

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で鍵を生成する主なコマンドは genrsaecparamです。

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の公式ドキュメントを参照してください。 また、利用する際には、常にセキュリティベストプラクティスに従い、パスワードの管理や鍵の保護に十分注意してください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール