25

tomcat 6 を実行している Linux ボックスで自己署名証明書を作成しました。

10 年間有効なキーを次のように作成しました。

keytool -genkey -alias tomcatorange -keyalg RSA -validity 3650

キーストアをTomcatのフォルダーにコピーし、server.xmlを更新してキーストアを指すようにしました。

現在、ネットワーク管理者は公開鍵と秘密鍵の両方を求めています (ロードバランサー用)

以下を使用して公開鍵を生成できます。

openssl s_client -connect mydomain.com:8443

しかし、どうすれば秘密鍵をエクスポート/取得できますか?

4

4 に答える 4

56

少しトリッキーです。まず、 keytoolを使用して秘密鍵を PKCS12 形式に変換できます。これは、Java のさまざまなキーストア形式よりも移植性と互換性に優れています。以下は、Java キーストア内の別名「mykey」を持つ秘密鍵を取得し、それを という名前の PKCS12 ファイルにコピーする例ですmyp12file.p12。[ほとんどの画面で、このコマンドはボックスの右側を超えていることに注意してください。すべてを表示するには、右にスクロールする必要があります]

keytool -v -importkeystore -srckeystore .keystore -srcalias mykey -destkeystore myp12file.p12 -deststoretype PKCS12
Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password:  
[Storing myp12file.p12]

現在、ファイルmyp12file.p12には PKCS12 形式の秘密鍵が含まれており、多くのソフトウェア パッケージで直接使用したり、openssl pkcs12コマンドを使用してさらに処理したりできます。例えば、

openssl pkcs12 -in myp12file.p12 -nocerts -nodes
Enter Import Password:
MAC verified OK
Bag Attributes
    friendlyName: mykey
    localKeyID: 54 69 6D 65 20 31 32 37 31 32 37 38 35 37 36 32 35 37 
Key Attributes: <No Attributes>
-----BEGIN RSA PRIVATE KEY-----
MIIC...
.
.
.
-----END RSA PRIVATE KEY-----

暗号化されていない秘密鍵を出力します。

これは秘密鍵であり、Java キーストアから削除して移動することによるセキュリティへの影響を理解する責任があることに注意してください。

于 2010-04-14T21:04:22.150 に答える
6

Keystore Explorer gui を使用 - http://keystore-explorer.sourceforge.net/ - さまざまな形式の .jks から秘密鍵を抽出できます。

于 2014-03-06T14:18:29.627 に答える
2

http://anandsekar.github.io/exporting-the-private-key-from-a-jks-keystore/

public class ExportPrivateKey {
        private File keystoreFile;
        private String keyStoreType;
        private char[] password;
        private String alias;
        private File exportedFile;

        public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {
                try {
                        Key key=keystore.getKey(alias,password);
                        if(key instanceof PrivateKey) {
                                Certificate cert=keystore.getCertificate(alias);
                                PublicKey publicKey=cert.getPublicKey();
                                return new KeyPair(publicKey,(PrivateKey)key);
                        }
                } catch (UnrecoverableKeyException e) {
        } catch (NoSuchAlgorithmException e) {
        } catch (KeyStoreException e) {
        }
        return null;
        }

        public void export() throws Exception{
                KeyStore keystore=KeyStore.getInstance(keyStoreType);
                BASE64Encoder encoder=new BASE64Encoder();
                keystore.load(new FileInputStream(keystoreFile),password);
                KeyPair keyPair=getPrivateKey(keystore,alias,password);
                PrivateKey privateKey=keyPair.getPrivate();
                String encoded=encoder.encode(privateKey.getEncoded());
                FileWriter fw=new FileWriter(exportedFile);
                fw.write(“—–BEGIN PRIVATE KEY—–\n“);
                fw.write(encoded);
                fw.write(“\n“);
                fw.write(“—–END PRIVATE KEY—–”);
                fw.close();
        }


        public static void main(String args[]) throws Exception{
                ExportPrivateKey export=new ExportPrivateKey();
                export.keystoreFile=new File(args[0]);
                export.keyStoreType=args[1];
                export.password=args[2].toCharArray();
                export.alias=args[3];
                export.exportedFile=new File(args[4]);
                export.export();
        }
}
于 2014-08-20T11:15:30.527 に答える