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 |