在客户端使用SSL与自托管Web API

时间:2013-04-09 15:52:48

标签: .net ssl asp.net-web-api

我必须在本地网络上进行点对点应用程序,基本上是发布文件的服务,本地网络上的另一个应用程序使用它。

我的想法是在服务中使用WebAPI并希望使用SSL。用户将在本地安装这两个应用程序。这是可行的解决方案吗?如果是这样,我发现this article但不确定如何获得certhash。

2 个答案:

答案 0 :(得分:1)

是的 - 这是一个可行的解决方案。

以下是您在混合中获得SSL(或TLS)时幕后情况的快速概述: http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html

具体来说,使用HTTPS可以获得两个好处: - 加密 - 信任(如果你已经获得了识别每个终点的证书,那么你将能够“确定”你的客户端应用程序相互连接而不是,可能是某些'潜行'大堂的笔记本电脑/等。)

问题在于,只是找到一些关于如何设置这一切的正确文档(并确定你将从哪里获得证书(如果他们是自签名的(即,没有你自己的/公司签署权限或没有受信任的第三方权限),那么您可以失去上面列出的信任利益。

就文档而言,以下资源似乎相当不错(虽然我只对其进行了修改):

而且,似乎Matias甚至创建了一个Nuget包,它可以使这一切变得更容易设置: http://nuget.org/packages/Auth10.AspNet.WebApi.ClientCert/

(我需要自己检查一下 - 因为我只是瞥了一眼。)

答案 1 :(得分:0)

我把它放在这里供参考;您的certhash问题的具体答案如下:

(This)文章相对较详细地介绍了如何在客户端/自托管.net应用程序上设置HTTPS。

我能够使用在Windows服务下运行的自我主机项目的变体跳过第1步,但如果您使用在用户下运行的控制台或其他应用程序,则肯定是必需的。

如果你在VB.NET中工作,你的MyHttpsSelfHostConfiguration类将如下所示:

Imports System.ServiceModel.Channels
Imports System.Web.Http.SelfHost
Imports System.Web.Http.SelfHost.Channels

Public Class MyHttpsSelfHostConfiguration
    Inherits HttpSelfHostConfiguration
    Public Sub New(baseAddress As String)
        MyBase.New(baseAddress)
    End Sub
    Public Sub New(baseAddress As Uri)
        MyBase.New(baseAddress)
    End Sub
    Protected Overrides Function OnConfigureBinding(httpBinding As HttpBinding) As BindingParameterCollection
        httpBinding.Security.Mode = HttpBindingSecurityMode.Transport
        Return MyBase.OnConfigureBinding(httpBinding)
    End Function

End Class

此外,如果您选择在Windows服务下运行此操作而不是标准应用程序(此处作为参考),您需要调暗您的服务器As新的HttpSelfHostServer(config)'而不是使用Using子句,因为Windows服务将立即处理使用(或者我在其他地方阅读)。

如果您选择的其他客户端(用于测试)未连接,请尽可能在浏览器中指向您的服务方法,因为浏览器会在尝试时告诉您安装的证书是否存在问题通过https进行通信。

我也在努力获得certhash。

您可以通过以下步骤执行此操作:

  1. 打开' MMC'
  2. 文件>添加Snapin>证书(计算机帐户/本地计算机)>行
  3. 打开证书管理单元>个人>证书,并找到具有服务器身份验证的预期目的的证书(在预期用途列中)
  4. 双击此证书。
  5. 转到详细信息选项卡,然后找到指纹键
  6. 复制此键的值。将其粘贴到 notepad ++
  7. 转到编码菜单,然后选择转换为ANSI 。这将显示一个隐藏的角色'?'在一开始你必须删除。从此数字中清除空格,然后您可以将其用于您的证书哈希。
  8. 如果您在上述证书列表中没有证书,您可以通过以下步骤轻松创建一个(自签名):

    1. 打开IIS管理器
    2. 在IIS管理器中打开您的服务器
    3. 打开“服务器证书”'页
    4. 在右侧的“操作”下,选择“创建自签名证书”