今天搞了一下怎么从http换成https,写一篇博客记录该过程。关于jexus的安装和使用请看我之前的一篇博客,唯一的不同是,将升级成了5.8.3的专业版。我觉得在这里还是有必要再说一下jexus这个东东。
什么是Jexus?Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,以支持ASP.NET、ASP.NET CORE、PHP为特色,同时具备反向代理、入侵检测等重要功能。可以这样说,Jexus是.NET、.NET CORE跨平台的最优秀的宿主服务器,如果我们认为它是Linux平台的IIS,这并不为过,因为,Jexus不但非常快,而且拥有IIS和其它Web服务器所不具备的高度的安全性,这是政府机构和重要企业对web服务器最必要也是最重要的品质需求。 关于Jexus独立版和通用版
Jexus“独立版”指的是自带.net运行时(mono),不需要在客户服务器安装mono就能正常运行的Jexus版本,该版本只支持 64位Linux操作系统。
Jexus通用版(不推荐)不带 .NET运行时,因此,使用者应该首先在客户机安装mono和libgdiplus。Jexus操作命令:操作Jexus需在Jexus的安装目录下操作,切换至目录(如:cd /tmp/jexus)启动:sudo ./jws start停止:sudo ./jws stop
重启:sudo ./jws restart
基础知识介绍完后,下面开始进入正题:
1、运行环境
系统信息:CentOS Linux release 7.4.1708(Core)
Jexus版本:Jexus V5.8.3x64 专业版(独立版)
2、安装并部署
安装Jexus并将.net core项目部署到CentOS中,使其能够通过域名正常访问,关于部署请查看上面提到的一篇博客,不做多余赘述。
3、申请SSL证书
我用的是腾讯云的服务器,可以自行进行申请,具体申请步骤可查看官方链接:
另外,如果大家是在腾讯云购买的域名的话,会自动生成一个免费的SSL证书,这个也是可以正常使用的,当申请完证书后,可以发现,申请的证书中包含了Apache 2.x,Nginx证书,IIS证书,Tomcat证书,并不包含Jexus证书,那如果想使用Jexus部署的话,可以直接采用Nginx的证书即可。关于这几种证书的安装,可直接参考腾讯云官方文档:
下载的证书文件如下:
为什么Https会比Http要安全,实际上就是因为多了一层SSL/TLS,SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。而TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。所以可以看到,在官方的文档中,SSL协议要按如下配置:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
4、配置SSL证书
Jexus有两种配置方式,一种是全服务器的配置,当然这要求你申请的证书是针对你在该服务器上所有域名的全局证书,在Jexus安装目录下修改jws.conf文件,分别修改CertificateFile 和CertificateKeyFile的证书的绝对路径,如图所示:
另一种配置就是比较常规的配置方式,适用于证书只针对某一个域名的情况,分别修改每个站点的配置文件,在Jexus安装目录中siteconf文件夹下,此文件用来放置你所有站点的配置,默认为default配置文件,可自行修改名称,要是有多个站点配置,可直接拷贝该文件。修改以下参数:
http使用的80端口,https使用的是443端口,注意在使用腾讯云的时候,要将你使用的端口在安全组里面添加入站规则,无需多说。注意这几个参数的配置:UseHttps=true,ssl.certificate=crt的绝对路径,ssl.certificatekey=key文件的绝对路径,ssl.protocol=默认的是TLSV1.1,ssl.ciphers配置的套件按照腾讯云的文档配置。
以上为如何配置证书,由于jexus https需要libssl函数库的支持,下一步登记SSL库
5、登记SSL库
首先查看在/lib或/usr/lib等系统文件库下是否有SSL库文件的名字,该文件名应该是“libssl.so.版本号”,使用命令:
find / -name libssl.so.*
若出现以下类似信息:
若没有出现以上信息,则说明未安装OpenSSL,就先请安装OpenSSL ,OpenSSL是一个安全套接字层密码库,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供丰富的应用程序供测试或其他目的使用。关于如何安装OpenSSL,请大家自行查找相关文档。那么如何确定的SSL库文件名,使用命令:
ls -l /usr/lib64/ |grep libssl
查看信息如下:
由此可以判定,我们所需要的文件为 libssl.so.1.0.2k 。找到该文件后,有两种配置方式,通用版的配置方式是修改配置文件,独立版的配置方式是可以直接进行软链接,下面我们首先查看是否有无链接成功,使用命令:
ls -l /root/jexus/runtime/lib
如上图所示,则表示没有链接,可使用命令进行软连接,命令如下:
sudo ln -s //usr/lib64/libssl.so.1.0.2k /root/jexus/runtime/lib/libssl.so
执行完成后,再运行查看链接命令如下图所示,表示已存在链接:
这就表明libssl已经链接到 /root/jexus/runtime/lib文件夹下了,此时我们启动我们的项目 ./jws start ,使用https访问就可以正常访问了。
另一种方式就是修改配置文件,文件路径在/jexus/runtime/etc/mono下的config文件,打开该文件在configuration节点下添加以下节点配置:
dll必须为libssl,target必须为你系统种用到的文件路径。再启动我们的网站也就可以正常访问了。
关于Jexus的其他的详细配置,可自行去官方文档进行查看。
扫描二维码关注我的公众号,共同学习,共同进步!