2011-02-05 28 views
12

プログラムでjks型(つまりデフォルト型)のJavaキーストアを作成しました。
最初は空ですので、DSA証明書を作成しました。keytool - 公開鍵と秘密鍵を参照

keytool -genkey -alias myCert -v -keystore trivial.keystore 

パブリックキーとプライベートキーはどうやって見ることができますか?
I.自分の証明書の秘密鍵を印刷するコマンドがありますか?
私は私の理解では、全体としての証明書を印刷しkeytool -certreqを見つけることができる:

-----BEGIN NEW CERTIFICATE REQUEST----- 
MIICaTCCAicCAQAwZTELMAkGA1UEBhMCR1IxDzANBgNVBAgTBkdyZWVjZTEPMA0GA1UEBxMGQXRo 
BQADLwAwLAIUQZbY/3Qq0G26fsBbWiHMbuVd3VICFE+gwtUauYiRbHh0caAtRj3qRTwl 
-----END NEW CERTIFICATE REQUEST----- 

私は、これは全体の証明書であると仮定します。 keytoolを使用してプライベート(または公開鍵)を確認するにはどうすればよいですか?

答えて

5

キーストアにプライベート(および関連する公開)キーを作成しました。実際に使用できるようにするには、認証機関(CA)が署名します。これは-certreqコマンドです(この証明機関に出力し、他の情報とお金を一緒に送信します証明書を元に戻してキーストアにインポートすることができます)。

秘密鍵を表示することは意図されていません... Javaプログラムでキーストアを使用するため、通常これは必要ありません。それを使用する。


編集:あなたのストアを見てみたいので、ここではこれを行い迅速なJavaプログラム:

import java.io.*; 
import java.security.*; 
import java.security.cert.Certificate; 

public class KeyPrinter { 

    /** 
    * to be invoked with these parameters: 
    * 
    * [0]: keystore-password 
    * [1]: filename 
    * [2]: alias 
    * [3]: entry-Password (if necessary) 
    */ 
    public static void main(String[] params) 
     throws IOException, GeneralSecurityException 
    { 
     char[] storePass = params[0].toCharArray(); 
     String fileName = params[1]; 
     String alias = params[2]; 
     KeyStore.ProtectionParameter entryPass; 
     if(params.length > 3) { 
     entryPass=new KeyStore.PasswordProtection(params[3].toCharArray()); 
     } else { 
      entryPass = null; 
     } 

     KeyStore store = KeyStore.getInstance("JKS"); 
     InputStream input = new FileInputStream(fileName); 
     store.load(input, storePass); 

     KeyStore.Entry entry = store.getEntry(alias, entryPass); 
     System.out.println(entry); 

    } 
} 

最初の呼び出しkeytool -list -keystore myStoreでこのプログラムを呼び出して、探すためにどのエイリアス知りますパスワードとパラメータ秘密鍵エントリの場合は、鍵自体と、公開鍵を含む自己署名証明書を読み取り可能な形式で表示します。 「信頼できる証明書」の場合は、公開鍵のみが表示されます。

+0

公開鍵はどうですか?公開鍵を表示するコマンドはありますか? – Cratylus

+0

私は、キーストアを表示するための単純なJavaクラスを追加しました。 (かなり複雑なので、私はtoString()メソッドを試してみるまで自分でキーをフォーマットしようとしました。) –

+0

@MircoWidmer - あなたの[編集提案](http://stackoverflow.com/review/suggested-edits/11463131)に感謝します。私は、あなたが単にタイプミスを修正していたときに、なぜ人々がそれを拒否したのかは分かりません(言及された理由は確かに有効ではありません)。私は今それを修正した。 –

7

いいえ、できません。
コードから秘密鍵にアクセスできますが、keytoolを使用して秘密鍵にエクスポートすることはできません。
秘密鍵をエクスポートする必要がある場合はOpenSSLを使用してください。

別のオプション:キーストアをPKCS12形式で生成できます。次に、それをブラウザにインポートし、秘密鍵をエクスポートすることができます。

3

Portecle)は、キーストアを管理するための非常に便利なGUIツールです。また、プライベートキーとそれに関連する証明書をエクスポートするオプションもあります。

あなたの公開鍵を共有するための一般的な方法は、あなたの鍵ペアの証明書を共有することである(それは内部の公開鍵が含まれています)

1
keytool -list -v -alias myCert -storepass 123456 -keystore file.jks 

または

keytool -list -rfc -alias myCert -storepass 123456 -keystore file.jks 

keytool -help 
に述べたように
関連する問題