WebHttpBinding _binding = new WebHttpBinding();
WebServiceHost ws = new WebServiceHost(typeof(Service1), new Uri("http://10.10.12.70:8085"));
//WebServiceHost ws = new WebServiceHost(typeof(Service1), new Uri("https://10.10.12.70:8085"));
//ws.Credentials.ServiceCertificate.SetCertificate("CN",StoreLocation.LocalMachine,StoreName.My);
//_binding.Security.Mode = WebHttpSecurityMode.Transport;
//_binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; ws.AddServiceEndpoint(typeof(IService1), _binding, "ss");
ws.Open();
System.Diagnostics.Process.Start("http://10.10.12.70:8085/ss/abc");
MessageBox.Show("ok");

netsh http show sslcert
netsh http add sslcert ipport=0.0.0.0:8085 certhash=50806af07c74f269aad830f7fc536a777ba42d3a appid={BCC1AFD4-E27F-4E74-A162-193069C8437C}
netsh http delete sslcert ipport=0.0.0.0:8085

服务器端代码修改

服务器端的代码修改包括:1)uri的scheme验证,确保资源访问必须采用ssl加密;2)自宿主服务器启动监听uri改为https字头。

scheme验证仍然采用与上篇文章相同的方法,即实现一个新的HttpMessageHandler,并将其注入到消息处理管道中:

public class HttpsGuard : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (!request.RequestUri.Scheme.Equals(Uri.UriSchemeHttps, StringComparison.CurrentCultureIgnoreCase))
{
var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new StringContent("Https is required for security reason")
};
return Task.FromResult(response);
}
return base.SendAsync(request, cancellationToken);
}
}

修改Startup的Configuration,将上面的HttpMessageHandler注入:

public void Configuration(IAppBuilder app)
{
// Configure Web API for self-host.
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{param}",
defaults: new { id = RouteParameter.Optional }
);
//注入response handler
config.MessageHandlers.Add(new ResponseHandler());
//注入httpmessagehandler用于验证request是否均采用SSL加密传输
config.MessageHandlers.Add(new HttpsGuard());
//允许WebApi的跨域访问 - 测试条件下允许所有域的跨域访问
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors); app.UseWebApi(config);
}

服务器启动则改为如下:

1 var urlBase = new UriBuilder("HTTPS", ip, 7777).Uri; 2
3 var server = WebApp.Start<Startup>(url: urlBase.AbsoluteUri);

以上三部分修改完成后,对web api服务端代码的修改完毕,可以启动服务,正常开始监听本地7777端口。此时如果在浏览器中访问,则会提示证书失效,是否继续访问等等大家熟悉的场景。

对客户端代码做如下修改,目的就是不验证证书的有效性,即接受所有证书的认证。

新增如下方法:

private static bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
}

base.SendAsync(request, cancellationToken)之前,调用下这个方法:

ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;

即可。

或者不需要新增这个方法,直接在base.SendAsync(request, cancellationToken)之前新增一句:ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };即可,简单粗暴,信任所有证书。

以上步骤完成之后,即可通过

var myResponse = myClient.GetAsync("https://192.168.1.166:7777/api/test/GetUser/id=123123&name=jiakai").Result;

SS L服务的更多相关文章

  1. 多个Linux发行版安装ss服务端

    本文仅做技术探讨,请在遵守相应的法律法规的前提下使用. Centos 7一键安装脚本 简单快捷,随机生成密码,默认端口默认加密类型 bash <(curl -s http://morning.w ...

  2. 在服务器本地监控服务端口命令之ss

    在服务器本地监控服务端口命令之ss 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢.可能你不会有 切身的感受,但当 ...

  3. 每天一个linux命令(57):ss命令

    ss是Socket Statistics​的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的 ...

  4. ss命令

    看到好的博文,所以记录一下.本文出自转载. ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它 ...

  5. 每天一个linux命令(49):ss命令

    ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...

  6. 每天一个linux命令day2【ss命令】

    ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...

  7. ss命令使用示例

    导读 ss是Socket Statistics的缩写,可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比n ...

  8. 每天一个linux命令(44)--ss命令

    ss 是 socket statistics 的缩写.顾名思义,ss 命令可以用来获取socket 统计信息,它可以显示和netstat 类似的内容.但 ss 的优势在于它能够显示更多更详细的有关TC ...

  9. Linux指令--traceroute,netstat,ss

    通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一 ...

随机推荐

  1. 阿里druid连接池监控数据自定义存储

    如何将druid连接池监控到的sql执行效率,连接池资源情况等进行持久化存储,方便系统运维分析优化,以下案例初步测试成功. 第一部: 新建MyDruidStatLogger类实现接口 extends ...

  2. Kubernetes addons 之 coredns部署

    Kubernetes addons 之 coredns部署 2019.06.04 18:04:35字数 1045阅读 121 DNS 是 Kubernetes 的核心功能之一,通过 kube-dns ...

  3. 【转载】 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    原文地址: https://www.cnblogs.com/further-further-further/p/10430073.html ------------------------------ ...

  4. WPF 插件开发(.NET Framework 3.5 System.Addin)

    http://www.cnblogs.com/lc329857895/archive/2009/07/22/1528640.html http://www.cnblogs.com/huihui0630 ...

  5. netty5拆包问题解决实例

    基于之前的例子(参见netty5自定义私有协议实例),我们修改下客户端handler,让发送的数据超过1024字节: NettyClientHandler: /** * 构造PCM请求消息体 * * ...

  6. 封装Email相关的操作

    package com.opslab.util; import javax.activation.DataHandler;import javax.activation.DataSource;impo ...

  7. k8s记录-kubeadm安装(二)(转载)

    kubeadm安装安装环境(vm6.5下虚拟机3台,centos 7.4):master:10.20.0.191Node1:10.20.0.192Node2:10.20.0.193 1.安装虚拟机,配 ...

  8. ArrayList数组操作

    String字符类型的操作方法 public static void main(String[] args) { // ArrayList ArrayList<String> list = ...

  9. 123457123456#2#----com.ppGame.XueYingYu76--前拼后广--儿童英语_pp

    com.ppGame.XueYingYu76--前拼后广--儿童英语_pp

  10. 安装kubernet(k8s)

    简介: 需要学习的都明白,这里就不赘述了. 本文采用CentOS-7-x86_64-DVD-1810.iso 一:安装操作系统 本来是喜欢用fedora的,但是fedora貌似包维护的不好,就又开始用 ...