Instalación y actualización de un certificado de CA en un cliente

0

Estoy intentando implementar un sistema donde un cliente puede descargar paquetes de aplicaciones desde un servidor para instalarlos / actualizarlos en el cliente. Supongo que el cliente es algo así como una plataforma en un sistema embebido. Para la integridad de los paquetes de la aplicación, estoy considerando usar una firma digital.

Investigué un poco y descubrí que el cliente tendría que tener un certificado de CA y que el servidor tendría que tener un certificado de servidor firmado por una CA y una clave privada. Sé que el certificado del servidor podría ser emitido por una CA si lo pido. Luego, el servidor lo almacenaría en algún lugar y lo enviaría con paquetes de aplicaciones y firmas de ellos para que el cliente pueda verificarlos utilizando un certificado de CA.

Mis preguntas son qué se supone que debe hacer el cliente para instalar / actualizar un certificado de CA. Cuando utilizamos otro tipo de cliente, como navegadores web y aplicaciones de correo, no reconocemos lo que hacen esas aplicaciones para instalar / actualizar un certificado de CA. Pero necesitaría implementarlo en el cliente.

Mis preguntas son

  1. ¿Se supone que el cliente debe descargar un certificado de CA (raíz) de un sitio web de la CA antes de que se use?
  2. ¿O debe preinstalarse un certificado de CA (raíz) en el cliente?
  3. ¿O se supone que el servidor debe conservar un certificado de CA e indicar al cliente dónde descargar el certificado de CA?
  4. ¿Qué debe hacer el cliente para actualizar un certificado de CA por alguna razón?

Agradecería que alguien me respondiera.

    
pregunta 26.12.2014 - 14:10
fuente

2 respuestas

0

Responderé las preguntas en orden:

  1. No, porque una descarga puede no transmitir confianza. Podría tener una descarga sobre SSL, pero confiaría en la estructura de confianza preexistente utilizada para SSL. Además, deberá explicar a un usuario lo que debería hacer para establecer la confianza y configurar la aplicación.

  2. Por lo general, los certificados raíz se distribuyen con la aplicación, sí. No hace falta decir que la descarga debe ser confiable. Si no se puede confiar en la instalación de la aplicación, toda la confianza está fuera de la ventana de todos modos.

  3. La cadena de certificados (hasta el certificado raíz) a menudo se mantiene con la clave privada yes. Al final, el cliente necesita crear una cadena de confianza hasta un certificado en el que confíe. Esto puede ser un certificado raíz, pero también puede ser un certificado de CA. Por lo general, es un certificado raíz porque:

    1. el certificado raíz tiene un período de validez mucho más largo o indefinido;

    2. la clave raíz solo se usa para crear certificados de CA y, por lo tanto, es mucho más segura (a menudo se mantiene fuera de línea).

    Con la mayoría de los protocolos, tanto el certificado de CA como el certificado de hoja se incluyen con la firma. En ese caso, el cliente solo necesita saber & confíe en el certificado raíz para validar una firma.

  4. Debe usar una CRL o OCSP para buscar el estado de los certificados. Si confía en un certificado raíz, entonces simplemente puede firmar con una nueva clave / certificado firmado con la clave raíz. Por supuesto, si pierde la confidencialidad de todos los certificados de confianza (es decir, el certificado / clave raíz), entonces deberá restablecer completamente la confianza de alguna manera.

Todo lo anterior en total se llama PKI, es posible que desee leerlo, especialmente con respecto a la administración de claves.

    
respondido por el Maarten Bodewes 27.12.2014 - 16:04
fuente
0

El camino oficial

El certificado es una identificación legal válida para una persona / empresa / agencia. Al igual que con cualquier documento formal, debe obtenerlo de una autoridad de certificación oficial. Hay muchos. Como desarrollador, debe obtener de ellos al menos 2 certificados: uno para su servidor y otro para usted como cliente. Para conseguirlos tienes que hacer una requisición. Al hacer esto, se le otorgará su certificado y su archivo de clave privada para cada certificado.

Después de este proceso legal, puedes instalarlo en tu servidor apache de esta manera:

  • Primero instala la cadena de certificados en el servidor. Estos son algunos certificados, disponibles públicamente en la CA (autoridad de certificación).
  • Esta cadena, puede ser solo un certificado raíz o muchos.
  • Si hay muchos, póngalos todos juntos en un archivo. Hay otras formas pero yo Encontré que este es mejor.

Luego agrega estas líneas a su configuración de apache:

