RSA Tools

RSA(かぎ) 操作(そうさ) でよく使用(しよう) されるCLIツールコマンドのまとめ(まとめ)

ツールコマンド一覧

ツール機能コマンド例説明 / 使用シーン
OpenSSL秘密鍵生成(PEM, PKCS#1)openssl genrsa -out private.pem 20482048-bit RSA秘密鍵を生成
OpenSSL公開鍵生成(PEM)openssl rsa -in private.pem -pubout -out public.pem秘密鍵から公開鍵を生成
OpenSSLPKCS#8秘密鍵に変換(DER)openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -out private_pkcs8.der -nocryptJavaで PKCS8EncodedKeySpec が使用可能
OpenSSL公開鍵をDERに変換(X.509)openssl rsa -in private.pem -pubout -outform DER -out public.derJavaで X509EncodedKeySpec が使用可能
OpenSSL秘密鍵の正確性を検証openssl rsa -in private.pem -checkRSA 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署名を検証
OpenSSLPEM ↔ DER 変換openssl rsa -in private.pem -outform DER -out private.derバイナリDERファイル、プログラムで使用可能
keytoolKeyPairを生成してkeystoreに保存keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore mykeystore.jks -storepass changeitJKS形式で公開鍵/秘密鍵を保存
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 PKCS12
openssl pkcs12 -in mykeystore.p12 -nodes -nocerts -out private.pem
秘密鍵をPEMに変換、プログラムやOpenSSLで使用可能
ssh-keygenRSA秘密鍵を生成(PEM)ssh-keygen -t rsa -b 2048 -m PEM -f private.pemPEM秘密鍵を生成、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) │
└──────────────────────────┘

一般的なフォーマット説明

形式説明ファイル拡張子
PEMBase64エンコード、header/footer付き.pem, .crt, .key
DERバイナリ形式、プログラムで直接読み込み.der, .cer
PKCS#1RSA専用秘密鍵形式.pem
PKCS#8汎用秘密鍵形式、Javaが好む.pem, .der
PKCS#12公開鍵/秘密鍵と証明書を含むコンテナ形式.p12, .pfx
JKSJava KeyStore専用形式.jks
X.509公開鍵/証明書の標準形式.pem, .der, .crt