「Java」キーストアから秘密鍵/公開鍵を取得する
キーストアから秘密鍵/公開鍵を取得するサンプルコード書いてみました。その時のメモです。
ひとまず、取得するキーペアを keytool を使って作成する。
コマンドは以下で ( 鍵長 2,048bit、署名アルゴリズム SHA256withRSA とした )。
keytool -genkeypair -keysize 2048 -keyalg RSA -sigalg SHA256withRSA -alias sample -keystore sample -storepass sample
いちおう、中身確認しておきます。
keytool -list -v -keystore sample -storepass sample
キーストアのタイプ: JKS キーストア・プロバイダ: SUN キーストアには1エントリが含まれます 別名: sample 作成日: 2014/02/08 エントリ・タイプ: PrivateKeyEntry 証明書チェーンの長さ: 1 証明書[1]: 所有者: CN=test, OU=test, O=test, L=test, ST=test, C=JP 発行者: CN=test, OU=test, O=test, L=test, ST=test, C=JP シリアル番号: d38aae6 有効期間の開始日: Sat Feb 08 14:16:11 JST 2014終了日: Fri May 09 14:16:11 JST 2014 証明書のフィンガプリント: MD5: 0F:1F:5C:5C:EC:43:41:BB:F8:A8:52:06:9C:CC:E0:BA SHA1: 2A:CB:26:B8:01:C4:65:51:AE:43:6E:B8:24:EF:E2:27:3B:0A:CB:82 SHA256: 3B:6F:D4:07:BD:50:AE:AE:BF:EC:C2:39:6C:75:43:4C:37:A4:15:B7:36:A7:8A:11:3F:C5:65:C9:1A:E1:BD:BC 署名アルゴリズム名: SHA256withRSA バージョン: 3 拡張: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: F9 5B E5 2F 8D 5F CA EB D5 96 51 F6 27 DB D0 B2 .[./._....Q.'... 0010: 15 F1 1C 5D ...] ] ] ******************************************* *******************************************
無事作成できてそうです。
上記で作成したキーペアをコードから取得してみる。
■ KeyPairTest.java
import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import java.security.cert.X509Certificate; public class KeyPairTest { public static void main(String[] args) throws Exception { String ksType = "JKS"; String keyStoreFile = "sample"; String keyStorePass = "sample"; String alias = "sample"; String privateKeyPass = "sample"; KeyStore ks = KeyStore.getInstance(ksType); ks.load(new FileInputStream(keyStoreFile), keyStorePass.toCharArray()); PrivateKey privateKey = (PrivateKey) ks.getKey(alias, privateKeyPass.toCharArray()); X509Certificate certificate = (X509Certificate) ks .getCertificate(alias); PublicKey publicKey = certificate.getPublicKey(); System.out.println("********** PrivateKey **********"); System.out.println(privateKey.toString()); System.out.println(); System.out.println("********** PublicKey **********"); System.out.println(publicKey.toString()); } }
■ 実行結果
********** PrivateKey ********** Sun RSA private CRT key, 2048 bits modulus: 27333344419699606451717651043975503725737321416540282490169396721189906350730803641122565757644488795366183548403708802225663256830676460432823244309403325209129873612227644719528410405861747469370059639181012124868705327772766567054569178393007602412792625460665788168368983908414799642395845705241893798299718165913914219641156917094146793569842306952359613823188884305231816079825056974202565355307752014934594684235678427508639714775036879901072681932813558945424179509680585165911986815144168405330775963449009604657274139078068677401271752867446653905588243885099717844078454253119966136447824006882831199554953 public exponent: 65537 private exponent: 26424554614085595397530050732322199140260695642296095610298802774938585632079623069323336760499252652651336760299711343079688918111570550682863346093888580169981087512756444666980194798275609139331190604074500911049200179395256788614727466997637604310080033628894563479736974265977156045331888737548497906108801597502232798566437958861025867957861278299212025893001961837119088422015376375603395551532477170723673094010523185882650397507930627497350602824657092836808267522647208784079353623873336808833666631971159872187931536693645169851480274605972243263945973753873728054940708473356002454806452980350988490433753 prime p: 178717695490938222964405408092300742599638923120125984994643389970122996221777880738673621543340594182036862539857228514912976495931399141273631229629203159081015761437888929810067802655416372573354784082860226721644255442560866692984223708547595856552169768410216615224064703898922961000342553781160964952423 prime q: 152941455207414129947230744814991764166898656856228566284307316990382469101215872908954168487982929674598233922096364983952769696175944879659739845525466723463915214012920642140484016943013934324200274989529147758217889565438940217481904662361874002992523469452806327868733259276090164294185752901810190132111 prime exponent p: 67244452036422870135637471323802493427598092760107827089779992268081586948331793660603213965198829850845278138613903565150053975817818505953377061681592393606340962529516198791315774992445676965475313497707406972077234157164783431989532209730002383794191896474167745163956414444413709741175931667449657975827 prime exponent q: 149300936567202248983535733418202360439227846402657048463785788472064623429337441462016278397785737702241042642079422960745019559214618086973635901813979653738360066022317529368474998122636105959371972977174821644681720565910662347892637969146064255145225964038362916185634797575513380854313165286770992478783 crt coefficient: 91267714505039644129908348867403683138509328932499908532782716631293436544585037014459267632989481002415206073215091005267997936327520328485868708177288497836901578431504128994851500738382172959599931057193885513094621318978840264468162831277755207840732330335071898522082365725727552428505880206099520186298 ********** PublicKey ********** Sun RSA public key, 2048 bits modulus: 27333344419699606451717651043975503725737321416540282490169396721189906350730803641122565757644488795366183548403708802225663256830676460432823244309403325209129873612227644719528410405861747469370059639181012124868705327772766567054569178393007602412792625460665788168368983908414799642395845705241893798299718165913914219641156917094146793569842306952359613823188884305231816079825056974202565355307752014934594684235678427508639714775036879901072681932813558945424179509680585165911986815144168405330775963449009604657274139078068677401271752867446653905588243885099717844078454253119966136447824006882831199554953 public exponent: 65537
ようわかりませんが、とりあえず、秘密鍵/公開鍵が取得できてそうです。
コマンドリファレンス、API ドキュメントは以下あたりですね。
・keytool - 鍵と証明書の管理ツール
http://docs.oracle.com/javase/jp/7/technotes/tools/windows/keytool.html
※ 今は -genkey ではなくて -genkeypair なんですね・・・
・KeyStore (Java Platform SE 7 )
http://docs.oracle.com/javase/jp/7/api/java/security/KeyStore.html
[ 環境情報 ]
Windows 7 SP1
Java SE 7
以上です。