苦苦挣扎着使用REST调用和证书

时间:2015-02-18 08:15:58

标签: c# rest curl fiddler restsharp

我试图与需要证书才能拨打电话的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通道。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您应该能够通过证书管理器将.pem文件转换为.cer文件。在Windows 7中,单击“开始”|运行并输入certmgr.msc。在Windows 8中,右键单击“开始”按钮并选择“运行”。键入certmgr.msc并单击“确定”。打开证书管理器后:

  1. 展开个人文件夹,然后单击“证书”文件夹
  2. 右键单击“证书”文件夹(如果“证书”不存在,则单击“个人”文件夹),然后单击“导入”。
  3. 浏览保存.pem文件的位置并选择它。
  4. 选择将证书导入指定的文件夹。
  5. 导入过程完成后,您应该会看到证书。然后,您可以右键单击它并选择“导出”。选择.cer文件并提供保存证书的路径和文件名。

    如果这是用于识别您正在连接的服务器的证书(我怀疑它是)并且它是一个自签名证书,为了在您的C#代码中使用它,您需要将其放置在受信任的根证书颁发机构文件夹中。然后,当您使用WebRequest和https前缀调用服务时,证书将受信任,并且呼叫将成功。您可以使用上述步骤将证书导入到正确的文件夹中,也可以使用Microsoft中的方法将证书嵌入应用程序的“Root”文件夹中:

    1. 将服务器证书导出到.der文件
    2. 在您的应用程序中包含证书(我将其放入资产目录) 在项目中包含证书后,右键单击证书  一个。将Build Action设置为Content  湾将复制到输出目录设置为始终复制
    3. 右键单击文本或XML编辑器中的package.appxmanifest并将证书添加到“Root”

        <Extensions>
      <!--Certificates Extension-->
      <Extension Category="windows.certificates">
        <Certificates>
          <Certificate StoreName="Root" Content="Assets\jsanders4.cer" />
      
        </Certificates>
      </Extension>