SSLEngine on
SSLOptions +StdEnvVars +ExportCertData
SSLCertificateFile      /home/<youruser>/<yourCertFolder>/server.crt #server file
SSLCertificateKeyFile   /home/<youruser>/<yourCertFolder>/server.key #server private key
SSLCertificateChainFile /home/<youruser>/<yourCertFolder>/rootCA.crt #server certificate  chain
SSLCACertificateFile    /home/<youruser>/<yourCertFolder>/rootCA.crt #server CA certicate file (if you're in the test process below, should be the same file above)
SSLVerifyClient require
SSLVerifyDepth  10
  • Vaya a su navegador e importe la cadena de certificados de la CA que emitió los certificados.
  • Importe su certificado personal a él. Hay algunos tipos de certificados. Si compró certificados A1 (archivos), simplemente los importa al navegador. Si compró un token A3 (como una unidad flash USB pero para certificados), primero debe cargar el controlador en el navegador y luego lo importará automáticamente cuando ingrese a un sitio habilitado para SSL.
  • El certificado que está utilizando en el navegador debe tener exactamente la misma cadena de certificados que el servidor o el servidor no podrá validarlo.
  • Después de esto, debería ver una ventana que le pide que seleccione su certificado al ingresar al sitio.

Muchas cosas ¿eh? Créeme, aprender esto fue un proceso difícil.

El modo de prueba

Pero hay algo que puedes usar como un proceso de prueba. Puede crear su propia CA y emitir sus propios certificados localmente en su servidor y máquina de desarrollo. Así es como lo haces:

Primero instale openssl en su máquina si aún no está instalado. Luego usa estos scripts:

Crear certificado de CA y servidor:

#/bin/bash
echo "Create CA private key"
openssl genrsa -des3 -passout pass:123 -out  ./rootCA.key 2048
echo "Remove passphrase"
openssl rsa -passin pass:123 -in ./rootCA.key -out ./rootCA.key
echo "Create CA self-signed certificate"
openssl req -config openssl.cnf -new -x509 -subj '/C=US/L=Dev/O=COMPANY/CN=CA' -days 99999 -key ./rootCA.key -out ./rootCA.crt
echo "Create private key for the server"
openssl genrsa -des3 -passout pass:123 -out ./server.key 2048
echo "Remove passphrase"
openssl rsa -passin pass:123 -in ./server.key -out ./server.key
echo "Create CSR for the server"
openssl req -config ./openssl.cnf -new -subj '/C=US/L=Dev/O=COMPANY/CN=server' -key  ./server.key -out ./server.csr
echo "Create certificate for the server"
openssl ca -batch -config ./openssl.cnf -days 999 -in ./server.csr -out ./server.crt -keyfile ./rootCA.key -cert ./rootCA.crt -policy policy_anything

emisión de certificados:

#!/bin/bash
if [[ -z "$1" || -z "$2" ]]; then
    echo "Use: issueCertificate <NAME>"
    exit
fi
NAME=$1
DN="/C=US/L=Dev/O=COMPANY/CN=$1"
ARQ="${NAME//[[:space:]]/}"
echo -e "\nCreating folder... " 
mkdir $ARQ
echo "done."
echo -e "\nCreating private key... "
openssl genrsa -des3 -passout pass:123 -out ./$ARQ/$ARQ.key 2048
echo "done."
echo -e "\nRemoving password..."
openssl rsa -passin pass:123 -in ./$ARQ/$ARQ.key -out ./$ARQ/$ARQ.key
echo "done."
echo -e "\nCreating CSR... "
openssl req -config ./openssl.cnf -new -subj "$DN" -key ./$ARQ/$ARQ.key -out ./$ARQ/$ARQ.csr
echo "done."
echo -e "\nCreating client certificate"
openssl ca -batch -config ./openssl.cnf -days 999 -in ./$ARQ/$ARQ.csr -out ./$ARQ/$ARQ.crt -keyfile ./rootCA.key -cert ./rootCA.crt -policy policy_anything
echo "done."
echo -e "\nExport client to pkcs12 and import in browser"
openssl pkcs12 -export -passout pass:123 -in ./$ARQ/$ARQ.crt -inkey ./$ARQ/$ARQ.key -    certfile ./rootCA.crt -out ./$ARQ/$ARQ.p12
echo "done."

Así que supongo que eso es todo. Tengo que traducir algunas cosas y cambiar algunos nombres y constantes de var para eliminar el nombre de mi empresa y todo este proceso es bastante complejo. Así que me disculpo si olvidé algo o algo no funciona. Por favor, informe y lo corregiré de inmediato.

Buena suerte. :)

    
respondido por el Nelson Teixeira 26.12.2014 - 15:14
fuente

Lea otras preguntas en las etiquetas