花了几天时间,看了好多篇博客,终于搞定了网站的HTTPS服务,借此写篇博客,来让有需要的朋友少走弯路。

一、环境介绍

  1、Linux下在Docker容器中部署好了一个网站,该网站需要通过外部提供程序访问微软的登录平台,利用的是OAuth2.0协议,因此要求必须要使用SSL服务,也使得网站必须要加入HTTPS服务。

  

  2、容器外,宿主机上通过jexus做端口转发。(本没打算用到jexus,但是看到情形不对,还是必须把它拉入进来)

  3、HTTPS服务需要证书,通过在腾讯云上申请免费证书https://console.cloud.tencent.com/ssl,一天之内便可申请到,注意了!!!,假如说使用的和我一样也是用的jexus,而腾讯云提供的证书下载包里面没有jexus,只有IIS、Nginx、Apache..等等,

  

  我们是可以直接利用Nginx的两个文件。第一个是crt文件,第二个是key文件。

  

  假如说你需要pfx结尾的文件那么可以通过这两个文件进行合成生成pfx文件可以通过命令:

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

   将其中文件名更改为你的文件名即可。又或者度娘上也有将内容粘贴进去然后自动生成的网站,不要敲命令的,这就不再提供网站了。

二、全配置

   首先,我想说下,我在jexus中配置了HTTPS服务,在Docker容器中运行的网站中也配置好了HTTPS服务。如同此图:

  

  可能有人会想,为什么都要配置,只配置jexus就足够了啊。当然,配置jexus是足够了,但是我的网站里面如果需要调用比如OAuth2.0协议支持的网站时,回掉地址总是会是用的HTTP协议,开发环境下没问题,但是一旦弄上域名或是IP地址访问,那么生成的就是HTTP的协议了。

  具体就是在此处.我通过配置好了微软的外部提供程序,当点击按钮后将跳转到微软登录页面:

  跳转后,当前登录页面的url中写明了一些参数是我们想要的,比如redirect_url,此时我已经配置好了网站上的HTTPS协议,在没有配上时,该处的redirect_url一直都是HTTP的

  好了,开始配置HTTPS服务:

  1、在.Net Core中配置HTTPS协议

    首先,这里可能要搞清楚一下,jexus和网站之间的请求转发,这也是我想弄清楚的一个问题,jexus端口转发请求的时候是不是还是HTTPS协议的,还是说只是请求转发,到了网站中又变成了HTTP了。就如这个模型,在jexus转发之后,进入kestrel后是HTTP协议的还是HTTPS协议的? 希望各位博友帮忙,我没有找到参考资料。

    

   我能做的就是在我尝试在kestrel中不配置HTTPS协议下,访问网站虽然也是能够成功的,但是当通过微软的第三方登录成功后回调地址访问网站时,便会是使用的HTTP协议,也就会出问题,与OAuth要求使用SSL的服务必须使用HTTPS协议相矛盾,也就促使着我必须要在kestrel中配置好HTTPS协议。具体配置如下:

  在Program.cs文件中,加入前面所合成的pfx文件,即可,这种情形下,要求我的每一个容器中的运行的网站都需要使用证书了。同时注意,在此处不能够使用.UseUrls("https:"//:443")来设置HTTPS服务,在没有配置.UseKestrel()下是会报错的,望注意!。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using Identity.Api.Web.Core; namespace Identity.Api
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
//.UseJexusIntegration()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, , listenOptions =>
{
var certificate = new X509Certificate2("hdshopserver.pfx", "你的证书密码");
listenOptions.UseHttps(certificate);
});
})
.UseStartup<Startup>()
.Build();
}
}

  2、在jexus上配置HTTPS协议(假如说用的不是jexus或是没有用到jexus,则可跳过此处)

    首先,通过命令查看到我的jexus版本是5.8.3,是支持HTTPS的了。

    

    进入你的jexus配置文件夹,我用图形表示更加直观点:

     

    具体的jexus的各种文件功能不再介绍,此处只针对配置证书服务,需要查看可看http://blog.csdn.net/yang1982_0907/article/details/45155765

    我们可以在jws.conf中配置整个服务器上的所有网站都令其使用HTTPS服务:

    

    也可在siteconf中配置你需要的单独的网站中使用HTTPS服务:

    

    通过UseHttps=true和配置好前面所提到的两个文件,jexus的HTTPS服务算是搞定了.然后可以通过https://域名进行查看,假如说不能成功,可以在jexus文件夹下的log文件中查看信息,这很关键!!。

    在jexus的配置上还需要感谢@无语1994的帮助,刚配置时,用的是自己在服务器上通过命令生成的证书,不管怎样,都不能看到到网站页面,然后通过使用腾讯云上的证书,摆平!

   通过两次配置后我的网站便可使用HTTPS服务了,也因此,在使用微软的外部提供程序上登录微软第三方页面也就没问题了,可以正常回调显示了。

   如想查看,可以访问https://www.hdshop.xyz:1101/。通过登录按钮调用微软登录页面。

三、个人总结

  在配置方面,走了不少弯路,首先是只是想到在网站中进行配置,但是尝试起来发现,当我将jexus关闭后sh /usr/jexus/jws stop,也就是直接将网站面向外网,可以进行访问成功。

  

  此时,每个容器中的网站都各自配置了HTTPS服务,但是想到这里便会感觉每个网站都配置的话,有点冗余,那么直接在jexus上配置呢。当然可以,

 

  通过在jexus上配置完毕,去掉每个网站上各自配置的HTTPS服务,假如说一个网站不需要使用到诸如OAuth、微信支付等等要求安全性比较高的,那么jexus上配置HTTPS服务也就足够了,但是在使用到那些安全性要求后,自身网站也要配置起HTTPS服务。也就因此,我被困了好多天,最终的效果是:

   

