在 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 是必需的,否则证书将不包含私钥。
这是我遵循的过程:-`
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 是必需的,否则证书将不包含私钥。