2010-09-21 3 views
6

Est-il possible d'utiliser une autorité de certification racine personnalisée pour FiddlerCore pour intercepter le trafic HTTPS?Utilisation de la racine personnalisée avec FiddlerCore

Ce dont j'ai besoin est d'assigner un certificat à utiliser pour signer tous les certificats d'hôte.

Une autre solution peut fournir des informations de certificat à FiddlerCore avant de créer le certificat racine.

Répondre

1

FiddlerCore n'offre actuellement pas la possibilité de personnaliser les informations contenues dans sa racine auto-signée. Il va générer tous les certificats d'entité finale enchaînés à la racine nommée DO_NOT_TRUST_FiddlerRoot.

Pouvez-vous expliquer pourquoi vous recherchez cette fonctionnalité?

+0

Nous utilisons FiddlerCore pour fournir un support de proxy sur un outil commercial. Lorsque l'utilisateur démarre la fonction proxy, FiddlerCore essaie d'installer le certificat racine généré par Fiddler et le texte FiddlerRoot est affiché. Le but est de personnaliser ce texte. – dereli

+0

Pour installer réellement la racine, vous pouvez le faire vous-même sans appeler la méthode FiddlerCore qui le fait. Cependant, notez que le texte de l'invite provient de Windows, pas de Fiddler. X509Store certStore = nouveau X509Store (StoreName.Root, StoreLocation.CurrentUser); certStore.Open (OpenFlags.ReadWrite); try {certStore.Add (oRootCert); // Peut échouer en raison de la baisse de l'invite de sécurité de Windows de l'utilisateur } finally {\t certStore.Close(); } Il existe d'autres moyens d'installer la racine, mais ils requièrent que votre application s'exécute en tant qu'admin. – EricLaw

+0

Il est possible d'installer un certificat racine, mais le problème est que FiddlerCore n'utilisera pas ce certificat pour signer automatiquement les certificats par site générés. – dereli

1
FiddlerApplication.Startup(9999, FiddlerCoreStartupFlags.DecryptSSL); 
var path = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location) + @"\sslcertificate.pfx"; 
var secureEndpoint = FiddlerApplication.CreateProxyEndpoint(443, true, new X509Certificate2(path, "password")); 

Vous pouvez créer votre propre certificat à l'aide des outils Visual Studio, cependant, j'ai utilisé ce programme gratuit pour créer un test d'une cause que je suis paresseux: http://www.xenossoftware.com/freetools/certificategenerator/

Si le certificat est installé sur la machine, Je crois que vous pouvez également faire la même chose en utilisant la classe X509Store.

Voici un code pour le faire (non testé):

FiddlerApplication.Startup(9999, FiddlerCoreStartupFlags.DecryptSSL); 
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
try 
{ 

    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 

    var x509Certificate2 = store.Certificates.Find(X509FindType.FindBySubjectName, "YourSSLCertificateName", true)[0]; 

    secureEndpoint = FiddlerApplication.CreateProxyEndpoint(443, true, x509Certificate2); 

} 
finally 
{ 
    store.Close(); 
} 
-1

Vous pouvez utiliser la propriété oDefaultClientCertificate de FiddlerApplication pour spécifier le certificat existant. Je l'ai utilisé sur mon application de service de fenêtre en utilisant FiddlerCoreAPI pour capturer le trafic HTTPS.

var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase); 
path = path.Replace("file:\\", ""); 
if (!path.EndsWith(@"\")) path += @"\"; 
path += "FiddlerRoot.cer"; 

FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete; 
FiddlerApplication.oDefaultClientCertificate = new X509Certificate(path); 
FiddlerApplication.Startup(8888, FiddlerCoreStartupFlags.DecryptSSL); 
+0

'oDefaultClientCertificate' concerne le certificat client utilisé; la question concerne le certificat racine utilisé pour la génération du certificat * server *. – EricLaw

Questions connexes