Editar: Me doy cuenta de que esto no queda claro en la respuesta a continuación ... pero desde el punto de vista de su aplicación, realmente no hace ninguna diferencia si ejecuta la PKI / CA usted mismo o si utiliza una o más CA de terceros. Incluso si elige ejecutar su propia PKI, realmente no quiere codificarla usted mismo, por lo que usaría uno de los existentes, que estaría lógicamente separado de la aplicación, y cualquier otro La interacción con la CA sería a través de los protocolos habituales. Fin de edición
¿Debería realmente operar una PKI y emitir los certificados yo mismo?
Como regla general, a menos que ya sepa cómo ejecutar una PKI, no debería hacerlo. Es un lote más complicado de lo que piensas, y muchas más formas en que las cosas pueden salir mal. Incluso las compañías que hacen PKI como su negocio principal a veces se equivocan; vea Diginotar a quien se le hizo una piratería de su infraestructura de certificado y finalmente se declaró en quiebra .
Permitir certificados de terceros, especialmente por múltiples CA, tiene sus propios inconvenientes. Tengo una tarjeta inteligente que contiene mi identificación electrónica que utilizo para acceder a mi banco y a varios sitios gubernamentales. Pero también podría tener un certificado "blando" que uso para acceder a otras cosas. Si su sitio aceptara ambas autoridades de certificación, ¿tendría alguna forma de saber que esos dos certificados se refieren a la misma persona (o usuario)? ¿Desea tener un usuario por certificado o desea que un usuario pueda usar más de un certificado? ¿Qué sucede cuando caduca un certificado? ¿Cómo sabría que mi nuevo certificado todavía se refiere a mí? Estas preguntas deben considerarse cuidadosamente al diseñar sus aplicaciones y cadenas de confianza.
¿Hay una manera de hacer que se comporten como las claves SSH, el usuario
presenta cualquier clave durante el registro y esa clave está vinculada a la cuenta?
Esto es solo una pequeña cuestión de programación ... (En otras palabras, no es tan pequeño, pero no imposible.) Es probable que también desee que el usuario agregue o elimine certificados de alguna manera.
Sobre la verificación de ellos en mi aplicación, la mayoría de la documentación que he encontrado hace
el servidor web verifica los certificados contra una CA (mi propia CA en este caso,
lo que nos lleva de nuevo al problema PKI) y establecer un entorno
variable si se confía en el certificado ... eso no funcionaría en mi caso como
Me gustaría deshacerme de la CA y que los clientes proporcionen su propia
certeza, basado en el hecho de que no puedo confiar en compararlos con
Un CA, ¿contra qué puedo verificarlos? ¿Los certificados de clientes tienen la
equivalente a la clave pública SSH que puedo almacenar en mi base de datos y verificar
en contra de eso?
No guardaría el certificado completo, solo guardaría suficiente información para poder verificar el certificado la próxima vez que el usuario lo presente. Este suele ser el número de serie del certificado, el CN y la CA emisora. También es posible que desee almacenar la fecha de caducidad, para que pueda recordar a los usuarios que renueven sus certificados antes de que caduquen. (Por supuesto, esto podría hacerse cuando verifique sus certificados al momento de iniciar sesión, pero sería conveniente almacenar los datos para que pueda enviar un recordatorio por correo electrónico en caso de que no se registren durante el tiempo en que recibirán la advertencia). / p>
Incluso cuando un certificado es emitido por una CA de terceros, el certificado contendrá información sobre cómo puede verificar su validez. Por lo general, esto se realizará mediante OCSP (Protocolo de estado de certificado en línea), que es una verificación en tiempo real contra la base de datos de la CA emisora. También hay CRL, una lista de revocación de certificados, que contiene información sobre qué certificados revoca la CA. Esto no es en tiempo real; la CRL se volverá a emitir a intervalos.
Finalmente, ¿cómo haría un nuevo cliente para registrarse en mi sitio web;
Se le pide que presente un certificado y no tiene ninguno, ¿cómo lo hace?
generar uno?
Si elige utilizar CA de terceros, debe darles un enlace a una o más de las CA en las que confía.
Si ejecuta su propia CA, les daría un enlace a esa CA, que debería configurarse para permitir que los usuarios anónimos (anteriormente), así como los usuarios existentes, soliciten un nuevo certificado.
Finalmente, si desea echar un vistazo a la configuración de una PKI, puede probar EJBCA, una CA / VA de código abierto . Le dará una idea básica de las complejidades involucradas.