挣扎于 REST 调用和证书

Struggling with REST call and certificates

我正在尝试与需要证书才能进行调用的 REST Web 服务通话。我从我的客户那里得到了两个文件——一个 *.pem 和一个 *.key 文件。

使用这两个文件,我可以使用 curl:

在命令行上调用该 Web 服务
curl.exe -k -v "MyUrl" --cert mycert.pem --key mycertkey.key

这行得通。但我想使用 Fiddler 并最终使用我自己的 C# 代码来进行调用 - 但是如何?

Fiddler 中,我正在阅读有关必须将证书作为特定目录中的 ClientCertificate.cer 文件提供的信息......但我有一个 .pem.key 文件 - 如何将这些 "translate" 放入 *.cer 文件?

以及如何在我自己的 C# 代码 中使用这些 *.pem*.key 文件来调用该 Web 服务(使用 RestSharp 或只是一个普通的 WebRequest) ?

更新: 按照 Drew Burchett 的回答,我将我的 .pem 文件导入到我机器上的证书存储中,然后将其导出到 .cer 文件 ("DER-encoded, binary") 并将其放在 Fiddler 的文件夹中。尝试调用 REST 服务时,我仍然从 Fiddler 收到此错误:

[Fiddler] The connection to '......' failed.
System.Security.SecurityException Failed to negotiate HTTPS connection with server.fiddler.network.https; HTTPS handshake to (url) failed.
System.Security.Authentication.AuthenticationException Error with SSPI call, see internal exception; the format of the received message was unexpected or erroneous

有趣的是,最后一段(System.Security.Authentication.AuthenticationException 段)在我的系统中显示为德文,而其余部分为英文....奇怪......

更新#2:
在 C# 代码中使用带有 https:// 前缀的 WebRequest 和证书存储中安装的证书(我自己的证书、受信任的根证书)尝试此操作失败并出现错误:

System.Net.WebException was caught
HResult=-2146233079
Message=The request was aborted: no secure SSL/TLS channel could be established.

有什么想法吗?

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

  1. 展开个人文件夹并单击证书文件夹
  2. 右键单击“证书”文件夹(如果证书不存在,则右键单击“个人”文件夹),然后单击“导入”。
  3. 浏览到您的 .pem 文件的保存位置并select它。
  4. Select将证书导入指定文件夹。

导入过程完成后,您应该会看到证书。然后您可以右键单击它并 select 导出。选择 .cer 文件并提供路径和文件名以保存证书。

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

中的方法将证书嵌入应用程序的 "Root" 文件夹中
  1. 将服务器证书导出到 .der 文件
  2. 在你的应用程序中包含证书(我把我的放在资产目录中) 将证书包含在项目中后右键单击该证书,然后 一种。将构建操作设置为内容 b.将复制到输出目录设置为始终复制
  3. 在文本或 XML 编辑器中右键单击打开 package.appxmanifest,然后将您的证书添加到 "Root"

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