TLS(SSL的继任者),是一种常用的安全协议,广泛应用在网络上,位于TCP层以上,应用层以下。利用.Net的包很容易实现安全的TCP传输。主要步骤有.X509证书的生成和SslStream的应用。
.X509证书
.X509证书是一种常见的证书标准,这里利用通过微软提供的makecert 工具得到测试证书,具体过程如下:先进入到vs2017的命令行状态,即:开始-->程序-->Microsoft Visual Studio 2017-->Visual Studio Tools-->Visual Studio 2017 命令提示键入:
makecert -r -pe -n "CN=MyServer" -ss My -sky exchange
解释一下:makecert.exe是一个专门用来制作证书的小工具,上面一行的意思就是制作一个CN=MyServer的服务器证书,默认存储在CurrentUser"My这个位置,同时这个证书标识为可导出。(详细的MakeCert参数可参见http://msdn.microsoft.com/zh-cn/bfsktky3(vs.80).aspx)
再输入:`makecert -r -pe -n "CN=MyClient" -ss My -sky exchange`
接下来将证书导入:
开始-->运行-->MMC : 添加/删除管理单元 文件->添加/删除管理单元 证书->添加->我的用户账户 导入
将证书导入受信任的列表里:
开始->运行->certmgr.msc 将个人 证书里的生成证书,复制进受信任的根证书颁发机构 证书部分完成。
服务器端实现
主要有以下两个语句(本篇文章默认了解C#的TCP服务器实现)
SslStream sslStream = new SslStream(client.GetStream(), false);//安全套接字 Stream
sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Tls, true);//证书验证,具体参数信息,见.Net的注释
客户端实现
sslStream.AuthenticateAsClient("MyServer", certs, SslProtocols.Tls, true);//双向
sslStream.AuthenticateAsClient("MyServer");//验证证书,单向
可以选择
代码
源码见GitHub:https://github.com/wenwenpan/Web.git
文件说明:本次文件为:
第一个为客户端,第二个为服务端,IP为本地回环127.0.0.1 用于测试:
参考
证书:http://www.cnblogs.com/whtydn/archive/2009/12/23/1630750.html
证书:https://www.cnblogs.com/hhhh2010/p/3630807.html
主要参考: https://blog.csdn.net/wuyb_2004/article/details/51393290
SslStream:https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslstream?view=netframework-4.7.2