したがって、Java とキーストアを使用しています。
2 つの質問がありますが、正しく理解できましたか?:
1) アドバイスが欲しい
2)これをDBに保存する方法を知りたい
質問 1 への回答: Java を使用する場合、SSL を使用する必要があります。Java には、https を介して通信するクラスの実装が既にあり、SSL ハンドシェイクとすべてを実行します。必要なのは、 java.security.KeyStore をこの実装に提供することだけです。
基本的に、キーストアには次の 2 種類があります。
秘密鍵と証明書を作成する方法については、ここでは説明しません。私はあなたがすでにそこにいると仮定しています..(そうでない場合は、見つけることができます)。ただし、キーストアはパスワードで保護されています。したがって、誰もあなたのデータベースをハッキングできないのであれば、一般的には安全です。キーストアを開くためのパスワードを同じテーブルに保存する場合は、SQL インジェクションに注意してください。しかし、それが安全であると仮定しましょう。キーストアは、SSL ハンドシェークを処理する既存の実装を使用する機能を提供します。したがって、基本的にキーストアを使用することは悪いことではありません。ところで、相互認証が必要な場合にのみ PKCS12 キーストアを使用することに注意してください (つまり、自分自身を識別する必要もあります)。
質問 2 への回答: はい、データベースにキーストアを格納できますが、少し注意が必要です。キーストアでは、ストア メソッドとロード メソッドしか使用できないためです。しかし、あなたは次のようにこれを達成することができます:
@Entity
public class MyKeyStoreClass {
private Long id;
@Transient
private KeyStore keystore;
private String passwordForKeyStore;
private Byte[] keyStoreAsBytes;
@PreUpdate
@PrePersist
public void concertKeyStoreToBytes() {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
keystore.store(byteArrayOutputStream,
passwordForKeyStore.toCharArray());
keyStoreAsBytes = byteArrayOutputStream.toByteArray();
}
@PostLoad
public void getKeyStore() {
if (keystore == null && keyStoreAsBytes != null) {
keyStore = KeyStore.getInstance(getKeystoreType().getType());
keyStore.load(new ByteArrayInputStream(keystoreAsBytes), passwordForKeyStore.toCharArray());
}
}
上記のコードは、私がここ (エディターなし) で書いたので、おそらく 100% 正しいとは限りません。しかし、それは一般的にあなたがそれを行う方法です.私は以前にそれを行ったことがあり、うまくいきました;)私のSpring構成は、永続化または更新の前または後に注釈付きのメソッドを実行することに注意してください. 注釈とスプリングを使用しない場合は、別の方法でこれを実現できます..