0

各インストールにサーバーとクライアントがあるJavaプロジェクトがあります。接続を保護する必要があります。サーバー部分はクロスプラットフォーム(Androidを含む)であるため、キー生成にKeytoolまたはopensslを使用することはできません。

サーバーがたくさんあるので、1つの証明書を生成して含めることはできません。そうすると、すべてのサーバーが同じ証明書(もちろん、自己署名)を持つことになります。

したがって、外部ツールを使用できないため、サーバーが最初に起動するときに、純粋なJavaを使用して実行時に証明書を生成するのが理想的です。

実際の実装例を教えてください。別の方法や提案も歓迎します。

4

2 に答える 2

1

コメントも読んでいるこの質問はあまり意味がありません。
最初のインストールでその場でキーストアを生成した場合でも(これは、たとえばBouncy Castleを介して可能です)、次回の再起動のためにファイルシステムに保存する必要があります。
クライアントがサーバーを認証する場合は、トラストストアにある証明書と同じ証明書を受け取る必要があります(OPに従って再起動するたびに新しく生成された証明書ではありません)。これは、あなたがよく知っている発行者の証明書を使用せず、信頼できる証明書をクライアントのトラストストアに手動でインポートする必要があります。

于 2013-02-27T21:10:08.457 に答える
1

これがあなたが望むもののようなものです。

//Build a blank keystore with a password
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
char[] password = "some password".toCharArray();
ks.load(null, password);

//Sample key storage
javax.crypto.SecretKey mySecretKey;
KeyStore.SecretKeyEntry skEntry =
    new KeyStore.SecretKeyEntry(mySecretKey);
ks.setEntry("secretKeyAlias", skEntry, 
    new KeyStore.PasswordProtection(password));

//Update the keystore file
fos = new java.io.FileOutputStream("keystorefilename");
ks.store(fos, password);

ただし、証明書を作成してインポートするには、BouncyCastleを使用する必要があります。利用可能なチュートリアルがあります。

于 2013-02-27T21:02:12.230 に答える