所以你使用的是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配置进行注解的方法。如果您不使用注释和弹簧,则可以通过另一种方式实现此目的。