Pregunta

Quiero hacer lo que hace myopenid: una vez que haya iniciado sesión, puede hacer clic en un botón que genera un certificado SSL;Luego, el navegador descarga este certificado y lo almacena.Cuando luego regrese a yourid.myopenid.com, su navegador puede usar su certificado almacenado para la autenticación, por lo que nunca necesitará una contraseña.

Entonces mi pregunta es ¿qué se requiere para que esto funcione?¿Cómo genero certificados?¿Cómo los valido una vez que me los presentan?

Mi pila es Rails on Apache usando Passenger, pero no soy demasiado exigente.

¿Fue útil?

Solución

Suelen denominarse certificados del lado del cliente.

En realidad no lo he usado, pero puede encontrar una versión modificada de restful-authentication aquí aquí eso parece lo que buscas.

Encontré esto vía Dr.publicación de nic

Otros consejos

Depende del servidor, pero la solución más sencilla que conozco es usar Apache:

Autenticación básica falsa

"Cuando esta opción está habilitada, el nombre distinguido (DN) del sujeto del certificado X509 del cliente se traduce en un nombre de usuario de autorización básica HTTP.Esto significa que se pueden utilizar los métodos de autenticación estándar de Apache para el control de acceso.El nombre de usuario es solo el Asunto del Certificado X509 del Cliente (se puede determinar ejecutando el comando openssl x509 de OpenSSL:openssl x509 -noout -subject -in certificado.crt).Tenga en cuenta que no se obtiene ninguna contraseña del usuario..."

No estoy seguro acerca de los rieles, pero la variable de entorno REMOTE_USER habitual debería ser accesible de alguna manera.

Si desea generar certificados, debe hacer que el cliente genere un par de claves y le envíe al menos la clave pública.Puedes hacer esto en Firefox mediante una llamada de Javascript, es crypto.generateCRMFRequest.Supongo que también hay métodos específicos del navegador disponibles en otros navegadores.Pero primero, debes descubrir cómo emitir un certificado una vez que obtengas una clave pública.

Puede escribir algo en el servidor con OpenSSL, pero tiene soporte integrado para CSR, no el formato CRMF que le enviará Firefox.Por lo tanto, necesitaría escribir algún código para convertir el CRMF en un CSR, lo que requerirá algún tipo de capacidad de procesamiento DER... Sólo estoy arañando la superficie: operar un CA, incluso para una aplicación de juguete, no es trivial.

Las soluciones SSO como OpenId y PKI se superponen y hay elegancia en PKI.Pero el problema está en los detalles, y hay buenas razones por las que este enfoque existe desde hace mucho tiempo pero sólo ha despegado en aplicaciones gubernamentales y militares.

Si está interesado en continuar con esto, haga un seguimiento con algunas preguntas específicas de la plataforma en la que le gustaría desarrollar su servicio de CA.

Puede generar un certificado en el navegador del cliente utilizando un código específico del navegador.Ver esta pregunta

También puede generar certificados de cliente SSL en el lado del servidor utilizando OpenSSL en Ruby (ver esto q).(Esto funcionará en cualquier navegador sin un código específico, pero su servidor habrá generado la clave privada del cliente, lo cual no es ideal para los puristas de las criptomonedas).

Cualquiera que sea el método que utilice para generarlos, deberá configurar su servidor web para que requiera los certificados de cliente.Ver los documentos de apache para un ejemplo.

He estado trabajando en una solución a este problema.Quería hacer lo mismo y sé que muchos otros propietarios de sitios web quieren esta función, con o sin un proveedor externo.

Creé la configuración del servidor necesaria y un complemento de Firefox para manejar la autenticación basada en certificados.Vaya a mypassfree.com para obtener el complemento gratuito de Firefox.Envíeme un correo electrónico (enlace en esa página) para la configuración del servidor, ya que aún no lo he empaquetado con un buen instalador.

La configuración del servidor es Apache2 + OpenSSL + Perl (pero puedes reescribir los scripts de Perl en cualquier idioma)

jonathan

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top