RSA Tools
RSA鍵 操作 でよく使用 されるCLIツールコマンドのまとめ 。
ツールコマンド一覧
| ツール | 機能 | コマンド例 | 説明 / 使用シーン |
|---|---|---|---|
| OpenSSL | 秘密鍵生成(PEM, PKCS#1) | openssl genrsa -out private.pem 2048 | 2048-bit RSA秘密鍵を生成 |
| OpenSSL | 公開鍵生成(PEM) | openssl rsa -in private.pem -pubout -out public.pem | 秘密鍵から公開鍵を生成 |
| OpenSSL | PKCS#8秘密鍵に変換(DER) | openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -out private_pkcs8.der -nocrypt | Javaで PKCS8EncodedKeySpec が使用可能 |
| OpenSSL | 公開鍵をDERに変換(X.509) | openssl rsa -in private.pem -pubout -outform DER -out public.der | Javaで X509EncodedKeySpec が使用可能 |
| OpenSSL | 秘密鍵の正確性を検証 | openssl rsa -in private.pem -check | RSA key ok と表示される |
| OpenSSL | 公開鍵の正確性を検証 | openssl rsa -pubin -in public.pem -text -noout | 公開鍵の詳細情報を表示 |
| OpenSSL | 署名(秘密鍵) | openssl dgst -sha256 -sign private.pem -out sig.bin message.txt | ファイルに署名 |
| OpenSSL | 検証(公開鍵) | openssl dgst -sha256 -verify public.pem -signature sig.bin message.txt | 署名を検証 |
| OpenSSL | PEM ↔ DER 変換 | openssl rsa -in private.pem -outform DER -out private.der | バイナリDERファイル、プログラムで使用可能 |
| keytool | KeyPairを生成してkeystoreに保存 | keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore mykeystore.jks -storepass changeit | JKS形式で公開鍵/秘密鍵を保存 |
| keytool | 公開鍵をエクスポート(PEM/X.509) | keytool -exportcert -alias mykey -keystore mykeystore.jks -rfc -file public.pem | -rfc でPEM可読形式を生成 |
| keytool | 秘密鍵をエクスポート(PKCS#12→PEM) | keytool -importkeystore -srckeystore mykeystore.jks -destkeystore mykeystore.p12 -deststoretype PKCS12openssl pkcs12 -in mykeystore.p12 -nodes -nocerts -out private.pem | 秘密鍵をPEMに変換、プログラムやOpenSSLで使用可能 |
| ssh-keygen | RSA秘密鍵を生成(PEM) | ssh-keygen -t rsa -b 2048 -m PEM -f private.pem | PEM秘密鍵を生成、OpenSSHまたはPEM形式を指定可能 |
| ssh-keygen | 対応する公開鍵を生成 | ssh-keygen -f private.pem -e -m PEM > public.pem | 秘密鍵からPEM公開鍵をエクスポート |
Java読み込み対応関係
| Java KeySpec | 対応するOpenSSL / PEM形式 |
|---|---|
| PKCS8EncodedKeySpec | 秘密鍵(PKCS#8, DER) |
| X509EncodedKeySpec | 公開鍵(X.509, DER) |
ワークフロー
┌──────────────────────────┐
│ 1️⃣ RSA Key Pair生成 │
│ │
│ ツール: OpenSSL / keytool / ssh-keygen │
│ 出力: 公開鍵/秘密鍵 (PEM / DER / JKS) │
└──────────────┬───────────┘
│
▼
┌──────────────────────────┐
│ 2️⃣ 鍵の正確性を確認 │
│ │
│ OpenSSL: │
│ - 秘密鍵: rsa -in private.pem -check │
│ - 公開鍵: rsa -pubin -in public.pem -text -noout │
└──────────────┬───────────┘
│
▼
┌──────────────────────────┐
│ 3️⃣ 署名テスト (公開鍵/秘密鍵ペアの検証) │
│ │
│ OpenSSL: │
│ - 署名: dgst -sha256 -sign private.pem -out sig.bin message.txt │
│ - 検証: dgst -sha256 -verify public.pem -signature sig.bin message.txt │
│ 検証成功 → 公開鍵/秘密鍵ペアが正しい │
└──────────────┬───────────┘
│
▼
┌──────────────────────────┐
│ 4️⃣ Javaで鍵を読み込んで使用 │
│ │
│ - 秘密鍵: PKCS8EncodedKeySpec(DER) │
│ - 公開鍵: X509EncodedKeySpec(DER) │
│ - Signature APIで署名/検証 │
└──────────────┬───────────┘
│
▼
┌──────────────────────────┐
│ 5️⃣ ファイル形式の変換/保存 │
│ │
│ - PEM (可読) │
│ - DER (プログラム用) │
│ - JKS / PKCS12 (Java keystore) │
└──────────────────────────┘一般的なフォーマット説明
| 形式 | 説明 | ファイル拡張子 |
|---|---|---|
| PEM | Base64エンコード、header/footer付き | .pem, .crt, .key |
| DER | バイナリ形式、プログラムで直接読み込み | .der, .cer |
| PKCS#1 | RSA専用秘密鍵形式 | .pem |
| PKCS#8 | 汎用秘密鍵形式、Javaが好む | .pem, .der |
| PKCS#12 | 公開鍵/秘密鍵と証明書を含むコンテナ形式 | .p12, .pfx |
| JKS | Java KeyStore専用形式 | .jks |
| X.509 | 公開鍵/証明書の標準形式 | .pem, .der, .crt |