我试图与需要证书才能拨打电话的REST网络服务进行对话。我从我的客户端获得了两个文件 - *.pem
和*.key
文件。
使用这两个文件,我可以使用curl
在命令行上调用该Web服务:
curl.exe -k -v "MyUrl" --cert mycert.pem --key mycertkey.key
这很有效。但我想使用Fiddler并最终使用我自己的C#代码进行调用 - 但是如何?
在 Fiddler 中,我读到必须在特定目录中提供证书作为ClientCertificate.cer
文件.....但我有{{1}和.pem
文件 - 这些"翻译"进入.key
文件?
如何在我自己的 C#代码中使用这些*.cer
和*.pem
文件来调用该Web服务(使用RestSharp或只是简单{{ 1}})?
更新:按照Drew Burchett的回答,我将*.key
文件导入到我的计算机上的证书存储区中,然后将其导出到WebRequest
文件(& #34; DER编码,二进制")并将其放在Fiddler的文件夹中。在尝试调用REST服务时,我仍然从Fiddler那里得到这个错误:
[Fiddler]与' ......'的联系失败。
System.Security.SecurityException无法与server.fiddler.network.https协商HTTPS连接; HTTPS握手(url)失败 System.Security.Authentication.AuthenticationException SSPI调用出错,请参阅内部异常;收到的邮件格式是意外或错误的
有趣的是,最后一段(.pem
段落)在我的系统中以德语显示,而其余段落用英语......奇怪......
更新#2:
使用带有.cer
前缀的System.Security.Authentication.AuthenticationException
和证书存储中安装的证书(我自己的证书,受信任的根证书)在C#代码中尝试此操作失败,并显示错误:
发现了System.Net.WebException 的HResult = -2146233079
消息=请求已中止:无法建立安全的SSL / TLS通道。
有什么想法吗?
答案 0 :(得分:1)
您应该能够通过证书管理器将.pem文件转换为.cer文件。在Windows 7中,单击“开始”|运行并输入certmgr.msc。在Windows 8中,右键单击“开始”按钮并选择“运行”。键入certmgr.msc并单击“确定”。打开证书管理器后:
导入过程完成后,您应该会看到证书。然后,您可以右键单击它并选择“导出”。选择.cer文件并提供保存证书的路径和文件名。
如果这是用于识别您正在连接的服务器的证书(我怀疑它是)并且它是一个自签名证书,为了在您的C#代码中使用它,您需要将其放置在受信任的根证书颁发机构文件夹中。然后,当您使用WebRequest和https前缀调用服务时,证书将受信任,并且呼叫将成功。您可以使用上述步骤将证书导入到正确的文件夹中,也可以使用Microsoft中的方法将证书嵌入应用程序的“Root”文件夹中:
右键单击文本或XML编辑器中的package.appxmanifest并将证书添加到“Root”
<Extensions>
<!--Certificates Extension-->
<Extension Category="windows.certificates">
<Certificates>
<Certificate StoreName="Root" Content="Assets\jsanders4.cer" />
</Certificates>
</Extension>