在 FiddlerCore 中使用自定义证书

Using custom certificate in FiddlerCore

这是我遵循的过程:-`

var certX = Fiddler.CertMaker.oCertProvider.GetCertificateForHost("<Machine Name>");
File.WriteAllBytes(@"D:\PFX.pfx", certX.Export(X509ContentType.SerializedCert));

完成后。我重新启动了演示应用程序并尝试从磁盘加载证书

X509Certificate2 certTry = new X509Certificate2(@"D:\PFX.PFX", "1", X509KeyStorageFlags.UserKeySet |
                                        X509KeyStorageFlags.PersistKeySet |
                                        X509KeyStorageFlags.Exportable);

oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, certTry);

这有效,但当我这样做时。

WriteCommandResponse("Result: " + Fiddler.CertMaker.trustRootCert().ToString());

它失败并显示错误提示不能信任根证书;未找到

我在这里做错了什么? 我的目的是使用自定义证书解密 HTTPS 流量。

让我们退后一步——您希望通过将 Fiddler 生成的证书存储到磁盘然后重新加载它来完成什么?

这里可能的问题是您的方法没有将私钥写入目标 PFX 文件,因此您随后无法使用 PFX 来加密流量。

正如@EricLaw 指出的那样,问题出在 PFX 上。证明

    Fiddler.CertMaker.GetRootCertificate();

生成的证书没有私钥。所以仅仅写上面的证书来保存证书是不够的。解决方法是打开用户的根证书库,然后从中获取证书及其私钥(下面的代码示例)。然后可以在以后的会话中使用此证书。

    X509Store certStore = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
        // Try to open the store.

        certStore.Open(OpenFlags.ReadOnly);
        // Find the certificate that matches the name.
        X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindBySubjectName, "DO_NOT_TRUST_FiddlerRoot", false);

        X509Certificate2 certTry = new X509Certificate2(@"D:\PFX.PFX", "1", X509KeyStorageFlags.UserKeySet |
                                    X509KeyStorageFlags.PersistKeySet |
                                    X509KeyStorageFlags.Exportable);

可导出是可选的,但 PersistKeySet 是必需的,否则证书将不包含私钥。