¿Cómo crear un almacén de claves y un almacén de confianza utilizando un certificado autofirmado?

17

Tenemos Java Server y el cliente comunican a través de una red mediante SSL. El servidor y el cliente mutuamente autenticarse entre sí utilizando certificados. El tipo de almacén de claves que utiliza el servidor y el cliente es JKS. Las cargas de servidor y cliente sus archivos de almacén y trustStore. Los nombres de almacén de claves y almacén de confianza de archivo son: server.keystore, server.truststore, client.keystore y client.truststore. Estoy utilizando certificados con firma para probar solamente.

Preguntas:

Q1. Me gustaría saber por qué tengo que añadir del servidor y del cliente propios certificados en sus respectivos almacenes de confianza, en el paso 6.

Q2 ¿Puedo reducir el número de los pasos para lograr la misma cosa? ¿Si es así, entonces cómo?

Pasos para crear clave RSA, certificados autofirmados, almacén de claves y almacén de confianza para un servidor

  1. Generar una clave privada RSA

    openssl genrsa -out diagserverCA.key 2048
    
  2. Crear un certificado X509

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. Cree un almacén de claves PKCS12 a partir de clave privada y certificado público.

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. Convertir almacén de claves PKCS12 en un almacén de claves JKS

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. Importar un certificado de cliente para almacén de confianza del servidor.

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. Importar un certificado de servidor para almacén de confianza del servidor.

    keytool -import -alias server-cert \
            -file diagserverCA.pem -keystore server.truststore
    

Pasos para crear una clave privada RSA, un certificado autofirmado, un almacén de claves y un almacén de confianza para un cliente

  1. Generar una clave privada

    openssl genrsa -out diagclientCA.key 2048
    
  2. Crear un certificado X509

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. Crear almacén de claves PKCS12 de clave privada y certificado público.

    openssl pkcs12 -export -name client-cert \
                   -in diagclientCA.pem -inkey diagclientCA.key \
                   -out clientkeystore.p12
    
  4. Convierta un almacén de claves PKCS12 en un almacén de claves JKS

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. Importar un certificado de servidor para almacenamiento de confianza del cliente.

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. Importar el certificado de un cliente a la tienda de la confianza del cliente.

    keytool -import -alias client-cert -file diagclientCA.pem \
            -keystore client.truststore
    
vic99
fuente

Respuestas:

3

https normales sólo requiere 1 de comando;

keytool -genkeypair

Si el cliente no está confiando ciegamente cualquier cert, a continuación, tiene que copiar su certificado público del servidor al cliente.

¿Por qué utiliza OpenSSL en absoluto?

https://docs.oracle.com/javase/10/tools/keytool.htm

user1133275
fuente
Hasta que mi edición sea revisada por pares: la bandera es -genkeypair y puede agregar muchas banderas diferentes para personalizar el certificado (por ejemplo, -validez 365 o -dname "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US "). Mejor ver el enlace en la respuesta para más detalles.
Johannes Stadler
1
@JohannesStadler Gracias, aprobó su edición y actualicé el enlace a la última versión de Java, tenga en cuenta que "Este comando se llamaba -genkey en versiones anteriores"
user1133275