首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于HTTPS的自托管WebHttpBinding服务

基于HTTPS的自托管WebHttpBinding服务
EN

Stack Overflow用户
提问于 2019-02-12 16:00:18
回答 1查看 330关注 0票数 0

我有以下rest windows服务,它可以在HTTP上完美地工作

代码语言:javascript
复制
Uri[] httpBaseAddress = new Uri[] { new Uri("http://localhost:8464/SupportRemote") };

serviceHost = new ServiceHost(typeof(Service.SupportRemoteService), httpBaseAddress);
var Binding = new WebHttpBinding();
ServiceEndpoint endpoint = serviceHost.AddServiceEndpoint(typeof(Model.ISupportRemoteService), Binding, "Rest");
endpoint.Behaviors.Add(new WebHttpBehavior());

foreach (ServiceEndpoint EP in serviceHost.Description.Endpoints)
   EP.Behaviors.Add(new BehaviorAttribute());

var serviceBehavior = new ServiceMetadataBehavior();
serviceBehavior.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add(serviceBehavior);
serviceHost.Open();

现在我想用自签名证书把它移到HTTPS上,但是服务不起作用。我不知道问题出在哪里。

代码语言:javascript
复制
Uri[] httpBaseAddress = new Uri[] { new Uri("https://localhost:8464/SupportRemote") };

serviceHost = new ServiceHost(typeof(Service.SupportRemoteService), httpBaseAddress);
var Binding = new WebHttpBinding(WebHttpSecurityMode.Transport);
Binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
ServiceEndpoint endpoint = serviceHost.AddServiceEndpoint(typeof(Model.ISupportRemoteService), Binding, "Rest");
endpoint.Behaviors.Add(new WebHttpBehavior());

foreach (ServiceEndpoint EP in serviceHost.Description.Endpoints)
   EP.Behaviors.Add(new BehaviorAttribute());

var serviceBehavior = new ServiceMetadataBehavior();
serviceBehavior.HttpGetEnabled = false;
serviceBehavior.HttpsGetEnabled = true;
serviceHost.Description.Behaviors.Add(serviceBehavior);
serviceHost.Credentials.ServiceCertificate.SetCertificate("CN=MyCertificate", System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, System.Security.Cryptography.X509Certificates.StoreName.Root);
serviceHost.Open();
EN

回答 1

Stack Overflow用户

发布于 2019-02-12 18:03:30

看起来您已经在服务器端设置了服务器证书,但有一件事我们必须注意。默认情况下,应用程序没有将证书绑定到端口的权限。我们可以手动将证书绑定到端口。

代码语言:javascript
复制
netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}

这是官方文档,希望对你有用。

https://docs.microsoft.com/en-us/windows/desktop/http/add-sslcert

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-a-port-with-an-ssl-certificate

此外,您最好使用localSystem帐户托管windows服务,以防启用应用程序占用端口时出现问题。

如果有什么我能帮上忙的,请随时告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54645310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档