因此,您正在使用 java 和密钥库。
你有两个我理解正确的问题?:
1)你需要一些建议
2)你想知道如何将这些东西存储到数据库中
回答问题1:所以在使用java时需要使用SSL。Java 已经实现了将通过 https 进行通信的类,它将为您执行 SSL 握手和一切!您唯一需要做的就是为此实现提供 java.security.KeyStore 。
基本上有两种类型的密钥库:
你如何制作你的私钥和证书,我不会在这里讨论。我假设你已经在那里..(如果没有,你可以找到)。但是 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 配置在持久或更新之前或之后执行带注释的方法。如果您不使用注释和弹簧,您可以通过另一种方式实现这一点..