OpenSSL raisonnable par défaut de confiance des certificats d'autorité de certification?
Est-il un moyen de mettre en place une OpenSSL contexte (SSL_CTX
) avec un ensemble raisonnable de confiance des certificats d'autorité de certification sans la distribution de moi-même? Je ne veux pas la responsabilité de les maintenir à jour. OMI tout système d'exploitation moderne doit offrir "me l'autorité de certification de confiance certs" comme un service, mais je ne sais pas si c'est réellement le cas.
Je n'ai pas l'esprit de l'écriture de ce code trois fois (une pour Windows, une fois pour Mac OS X, et pour Linux), mais je préfère le cap il à. En particulier, je préfère ne pas essayer d'écrire du code qui fouineurs de voir ce que les navigateurs sont installés et essayer d'obtenir leurs certificats. (Apparemment, c'est facile à obtenir ce très mauvais.)
La réponse pour les versions récentes de Linux semble être d'appeler SSL_CTX_load_verify_locations
avec /etc/ssl/certs/ca-certificates.crt
(si ce fichier existe).
Sont là des réponses simples pour Windows et Mac OS X?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
curl
du script qui convertit la liste de Mozilla ( Curl est responsable de la réponse ). Selon son code, il semble à vérifier si le certificat est de confiance ou pas avant de l'inclure.Voici ce que j'ai fait:
Sur Windows: obtenir les certificats de Windows
"ROOT"
magasin de certificats à l'aide deCertOpenSystemStore
, de la boucle au-dessus d'eux à l'aide deCertEnumCertificatesInStore
, prenez le X509-codé raw certificat de l'pbCertEncoded
domaine de laCERT_CONTEXT
, créer une OpenSSLX509
structure à l'aide ded2i_X509
, et l'ajouter à la OpenSSL magasin de certificats à l'aide deX509_STORE_add_cert
. Les fonctions de Windows sont tous disponibles à partir decrypt32.dll
.Sur Mac OS X: obtenir les certificats de la
"/System/Library/Keychains/SystemRootCertificates.keychain"
trousseau à l'aide deSecKeychainOpen
, créer un itérateur pour les certificats dans le trousseau de clés à l'aide deSecKeychainSearchCreateFromAttributes
, effectuer une itération à l'aide deSecKeychainSearchCopyNext
, obtenir les premières certificat X509 à l'aide deSecItemExport
, créer une OpenSSL certificat à l'aide ded2i_X509
, et l'ajouter à la OpenSSL magasin à l'aide deX509_STORE_add_cert
. Le Mac fonctions sont disponibles à partir de/Systems/Library/Frameworks/Security.framework/Security
.Une meilleure approche pourrait être de créer une OpenSSL
X509_STORE
avec un rappel qui utilise OS fonctions pour vérifier un individu racine cert, plutôt que de copier tous les d'eux, mais je n'ai pas essayé.Sur OS X, vous pouvez obtenir des informations sur les certificats de confiance par l'utilisateur à partir de l'utilisateur d'un Trousseau de clés. Voici un lien contenant de très bonnes informations sur la collecte de l'information à l'aide de Cacao:
D'obtenir un certificat dans le Trousseau d'accès
Si le Cacao n'est pas un ok de la dépendance à vos besoins, et vous voulez tout faire directement à partir de la ligne de commande, vous pouvez utiliser le
certtool
utilitaire - voirman certtool
et d'autres en ligne documentation pour en savoir plus à ce sujet. La liste de tous les certificats dans le login de l'utilisateur porte-clés, vous pourriez faire:Ou pour obtenir une liste de l'intégré dans le système de confiance racines:
et peut-être
Je suis sûr qu'il ya d'autres façons d'obtenir ces informations à l'aide des interfaces de système ainsi.
Côté Linux, oui,
/etc/ssl/certs/ca-certificates.crt
est la bonne façon de faire. Ce fichier existe sur dérivés de Debian (inc. Les variantes de Ubuntu) lors de laca-certificates
paquet est installé, et je ne suis pas sûr de savoir comment vous y rendre correctement sur redhat-systèmes.certtool
se comporte pour les certificats qui sont explicitement marqués comme "ne faites jamais confiance", si?man security
pour une bonne manière, si vous êtes vraiment en utilisant les outils de ligne de commande pour cette.files/certsync.m
), qui exporte également les racines de confiance dans un fichier et de ne prêter attention à la confiance des drapeaux (par pas de les exporter).