Necesito crear mi propia CA para una intranet y, desafortunadamente, parece que no hay una buena respuesta sobre esto en Seguridad. SE.
Hay muchos recursos en línea sobre esto, pero todos son diferentes y algunos usan valores predeterminados desactualizados (MD5 / SHA1, etc.) que no parecen tan confiables. También hay cientos de variaciones diferentes de openssl.cnf
, que van desde un archivo de 10 líneas hasta el enorme que viene por defecto con mi distribución.
Me gustaría una respuesta canónica sobre la configuración de una CA simple para emitir certificados de servidor y certificados de cliente.
Aparentemente, parece que algunas personas todavía no entienden que no soy una gran empresa donde un compromiso de CA causa pérdidas por valor de miles de millones y no se puede mitigar fácilmente, así que permítame explicar un poco mejor por qué necesito la CA:
-
varios servidores conectados a través de enlaces inseguros (Internet ) necesito comunicarme de forma segura.
-
Necesito una forma de identificarme en esos servidores para poder realizar tareas administrativas, sin tener que ir y venir a mi administrador de contraseñas cada 10 segundos.
-
ninguna otras CA que la mía deberían poder hacerse pasar por cualquiera de los servidores, sin importar lo improbable que sea ( pero posible ) es decir .
Ahí. Mi propia PKI y un certificado instalado en cada máquina parecen adaptarse perfectamente a las necesidades. Uno de los programas que utilizo también requiere el uso de una PKI, por lo que el uso de certificados autofirmados no es una opción.
Para comprometer la PKI, alguien tendría que comprometer mi máquina de trabajo, y si eso Una vez hecho esto, el atacante ya puede hacer bastante daño sin siquiera tocar la PKI (ya que, de todos modos, estaría ingresando a través de SSH al servidor desde esta máquina). Ese es un riesgo que acepto tomar, y esta PKI no agrega más riesgo que el que ya existe.
Comentarios
Respuesta
Si su infraestructura es pequeña , muchos de los detalles de la ejecución de una CA (por ejemplo, CRL y demás) probablemente se pueden ignorar. En cambio, todo lo que realmente tiene que preocuparse es firmar certificados.
Hay una multitud de herramientas que administrarán este proceso por usted. Incluso escribí una hace muchos años. Pero la que recomiendo si lo que quieres es algo realmente simple es easy-rsa del proyecto OpenVPN. Es una envoltura muy delgada alrededor de la herramienta de línea de comandos OpenSSL. Si va a administrar MUCHOS certificados y realmente se ocupa de la revocación y demás, querrá una utilidad mucho más compleja y con todas las funciones. Ya se han proporcionado más que suficientes sugerencias, así que, en cambio, me limitaré a lo básico de lo que está intentando lograr.
Pero aquí está el procedimiento básico. Lo explicaré con OpenSSL , pero cualquier sistema servirá.
Empiece por crear su CA «raíz»; será un certificado autofirmado. Hay varias formas de hacerlo; esta es una. Haremos el nuestro, un certificado de 10 años con una clave de 2048 bits.Modifica los números según corresponda. Mencionaste que te preocupaba el algoritmo hash, así que agregué -sha256
para asegurarme de que esté firmado con algo aceptable. Estoy encriptando la clave usando AES-256, pero eso es opcional . Se le pedirá que complete el nombre del certificado y demás; esos detalles no son particularmente importantes para una CA raíz.
# First create the key (use 4096-bits if that"s what floats your boat) openssl genrsa -aes256 -out root.key 2048 # Then use that key to generate a self-signed cert openssl req -new -x509 -key root.key -out root.cer -days 3652 -sha256
Si cifró la clave en el primer paso, tendrá que proporcionar la contraseña para Úselo en el segundo. Verifique su certificado generado para asegurarse de que en «Restricciones básicas» vea «CA: TRUE». Esa es realmente la única parte importante de la que debe preocuparse:
openssl x509 -text < root.cer
Genial. Bien, ahora firmemos un certificado. Necesitaremos otra clave y esta vez una solicitud. Se le preguntará nuevamente sobre su nombre y dirección. Los campos que complete y lo que proporcione depende de usted y de su solicitud, pero el campo que más importa es el «Nombre común». Ahí es donde proporciona su nombre de host o nombre de inicio de sesión o lo que sea que este certificado atestigüe.
# Create new key openssl genrsa -aes256 -out client1.key 2048 # Use that key to generate a request openssl req -new -key client1.key -out client1.req # Sign that request to generate a new cert openssl x509 -req -in client1.req -out client1.cer -CA root.cer -CAkey root.key -sha256 -CAcreateserial
Tenga en cuenta que esto crea un archivo llamado root.srl para mantenga nuestros números de serie rectos. La bandera -CAcreateserial
le dice a openssl que cree este archivo, así que usted lo proporciona para la primera solicitud que firma y luego nunca más. Y una vez más, puede ver dónde para agregar el argumento -sha256
.
Este enfoque, hacer todo manualmente, no es en mi opinión la mejor idea. Si está ejecutando una operación considerable , entonces probablemente querrá una herramienta que pueda realizar un seguimiento de todos sus certificados por usted.
En cambio, mi punto aquí fue mostrarle que el resultado que desea: los certificados firmados de la manera que desea ellos, no depende de las herramientas que utilice, sino de las opciones que proporcione a esas herramientas. La mayoría de las herramientas pueden generar una amplia variedad de configuraciones, tanto fuertes como débiles, y depende de usted proporcionar los números que desee. Soy apropiado. Los valores predeterminados obsoletos son parte del curso.
Comentarios
- Es ‘ importante tener en cuenta que cuando si firma un certificado de cliente, es solo la parte pública . La CA no debe transmitir ni generar ninguna clave privada.
- ¿Podría ampliar su respuesta sobre la creación de un certificado de CA intermedio? Gracias.
- @Andr é Los certificados intermedios son simplemente certificados normales con
basicConstraints = CA:TRUE
establecido en sus atributos extendidos. Nada mágico, solo otro certificado. - @tylerl Dude, you rock.
- Esta respuesta es FANTÁSTICA y fue muy útil, pero tengo una actualización de 2017 para agregar. Chrome y otros ahora requieren la extensión x509v3
subjectAlternativeName
; de lo contrario, consideran que el certificado no es válido, incluso con un certificado raíz de CA instalado correctamente en el sistema. Luché durante algún tiempo para encontrar la solución correcta. Esta página fue invaluable para mí y resolvió la última pieza del rompecabezas para mí: cmrg.fifthhorseman.net/wiki/SubjectAltName . En mi opinión, agregar la SAN al firmar, a diferencia de cuando se solicita, es más fácil y más parecido a lo que hacen realmente las CA públicas.
Respuesta
Si realmente desea ser una CA, tenga en cuenta las implicaciones de seguridad de hacerlo.
- La clave privada utilizada para generar la CA raíz para su intranet debería literalmente estar encerrado en una caja fuerte. Y el acceso a dicha caja fuerte debe ser monitoreado físicamente.
- El uso de una CA raíz autofirmada obliga a sus usuarios no solo a confiar en que está realizando la debida diligencia con la protección segura de las claves, sino también a insertar una raíz inicialmente no confiable puede en su cadena de certificados.
- Esto también rompe la funcionalidad de grapado de OSCP con respecto a la verificación externa de la cadena de certificados, que es la razón por la que existen los servicios de administración de identidad en primer lugar.
Muchos argumentarían el razonamiento detrás de la gestión de su propia CA, como; es para una intranet corporativa donde parte de nuestras compilaciones de escritorio incluyen la raíz ca o es para un pequeño número de usuarios.
Si bien no es necesariamente incorrecto hacerlo y puede ofrecer algunos beneficios, sí niegue la cadena de verificación para la que se creó la administración de identidad basada en certificados.
Si decide implementar su propia raíz CA, asegúrese de seguir las mismas prácticas de seguridad que utiliza cualquier otra raíz CA. Como empresa, Lo último que le gustaría que sucediera es que alguien comprometiera la clave privada utilizada para su ca raíz y comience a firmar certificados para campañas de phishing contra sus clientes.
Hay toneladas de guías de mejores prácticas disponibles para esto, NIST ( instituto nacional de estándares y tecnología) es un grupo colaborativo que asiste en varios estándares para temas de seguridad informática.
Lectura recomendada:
Auditoría (PDF)
Recuperación ante desastres (PDF)
Sistemas de claves públicas (PDF)
Sans institute sobre implementaciones de PKI más pequeñas
Ok, veo que actualizó su pregunta para ser más específica.
Dos documentos para configurar su archivo openssl.cnf para especificaciones de CA:
https://www.openssl.org/docs/apps/ca.html
https://www.openssl.org/docs/apps/config.html
Me doy cuenta de que esta puede no ser la respuesta que desea, pero debido a que el entorno y los requisitos de cada persona son diferentes, lo hará tiene que definir un alcance para su implementación de CA para una buena configuración de ejemplo.
Comentarios
- Hay ‘ No hay razón para que su propia CA no pueda ‘ hacer OCSP. Incluso la línea de comandos OpenSSL puede hacerlo, y eso ‘ s sobre la barra más baja posible.
- Los enlaces openssl ahora son 404
Respuesta
Allí no hay forma de hacer esto simplemente. existen algunas herramientas que pueden ayudarlo a comenzar fácilmente.
como:
ninguno de ellos es un PKI completa aparte de posiblemente EJBCA, pero eso no es trivial de configurar.
- XCA es una pequeña herramienta de interfaz para obtener una interfaz gráfica para generar, firmar y revocar Certificados.
- EJBCA o Enterprise Java Beans Certificate Authority es una aplicación web JBOSS / Jetty que puede hacer la infraestructura PKI completa para una empresa.
- openssl es la herramienta básica de línea de comandos. puede hacer todos los bits fuera de línea de una CA pero ninguna de la verificación (lista para usar). puede crear sus propios verificadores OCSP con él, pero debe crear el código «en línea» usted mismo.
Si todo lo que busca es la configuración adecuada de openssl. XCA puede ayudarlo a generarlos. (tiene una función de exportación de configuración openssl
Comentarios
- EJBCA ahora tiene una imagen de VM que puede usar. De lo contrario » la configuración no es trivial » puede considerarse un eufemismo. Básicamente es un
ant
enorme script que intenta configurar el ( JBoss) servidor de aplicaciones que puede (y en mi caso lo hará ) fallar. - La imagen de la VM es para fines de evaluación, por lo que no lo recomendaría para un servidor de producción.
- Puedo buscar en XCA. EJBCA definitivamente no es ‘ t una opción: una interfaz web agrega una superficie de ataque innecesaria y es más difícil de configurar. Definitivamente prefiero usar solo Sin embargo, openssl.
- @Andr é con respecto a EJBCA, también se puede usar desde la línea de comandos, por lo que ganó ‘ no tiene que exponer la interfaz web. Pero ‘ es una cosa de nivel empresarial y probablemente exagerada para sus propósitos es (y digo esto como alguien que se gana la vida trabajando con él).
Responder
Para algunos buenos antecedentes, por favor vea mi presentación Cómo construir y operar su propio centro de gestión de certificados de mediocridad . La esencia de la presentación es que lo más necesario no es una lista de los comandos a ejecutar, sino más bien una comprensión profunda de todos los diversos controles que intervienen en la operación de una CA comercial, cómo interactúan juntos, el impacto exacto de eliminar cualquier uno de ellos, el impacto acumulativo de eliminar varios de ellos y los controles de mitigación necesarios para compensar la reducción de la seguridad.
Es por eso que no existe una «respuesta canónica sobre la configuración de una CA simple». recorre toda la ruta ISO, comenzando con una parte de firma de claves, certificados raíz duplicados con espacio de aire y abovedados, múltiples firmantes intermedios, servidores de revocación, etc., etc., o bien, tiene que idear algún compromiso basado en el costo / beneficio y riesgo únicos perfil que la empresa está dispuesta a aceptar. Cualquier persona con la habilidad y experiencia suficientes para hacer esa evaluación, por definición, no necesita la hoja de trucos. Pueden analizar la sintaxis de comandos correcta basándose en un conocimiento profundo de la función empresarial que se debe realizar y las primitivas de seguridad utilizadas para implementar ese requisito.
En la presentación hay historias de compromisos reales de tiendas que tomaron este camino y se equivocaron terriblemente. En algunos casos, mi evaluación informó que absolutamente nada de lo que pueda hacer con la seguridad de su middleware puede superar las debilidades inherentes de la CA interna. Cualquiera en los EE. UU. Debe darse cuenta de que probablemente compre servicios de al menos uno de los proveedores a los que se refiere la presentación. Estos son bancos, cooperativas de crédito, aseguradoras de salud, minoristas y más.
Dado que para que las recomendaciones sean «correctas» requiere que el respondedor haga suposiciones importantes sobre sus perfiles de riesgo aceptables y que usted haga suposiciones importantes sobre el grado en que sus ideas de riesgo y las de ellos están alineadas y en sincronía, la propuesta misma es arriesgada a primera vista. En la mayoría de estos casos, la evaluación de la idoneidad de las tutorías proporcionadas tiene más que ver con la presentación que con el nivel efectivo de seguridad resultante de seguir sus procedimientos. Si está bien organizado y claramente articulado, esto importa MUCHO más que si es efectivo. Elegimos la hoja de trucos canónica que nos parece mejor.
Por estas razones, no creo que un experto creíble pueda proporcionar » archivos», sino que, en el mejor de los casos, podría proporcionar un proceso de evaluación para evaluar los requisitos y el riesgo aceptable de manera más completa. Dado que está apostando a la empresa por el resultado, ningún experto confiable haría esto fuera de la protección de un contrato. Cualquier recomendación que reciba, casi por definición, tendrá que provenir de un in experto creíble. Buena suerte.
Comentarios
- ¿Incluso para una intranet para recursos internos? También puede indicar que la presentación es suya.
- » Incluso para una intranet para recursos internos? » Especialmente para la intranet, ya que ‘ s donde ocurren la mayoría de las infracciones de datos. » También puede indicar que la presentación es suya. » Pensé que tenía cuando describí mi experiencia haciendo las evaluaciones, pero el punto fue tomado. ‘ lo actualicé.
Responder
Siga estos instrucciones para configurar una CA basada en Windows . Dado que está emitiendo certificados de cliente, tenga en cuenta que los hash SHA2 no son compatibles con XP.
La respuesta simple es:
- Instalar AD
- Instale una CA empresarial en el controlador de dominio
- Edite la Plantilla de certificado para emitir Certificados de usuario final (establezca el permiso para que los usuarios se autoinscriban o accedan a una página web)
- Implemente la clave pública del certificado raíz en todos los servidores que validan a los usuarios
- Si los usuarios están en AD, use GPO para habilitar la inscripción automática
echo "Abandon all hope, ye who enter here."
isCA=No
y una longitud de ruta de cero. » Lamentablemente, las políticas en las que se basa la mayor parte de la confianza en el sistema, como la revocación, la higiene del espacio de nombres y la seguridad de la raíz, no están ‘ t tratadas enopenssl.cnf
.