在介绍.Net Core和jexus配置HTTPS服务的具体方法之前,我们需要了解一些基础知识,包括HTTPS协议、SSL证书、以及如何在Linux环境下通过Docker容器部署.NET Core应用程序,以及如何使用jexus作为反向代理服务器来实现端口转发。
HTTPS(全称:HyperText Transfer Protocol Secure)是一种在计算机网络上进行安全通信的传输协议。HTTPS经由HTTP进行通信,但用SSL/TLS来加密数据包,保证通信安全,以防止数据在传输过程中被窃取或篡改。SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是为网络通信提供安全及数据完整性的一种安全协议,广泛用于互联网上安全敏感的通信。
SSL证书是由受信任的证书颁发机构(CA)颁发的一种电子证书,用于证明网站的身份以及启用HTTPS服务。证书通过加密方式确保数据传输的安全性,常见的是以.crt作为后缀的文件。
.NET Core是一个开源的、跨平台的.NET实现,可用来构建各种应用程序,包括Web应用、微服务和云应用等。Docker是一个用于开发、交付和运行应用程序的开放平台,它使开发者能够打包应用以及应用的依赖包到一个可移植的容器中,然后发布到任何支持Docker的机器上。
jexus是一个轻量级的Web服务器,可以运行在Windows平台上。它支持.NET Core应用程序,并且可以配置为反向代理服务器,通过端口转发与外部通信。
具体到本篇博客的环境配置,作者部署了一个.NET Core网站在Linux环境下的Docker容器中,并且由于该网站需要通过OAuth2.0协议进行外部认证,因此必须使用HTTPS来确保安全性。由于外部服务要求使用SSL,网站必须配置HTTPS。证书可以通过腾讯云免费申请,并且根据服务器类型选择相应的文件格式。如果需要jexus支持的证书文件,可以将Nginx的crt和key文件转换为pfx文件,以便jexus使用。
在配置.NET Core应用程序以使用HTTPS时,需要在程序的入口文件中配置Kestrel服务器,这是一个轻量级的跨平台Web服务器,用于.NET Core应用。在Program.cs文件中,需要指定SSL证书,使用UseKestrel()方法来绑定证书和端口,并且不能使用.UseUrls("https:" "//:443")因为这样的配置在没有UseKestrel()的情况下会导致错误。
在实际操作中,作者发现在jexus中配置HTTPS服务后,网站在开发环境下可以正常访问,但在部署到域名或IP地址时,默认生成的是HTTP协议的回跳地址,这会与OAuth协议的安全要求冲突,因为OAuth协议要求使用SSL的服务必须使用HTTPS协议。因此,在.NET Core应用程序中也需要进行HTTPS配置,以确保整个通信过程中使用HTTPS协议。
作者提出了配置中可能遇到的疑问,即jexus端口转发请求时是否保持HTTPS协议,以及在没有配置UseKestrel()的情况下,如果不对kestrel进行HTTPS配置,第三方登录成功后的回调地址访问网站时,会默认使用HTTP协议,这与OAuth协议要求使用HTTPS协议相矛盾。作者通过在Program.cs文件中加入合成的pfx文件,解决了这个问题。需要注意的是,这种方法要求每一个容器中的网站都需要使用证书,且不能在没有配置UseKestrel()的情况下使用.UseUrls("https:" "//:443")。