Puede proporcionar almacenes de claves a las implementaciones ya existentes para el envío de datos a través de http, que buscará el almacén de claves y realizará todas las operaciones necesarias para que usted no tenga que hacerlo. Para la autenticación del lado del servidor, esto sería un keystore = KeyStore.getInstance ("JKS"), que contiene todos los certificados de confianza.
Para autenticación del lado del cliente, si corresponde (debe verificarse) también existe tal implementación donde simplemente proporciona su cliente 'keystore' => este contendrá su certificado y es clave privada => KeyStore. getInstance ("PKCS12")
Entonces, finalmente, desea almacenar estas cosas en la base de datos, aquí se pone un poco complicado ... Las tiendas de claves están seguras, por lo que no puede simplemente escribirlas. Tiene que usar el almacén de claves. tienda (OutputStream, contraseña) ..
Lo que me parece mejor es por ejemplo:
@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());
}
}
El código anterior no es 100% correcto, pero te da una buena idea de lo que quiero decir, si no trabajas con las anotaciones, puedes hacerlo usando otro enfoque, pero creo que mi punto es claro;)
Cada registro en mi tabla tendrá que estar vinculado a las teclas en el almacén de claves de alguna manera. es decir. Necesito una forma de extraer automáticamente la clave privada del almacén de claves (así como la información de la base de datos) y cifrar un mensaje y luego enviarlo de vuelta al usuario. Entonces, ¿debería almacenar la contraseña del almacén de claves dentro del registro de la base de datos? ¿Cómo puedo solucionar este problema de una manera segura? Usted ve que hay más que solo la clave pública/privada por fila, tengo identificación, precio, nombre ... etc. – jax