将公钥和私钥存储在数据库或密钥库中

我正在制作一个Web服务,它将为数据库表中的每条记录存储公钥和私钥。

密钥是使用Java创建的,但我不确定创建密钥库的天气或将密钥直接放在数据库中的字段中。

您会推荐什么选项?每种方法有哪些好处?

如果您使用密钥库,则您将使用旨在保留加密项(例如密钥和证书)的数据库。

在任何可能的情况下,您都不应该尝试重新发明轮子。 密钥库是否足以满足您的需求? 如果您尝试设计自己的数据库来存储这些文物,那么在创建Java的密钥库等数据库时,您将不得不重新解决已经考虑的问题和问题。

您可以为已经存在的通过http发送数据的实现提供密钥库,这将获取密钥库并执行所有必要的操作,因此您不必这样做。 对于服务器端身份validation,这将是一个keystore = KeyStore.getInstance(“JKS”),包含所有可信证书。

对于客户端身份validation,如果适用(您需要自己validation),此类实现已经存在,您只需提供客户端’keystore’=>此实例将包含您的证书,并且它的私钥=> KeyStore.getInstance(“PKCS12” )

然后最后你想把这些东西存放到数据库,这里有点棘手..密钥库是安全的,所以你不能只是写它…你必须使用keystore.store(OutPutstream,密码)..

我最好的是例如:

@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%正确,但它让你很清楚我的意思,如果你不使用注释,你可以使用另一种方法,但我认为我的观点是明确的;)

为什么每条记录都有私钥? 这是非常奇怪的设计。 私钥通常由实体(例如人员)或代表他们的服务器持有。

你可以有一个数据库来存储userinfo而不是密钥,对于密钥,最好使用密钥库。 所以userinfo可能包含{name,symmetric pass / hash,…}并使用名称,你应该能够识别密钥库中的密钥记录。 再次记住,不要使用全局(用户,传递)来读取密钥库,而是使用用户授权。