如何基于WSL创建TLS服务器
如果大家有幸进行TLS(Transport Layer Security传输层安全)协议栈的移植工作并实现客户端功能,那么在完成协议栈移植后要确认自己的移植工作是有效的方法肯定是和支持TLS协议的服务器进行联调工作。网络服务商可能开放了MQTT之类的收发接口,而没有提供TLS层的测试接口,所以比较好的方法就是自己进行服务器的搭建工作。本篇将介绍在WSL(Windows Subsystem Linux)环境下完成基于LINUX的TLS服务器搭建。
下载WSL以及配置环境
从win11开始,windows系统开始支持linux子系统,简称就是WSL(Windows Subsystem Linux)。安装子系统的话首先打开windows的商店。然后再商店中键入关键字"linux"或者“ubuntu”则会出现如图所示的安装软件。LTS的意思是Long Term Support就是会获得官方长久支持的版本的。
需要许可Linux子系统的运行,通过控制面板->程序->启动或者关闭windows功能,然后将Hyper-V、适用于Linux的Windows子系统以及虚拟平台都勾选上,这样才能在完成ubuntu的安装后正常的运行Linux子系统
Hyper-V的安装
这个时候关键来了,大家平时的笔记本安装的都是windows 家庭版,而Hyper-V这个特性只在企业版和专业版上才有。有朋友问,这个东西是干什么用的?是不是可以不装?我的答案是不行!因为我们后续基于WSL创建的TLS服务器是基于虚拟网络的(安装完成后启动WSL,会发现有个叫vEthernet的玩意,就是WSL的虚拟网络)如果希望通过笔记本的网口把报文发送到WSL进行处理,那就必须使用Hyper-V将WSL的虚拟网络接入到实际的网口上。(网上也有提供各种样式的使用PowerShell指令映射,但是至少我没试出来,最终还是用Hyper-V最简洁明了)
所以接下来我会提供一个在家庭版windows上实现Hyper-V安装的方法。
1、新建txt文档
2、将下述内容复制粘贴到文档中
pushd"%~dp0"
dir/b%SystemRoot%\servicing\Packages\Hyper-V.mumhyper-v.txt
for/f%%iin('findstr/i.hyper-v.txt2^nul')dodism/online/norestart/add-package:"%SystemRoot%\servicing\Packages\%%i"
delhyper-v.txt
Dism/online/enable-feature/featurename:Microsoft-Hyper-V-All/LimitAccess/ALL
3、保存txt文件并把文件后缀从txt修改为bat
4、以管理员身份执行bat文件,windows则会启动Hyper-V的安装
WSL搭建TLS服务器
完成上述的各种环境配置后可以启动安装好的ubuntu子环境,可以进入基于终端的LINUX界面(非常有OG程序员的感觉,哈哈),这个时候我们需要在Linux环境下安装一个软件叫openssl, Linux安装软件使用命令行即可,用过键入下述指令即可实现openssl的安装,由于我已经安装了所以提示图如所示。OpenSSL是开源的SSL/TLS协议栈,有兴趣的朋友可以进一步搜索一下。PS:有的朋友关注点会在我的主机名上,叫自己的笔记本一声小宝贝不过分吧~
apt install openssl
安装完openssl后,我们需要借用该软件生成一个证书(这是TLS的加密关键就在于证书,OpenSSL就可以完成一个证书的生成,当然正经的CA证书还是需要自行去走正规途径申请)。通过一下输入以下指令来生成证书
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
键入上述指令后会出现如下图形,这个类似于自己给自己的证书使用再加一道密码,就是类似于要是用这些证书开启TLS服务器,需要使用者键入生成时设定的密码的。友情提醒,设定密码的时候你键入内容不会显示在屏幕上(我一度不清楚我输入的东西哪儿去了),所以大家一定要记清楚自己设定的密码,包括大小写等。完成密码设定后回车即可。然后后面的内容就是依次根据提示填写一些信息,例如国家、省份、城市、组织和常用名。您可以根据需要自定义这些信息,但常用名必须是您要将证书用于的域名或IP地址。
完成填写后则会生成使用的证书,通过键入指令“ls”,则可以查看当前目录下的文件名,可见已完成证书cert.pem与密钥key.pem的生成
然后通过键入如下指令,则可以开启一个使用生成的证书,端口号为443的TLS服务器
openssl s_server -key key.pem -cert cert.pem -accept 443
开启的时候会要求输入最开始创建证书时自定义的密码,键入后回车即可,就会开启如下接口,表示此时TLS服务器已开启并处于监听状态,等待客户端连接。
通过键入如下指令则可以查看到当前WSL的IP配置,这样连接服务器需要的IP信息和端口信息就都知道了
在打开一个WSL终端端口,键入如下指令,其中IP填写刚才用指令查询到的服务端IP,然后端口填写服务端开启是设定端口
openssl s_client -connect IP:port
成功连接后则如下图所示
Hyper-V设置
打开Hyper-V管理面板,找到WSL将其虚拟网络接入到实际网口即可,这样通过电脑的实际网口传入的以太网口报文则会传入到WSL进行处理,这样完成了TLS协议栈移植的板子则可以实现与电脑搭建的TLS服务器进行握手、数据收发以及加解密是否成功的测试了