如何实现让多个 OpenLiteSpeed 虚拟主机支持 HTTPS

在前一篇文章中,我给小伙伴们介绍了 OpenLiteSpeed (以下简称 OLS ) 的基础安装以及使用方法,简单易上手,基本上不用手动编辑配置文件。

参考文章:《用 Laravel 吗,从 Nginx 切换到 OpenLiteSpeed 的那种》

链接:https://www.sysadm.cc/index.php/webxuexi/810-give-up-nginx-then-using-laravel-with-openlitespeed


看过之前的这篇文章,就算是小白也可以轻松入门(我就是这么入门的)。

不过文章最后我们留了一个扣,就是如何才能让 OLS 支持 SSL 的问题,现在还果奔 http 的应该不多见了吧?

网络传输涉及到安全问题,所以现在绝大部分网站的网址都冠以 https

有了 https 加持,你就会看到网址前多了一把小锁,也就说明连接是安全的。

OLS 官网的知识库中的确有相关设置 SSL 的内容,但似乎又太过于简略,需要重点说明的却一笔带过。

官网知识库链接:https://openlitespeed.org/kb/ssl-setup/


本着为人民服务的宗旨,发挥一不怕死、二不怕苦的老一辈的奋斗精神,我按照知识库文章中的介绍,初步实现了在监听器上支持 SSL 的目标。

这里事先说明一下,因为像 Let's Encrypt 之类的互联网证书如何设定的教程网上有大把,所以本文仅仅拿如何导入自签名证书来做演示。

只不过之后在虚拟主机的设定上又遇到了一个坑,浪费了不少时间。

具体是什么坑呢,请听我慢慢道来。



一、安装 OpenSSL 工具

工欲善其事,必先利其器。

生成我们所需的密钥和证书文件,通常会用到 OpenSSL 这款神器。

在这儿我准备给小伙伴们介绍一下 OpenSSL for Windows

手头上没有 Linux 的小伙伴们不用急,这个是可以在 Windows 下使用的哦!


OpenSSL 是在 Linux 下经常被使用的常用于通讯加密的开源加密软件,但早先在 Windows 下好像并没有它的身影。

还好总有些爱好者,他们组织在一起开发了 OpenSSL for Windows ,终于在 Windows 下我们也可以用上 OpenSSL 了。

不过吧其网站有点怪怪的,不知道为啥它并不是 https 开头的。

产品链接页面:http://slproweb.com/products/Win32OpenSSL.html


打开产品链接,你可以找到最新版本的 OpenSSL for Windows 下载,分为轻量版和32/64位版。


一般轻量版的就够用了,我选择了最靠前的一个。

备用下载:Win64OpenSSL_Light-1_1_1j.exe (3.54M)

下载链接:https://www.90pan.com/b2354310

提取码:


输入密码,继续阅读



扫码关注微信公众号,回复文章ID免费获取密码


<文章ID:000814>


下载完成后开始安装,最初它会提示你系统中没有安装 Microsoft Visual C++ 2017 Redistributables


如果你点是,它会帮你下载,但只有上帝才知道它什么时候能下载完,微软的速度你懂的。

所以我找到了以前安装 WampServer 时用到的组件包,其中就有这个版本的组件。

当然,OpenSSL 是64位的自然所需64位的组件,不过我这32位的也有,就打包放一起吧。


备用下载:Visual C++ Redistributable Packages for Visual Studio 2017.7z (19.6M)

下载链接:https://www.90pan.com/b2354295

提取码:


输入密码,继续阅读



扫码关注微信公众号,回复文章ID免费获取密码


<文章ID:000814>



装完组件,继续安装 OpenSSL for Windows


中间有询问你将动态链接库放在哪儿合适的提问,你要是无所谓那就默认放在 Windows 系统文件夹中,要是有强迫症,那就选择和执行文件放一起,其实都可以正常使用。


正像安装进程最后那幅画面提示的那样,爱好者组织看上去非常渴望被捐助。


这也可以从前面那张协议窗口的文本中窥见一斑,爱好者组织对白嫖者虽说不上痛恨,但却抱着嗤之以鼻的态度。

在此也顺便呼吁一下小伙伴们,如果你的确从中受益,即便不予以金钱,但也请表达一下你的支持,比如关注、点赞、分享、外加在看,顺手也关注一把@网管小贾,哈哈。


好了,我们完成安装后,建议大家最好将 OpenSSL 的执行目录加到系统路径中。

这样我们就可以开始创建 SSL 证书了。



二、生成用于 HTTPS 的密钥和证书文件

此处用最最最简单的方法来实现,一共三步三条命令来生成自签名证书。

为了便于今后整理和识别,我们以域名为文件名来区分不同的主机。

比如域名为 sysadm.local,则可以按以下方式生成私钥和证书。


1、生成私钥文件,以 key 为后缀。
# openssl genrsa -out sysadm.local.key 2048
 


2、以密钥为基础,生成证书请求,以 csr 为后缀。
# openssl req -new -key sysadm.local.key -out sysadm.local.csr
 

命令执行后的交互内容其实可以任意填写,但有一个地方必须要填写正确,那就是通用名称,一般来讲应该是主机的域名。


