我必须在本地网络上进行点对点应用程序,基本上是发布文件的服务,本地网络上的另一个应用程序使用它。
我的想法是在服务中使用WebAPI并希望使用SSL。用户将在本地安装这两个应用程序。这是可行的解决方案吗?如果是这样,我发现this article但不确定如何获得certhash。
答案 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。
您可以通过以下步骤执行此操作:
如果您在上述证书列表中没有证书,您可以通过以下步骤轻松创建一个(自签名):