所以你使用的是java和keystores。
你有2個問題我沒有理解錯?:
1)你需要一些建議
2)你想知道如何將這種東西存儲到數據庫
回答問題1: 所以當使用java時,你需要使用SSL。 Java已經實現了可以通過https進行通信的類,它將爲您執行SSL握手和一切!你需要做的唯一事情就是爲這個實現提供java.security.KeyStore。
有basicly 2種類型的密鑰庫:
你如何製作你的私鑰和證書,我不會在這裏討論。我假設你已經在那裏..(如果沒有,你可以找到)。但KeyStore受密碼保護。所以一般來說它們是安全的,如果沒有人能夠破解你的數據庫。如果您在相同的表中存儲密碼以打開密鑰存儲庫,那麼請小心注意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配置進行註解的方法。如果您不使用註釋和彈簧,則可以通過另一種方式實現此目的。