3、有私钥,有请求,那么就可以据此生成相应的证书了,以 crt 为后缀。
# openssl x509 -req -days 3650 -in sysadm.local.csr -signkey sysadm.local.key -out sysadm.local.crt
 


好了,一共生成三个文件,除了请求文件是用于生成证书的过渡文件外,其他两个文件等会儿就要用到了。

  • sysadm.local.key 私钥(备用)
  • sysadm.local.csr 请求(不用)
  • sysadm.local.crt 证书(备用)



三、给监听器设定证书,开启 SSL

找到监听器,在列表中点击监听器名称。


点击右侧编辑按钮,将端口修改成 443 ,加密连接修改成


SSL 选项卡中指定私钥和证书路径。



四、映射虚拟主机并测试效果

我们假定这里有两台虚拟主机,并分别对应两个不同的域名。

至于如何建立虚拟主机,小伙伴们可以参考之前我写的文章。

  • 一号虚拟主机:www1.sysadm.local
  • 二号虚拟主机:www2.sysadm.local


新建好虚拟主机并映射到监听器后,我们就可以开始测试前面设定 SSL 的效果了。

打开浏览器(比如我这用的火狐),输入虚拟主机域名访问,比如:

https://www1.sysadm.local
 

可以看到网站的确可以访问,只不过那把小锁带了个感叹号。

其实正是由于我们使用的是自签名证书,所以才会有感叹号提示,不过并不影响实际使用。


点击图中那个不安全连接右边的箭头来查看详细情况,可以看到证书的验证者是 SYSADM.CC

一切好像都挺顺利哈,不过当你打开第二个虚拟主机站点时,你会发现它的证书信息中的验证者也同样是 SYSADM.CC


这两个站点的信息都一样,都是由同一个 SSL 证书提供的加密保护,这有什么好奇怪的吗?


这种情况的确是由于 SSL 证书设定在监听器级别上,所以多个虚拟主机可共用一个证书。

但是,小伙伴们有没有想过,如果是多个虚拟主机,并且它们分别属于不同的组织、不同的站长或不同的域名,那么有可能使用不同的证书吗?

答案是,当然有可能,要不天底下就一个证书,大家都来用不就乱套了。

可是根据 OLS 官网知识库的说明内容,我却无法正常实现以虚拟主机为单位分别给其设定 SSL 证书。

怎么回事?原来这里有个坑!



五、设定虚拟主机级别的 SSL 证书

我删除了监听器上的证书路径,并按官网说明在虚拟主机的 SSL 选项卡上指定了证书路径。

但是被现实结果啪啪打脸,无论我怎么刷新都无法正常加载网页。


调试了N个小时,愣是找不着北,什么鬼,到底问题出在哪儿了呢?

遇事不决问网络,我搜!

没成想就在 OLS 的官方论坛里找到了版主这么一段奇妙的文字。


试着将鸟语翻译过来,大概是这么个意思。

意思是你得先在监听器那儿设定好证书,然后再在虚拟主机上设定证书。

由于虚拟主机级别设定会覆盖监听器级别的设定,之后访问具体站点时,它会自动跳过监听器证书而读取虚拟主机证书。

哦?真的是这样吗?


我按前面介绍的生成证书的步骤,分别为两台虚拟主机生成了各自的私钥和证书文件。

其中,三个步骤中的第二步,我特意将组织名称区分开来。

  • www1.sysadm.local 对应 AAAAAAAA
  • www2.sysadm.local 对应 BBBBBBBB


然后,注意这里是重点。

首先,将监听器设定好主证书,其实就是按一开始前面所说的做,确保监听器级别下可以通过 HTTPS 访问。

其次,再到各个虚拟主机的 SSL 选项卡中设定各自的子证书。

这些虚拟主机级别的子证书的制作方法和前面的都是一样的,就是那三个步骤,只是为了各自区分,注意域名填写就行了。


OK,全部设定好后别忘记平滑重启。

再来检查一下两个站点的证书信息,这回终于各归各家了。



最后总结

最终我是花了大概两天时间,初步将 OLS 加装了自签名证书,实现了 SSL 加密通讯访问的效果。

使用自签名证书虽然会有警告提示,但通常在局域网内部使用问题不大,有时也用于测试环境,最最重要的是,它不要钱啊。

另外,还在依赖 Windows 下的诸如 WAMP 之类的集成环境的小伙伴们,OLS 作为 WEB 测试环境中的一个比较好的选择,如果你也使用 Linux 那么完全可以考虑上手。

毕竟像 Laravel 之类的框架官方是不太建议在 Windows 下调试开发的。

说到调试开发,那么多的 PHP 版本可以同时工作、来回切换吗?

有机会的话,我会再探究一下 OLSPHP 多版本的安装与切换。


最后的最后,希望小伙伴们表达一下爱心,关注@网管小贾,给走一波点赞、分享和在看吧!

感谢你们哦!


微信公众号 | @网管小贾



提交评论

安全码
刷新

© 2020-present 网管小贾 | 微信公众号 @网管小贾
许可协议:CC-BY-NC 4.0 | 转载文章请注明作者出处及相关链接