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 -nocryptJava 可用 PKCS8EncodedKeySpec
OpenSSL轉公鑰成 DER(X.509)openssl rsa -in private.pem -pubout -outform DER -out public.derJava 可用 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驗證簽章
OpenSSLPEM ↔ DER 轉換openssl rsa -in private.pem -outform DER -out private.der二進位 DER 檔案,可供程式使用
keytool產生 KeyPair 並存在 keystorekeytool -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-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) │
└──────────────────────────┘

常用格式說明

格式說明檔案副檔名
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