Es allí una manera de establecer una OpenSSL contexto (SSL_CTX) con un conjunto razonable de certificados de confianza sin la distribución de mí mismo? No quiero la responsabilidad de mantenerlos hasta la fecha. OMI cualquier sistema operativo moderno debe proporcionar «me la CA de confianza de certificados» como un servicio, pero no sé si ese es realmente el caso.

No me importa escribir este código tres veces (una vez para Windows, una vez para Mac OS X, y de una vez para Linux), pero prefiero la tapa en la que. En particular, prefiero no intentar escribir código que los espías alrededor en busca de lo que los navegadores instalados y tratar de extraer de sus certificados de confianza. (Al parecer, es es fácil conseguir esta muy mal.)

La respuesta para las versiones recientes de Linux parece ser la convocatoria SSL_CTX_load_verify_locations con /etc/ssl/certs/ca-certificates.crt (si el archivo existe).

Hay respuestas simples para Windows y Mac OS X?

3 Comentarios

  1. 9

    Aquí es lo que acabé haciendo:

    En Windows: obtener los certificados de Windows "ROOT" almacén de certificados de uso de CertOpenSystemStore, bucle sobre ellos usando CertEnumCertificatesInStore, agarrar el X509-codificado raw certificado de la pbCertEncoded campo de la CERT_CONTEXT, crear una OpenSSL X509 estructura utilizando d2i_X509, y agregar a the OpenSSL almacén de certificados de uso de X509_STORE_add_cert. Las funciones de Windows están disponibles desde crypt32.dll.

    En Mac OS X: obtener los certificados de la "/System/Library/Keychains/SystemRootCertificates.keychain" llavero utilizando SecKeychainOpen, crear un iterador para los certificados en el llavero utilizando SecKeychainSearchCreateFromAttributes, recorrer el uso de SecKeychainSearchCopyNext, conseguir la raw certificado X509 utilizando SecItemExport, crear una OpenSSL certificado de uso de d2i_X509, y agregar a the OpenSSL tienda con X509_STORE_add_cert. La Mac de las funciones están disponibles a partir de /Systems/Library/Frameworks/Security.framework/Security.

    Un mejor enfoque podría ser la creación de una OpenSSL X509_STORE con una devolución de llamada que usa OS funciones para verificar si una persona root cert, en lugar de copiar todo de ellos, pero yo no lo he intentado.

  2. 5

    En OS X, se puede obtener información sobre los certificados de confianza por parte del usuario del usuario del Llavero. Aquí hay un enlace que contiene muy buena información sobre la recolección de esa información utilizando Cacao:

    Obtener Certificados en el Llavero

    Si el Cacao es no aceptar la dependencia de sus necesidades, y usted quiere hacer todo directamente desde la línea de comandos, puede utilizar el certtool utilidad – ver man certtool y demás documentación en línea para aprender sobre él. Lista de todos los certificados en el usuario del llavero de inicio de sesión, usted puede hacer:

    certtool y k=login.keychain
    

    O para obtener una lista de la incorporada en el sistema trusted raíces:

    certtool y k=/System/Library/Keychains/SystemRootCertificates.keychain
    

    y tal vez

    certtool y k=/System/Library/Keychains/SystemCACertificates.keychain
    

    Estoy seguro de que hay otras maneras de conseguir que la información usando el sistema de interfaces.

    En el lado Linux, sí, /etc/ssl/certs/ca-certificates.crt es el camino correcto a seguir. Que el archivo existe en Debian derivados (inc. Las variantes de Ubuntu) cuando el ca-certificates paquete está instalado, y no estoy seguro de cómo llegar allí correctamente en redhat-sistemas basados en.

    • ¿Sabe usted cómo certtool se comporta para los certificados a los que están explícitamente marcado como «nunca » confianza», aunque?
    • No creo que certtool mostrará nada con respecto a los niveles de confianza; te gustaría consulta para trustiness mediante un mecanismo diferente. Trate de man security de una buena manera, si usted está realmente en el uso de las herramientas de línea de comandos para esta.
    • Véase también MacPorts’ certsync utilidad (trac.macports.org/browser/trunk/dports/security/certsync/#files, el código real es en files/certsync.m), que también las exportaciones de las raíces de confianza en un archivo y no prestar atención a los indicadores de confianza (por no exportarlos).

Dejar respuesta

Please enter your comment!
Please enter your name here