四、留下问题求助

  第一个问题便是在之前提到的那张图中:

  

  jexus和kestrel之间仍然是以什么方式进行传递,我看到是利用的tcp,但是举个例子,用户访问的URL是https://xxx.com进入jexus,服务转交到kestrel,在kestrel中接收的是https://xxx.com还是http://xxx.com,还是说其他的方式。

  第二个问题便是在配置过程中,看到微软提供的HTTP重定向到HTTPS的解决方案,意思是说我通过http访问后会将http的访问请求转变成https的访问请求吗?也就是说支持http和https的两种方式,是否?

2018-2-25,望技术有成后能回来看见自己的脚步

.Net Core和jexus配置HTTPS服务的更多相关文章

  1. .Net Core使用jexus配置https

    今天搞了一下怎么从http换成https,写一篇博客记录该过程.关于jexus的安装和使用请看我之前的一篇博客<Jexus部署Asp.Net Core项目>,唯一的不同是,将jexus升级 ...

  2. 用keytool制作证书并在tomcat配置https服务(二 )

    用keytool制作证书并在tomcat配置https服务(一) 双向认证: 我们上边生成了服务端证书,并发送给客户端进行了验证. 双向认证是双向的,因此还差客户端证书. 1.为方便导入浏览器,生成p ...

  3. 用keytool制作证书并在tomcat配置https服务(一)

    https分为单项认证和双向认证. 一般https页面上的访问都是单项认证,服务端发送数字证书给客户端,客户单方面验证.而服务端不做验证. 而双向认证,需要双方都有证书,然后发送给对方进行验证.一般用 ...

  4. 用keytool制作证书并在tomcat配置https服务(四)

    用keytool制作证书并在tomcat配置https服务(一) 用keytool制作证书并在tomcat配置https服务(二) 用keytool制作证书并在tomcat配置https服务(三) 上 ...

  5. 用keytool制作证书并在tomcat配置https服务(三)

    用keytool制作证书并在tomcat配置https服务(一) 用keytool制作证书并在tomcat配置https服务(二) 用keytool制作证书并在tomcat配置https服务(四) 模 ...

  6. Nginx 配置https 服务

    一.HTTPS 服务 为什么需要HTTPS? 原因:HTTP不安全 1.传输数据被中间人盗用.信息泄露 2.数据内容劫持.篡改 HTTPS协议的实现 对传输内容进行加密以及身份验证 HTTPS加密校验 ...

  7. 【HTTPS】自签CA证书 && nginx配置https服务

    首先,搭建https服务肯定需要一个https证书.这个证书可以看做是一个应用层面的证书.之所以这么说是因为https证书是基于CA证书生成的.对于正式的网站,CA证书需要到有资质的第三方证书颁发机构 ...

  8. 配置HTTPS服务

    环境为CentOS 7.3.httpd2.4.6 一 搭建证书 说明: CA 主机为192.168.29.3 client主机为 192.168.29.100 1 生成私钥 [root@centos7 ...

  9. express 配置 https 服务 ( 以阿里云服务器为例), 探索一周终于搞定

    首先最重要的是 你要明白 https接口的接收或者发送 的形式 是  https://域名:端口号   而不是 https://ip:端口号   一,首先,去阿里云注册免费ssl证书   1,在搜索框 ...

随机推荐

  1. win7系统如何在防火墙里开放端口

    用到的端口需要在防火墙里开放,win7的比XP的要复杂一些,此方法同样适用于server2008系统 方法/步骤 1 依次点击"开始"-"控制面板"-" ...

  2. Contiki 源代码目录结构

    最近要在烧写contiki的CC2650上做一些简单的实验,需要对contiki的目录结构有一个简单的了解.本文使用的是contiki 3.0版本,并且参考了百度文库上的一篇文档:https://we ...

  3. 【编程技巧】addSubview和insertSubview的区别

    addSubview 是将view加到所有层的最顶层 相当于将insertSubview的atIndex参数设置成view.subviews count 即 [view addSubview:onev ...

  4. 【编程技巧】alert vs Ext.Msg.alert

    alert会阻塞程序的运行. Ext.Msg.alert是异步的,它的调用并不会停止浏览器中代码的执行.

  5. FORTH运算符

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  6. python3 第八章 - 完善九九乘法表

    前面我们在第四章的时候挖了个坑:怎么用优雅的方式来打印九九乘法表.这一章我们就来填上这个坑. 首先,我们再来看下九九乘法表是什么样子的 1 x 1 = 1 1 x 2 = 2 2 x 2 = 4 1 ...

  7. 捕获arm非托管磁盘虚拟机,并进行还原

    背景:非托管磁盘虚拟机"hlmcen69n1",附加了一块100GB的数据磁盘.由于arm非托管磁盘机器无法通过Portal界面直接"Capture",故只能通 ...

  8. scrapy_随机ip代理池

    什么是ip代理? 我们电脑访问网站,其实是访问远程的服务器,通过ip地址识别是那个机器访问了服务器,服务器就知道数据该返回给哪台机器,我们生活中所用的网络是局域网,ip是运营商随机分配的,是一种直接访 ...

  9. selenium-java web自动化测试工具

    本篇文章由来,这两天整理了下自己经常使用而且很熟练的项目,今天突然想起漏了一个,补上了,但想到还没对应的博客,那就写一个简单的 我经常使用且相对熟练的部分技术如下(不知道算不算各位大神眼中的辣鸡): ...

  10. awk -f program.file 功能使用

    一.awk -f program.file 功能使用 一直没有使用过awk的-f功能,感觉鸡肋,不是很实用,更多的是因为没有需求的原因 下面介绍下awk -f的使用方法 awk可以指定默认的文件路径, ...