一种在基于容器的共享虚拟主机中实现https的方法和装置与流程

文档序号:11215952阅读:642来源:国知局
一种在基于容器的共享虚拟主机中实现https的方法和装置与流程

本发明涉及网络技术领域,尤其涉及一种在基于容器的共享虚拟主机中实现https的技术。



背景技术:

随着https技术的广泛普及,https逐渐成为web建站的一个重要需求。然而广泛应用于中小型web建站市场的共享云虚机主机,因为其采用成本较低的共享资源模式而被广泛使用,而共享虚拟主机支持https的主要技术难点在于:为了控制成本,共享虚拟主机一般采用多个主机共享物理服务器、共享web服务进程、共享ip入口的模式。

一方面,这种共享模式下,很难对ssl证书这种敏感数据做到严格的隔离控制,如果出现个别网站有漏洞被挂马黑入之类的情况,很可能会导致大批ssl证书的泄露;另一方面,由于https的启用/关闭/更新等操作往往需要依赖web进程的重启,在web进程被大量站点共享的条件下难以实现高频的无宕机支持https切换。

因此,如何提供一种能够在基于容器的共享虚拟主机中无宕机的实现https的技术,成为本领域技术人员亟需解决的技术问题之一。



技术实现要素:

本发明的目的是提供一种在基于容器的共享虚拟主机中实现https的方法和装置。

根据本发明的一个方面,提供一种在基于容器的共享虚拟主机中实现https的方法,其中,该方法包括以下步骤:

a.分发模块获取客户端的访问请求,若所述访问请求为https请求,直接执行步骤c;

b.若所述访问请求为http请求,且所述http请求中的主机域名已经实现从http到https的切换,则将所述访问请求重定向至对应的https地址,获取对应的https请求;

c.根据所述https请求中的主机域名,在所述分发模块的映射表中匹配获得与所述主机域名对应的证书id,根据所述证书id获取与所述主机域名对应的证书文件,完成与所述客户端的握手,其中,所述映射表中存储有所述主机域名实现http到https的切换时所建立或更新的主机域名与证书id的映射关系;

d.将所述https请求转发至与所述共享虚拟主机对应的容器,以获取与所述https请求对应的内容并返回至所述客户端,其中,每个所述共享虚拟主机分别对应于一个独立的容器。

根据本发明的另一个方面,还提供了一种在基于容器的共享虚拟主机中实现https的实现装置,其中,该实现装置包括分发模块,其中,所述分发模块包括:

获取单元,用于获取客户端的访问请求,若所述访问请求为https请求,转去握手单元执行操作;

重定向单元,用于若所述访问请求为http请求,且所述http请求中的主机域名已经实现从http到https的切换,则将所述访问请求重定向至对应的https地址,获取对应的https请求;

握手单元,用于根据所述https请求中的主机域名,在所述分发模块的映射表中匹配获得与所述主机域名对应的证书id,根据所述证书id获取与所述主机域名对应的证书文件,完成与所述客户端的握手,其中,所述映射表中存储有所述主机域名实现http到https的切换时所建立或更新的主机域名与证书id的映射关系;

转发单元,用于将所述https请求转发至与所述共享虚拟主机对应的容器,以获取与所述https请求对应的内容并返回至所述客户端,其中,每个所述共享虚拟主机分别对应于一个独立的容器。

根据本发明的又一个方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如上任一项所述的方法被执行。

根据本发明的再一个方面,还提供了一种计算机程序产品,当所述计算机程序产品被计算机设备执行时,如上任一项所述的方法被执行。

根据本发明的再一个方面,还提供了一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中存储有计算机代码,所述处理器被配置来通过执行所述计算机代码以执行如上任一项所述的方法。

与现有技术相比,本发明具有以下优点:

本申请采用分发模块与容器技术在共享虚拟主机中实现https,其中,每个所述共享虚拟主机分别运行于一个独立的容器,所述容器技术在不增加硬件成本的条件下,能够实现web服务进程的独享以及资源的有效隔离,并精确控制每个容器的硬件资源的使用配额,各种配置项或者扩展的安装等能力也可以直接开放给用户。轻量级容器技术加上分发模块的七层转发,则使得整个系统的自动故障切换(failover)能力大大增强,秒级的容器重建能力加上秒级的转发策略推送生效能力,使得故障发生时,单点的共享虚拟主机能够在很短的时间内实现自动failover。

进一步地,仅通过建立、更新或者删除存储有主机域名与证书id映射关系的映射表即可在共享虚拟主机上实现开启或者关闭https,实时生效,无缝刷新。

更进一步地,当多个站点用户同时开启https时,只需更新主机域名与证书id的映射表,无需人工手动配置与重启。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1示出根据本发明一个方面的在基于容器的共享虚拟主机中实现https的实现装置结构示意图;

图2示出了根据本发明一个优选实施例的在基于容器的共享虚拟主机中实现https的实现装置结构示意图;

图3示出根据本发明另一个方面的在基于容器的共享虚拟主机中实现https的方法的流程示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于电脑、智能手机、pda等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(cloudcomputing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本发明,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本发明。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、vpn网络等。

需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。

后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。

这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本发明的示例性实施例的目的。但是本发明可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。

应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。

应当理解的是,当一个单元被称为“连接”或“耦合”到另一单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。

这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。

还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。

下面结合附图对本发明作进一步详细描述。

图1示出根据本发明一个方面的在基于容器的共享虚拟主机中实现https的实现装置结构示意图。实现装置1包括:分发模块101,其中所述分发模块包括:获取单元1011,重定向单元1012,握手单元1013和转发单元1014。

在此,实现装置1例如位于网络设备中,其中,所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(cloudcomputing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本发明,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本发明。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、vpn网络等。

需要说明的是,所述网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。

其中,获取单元1011获取客户端的访问请求,若所述访问请求为https请求,转去握手单元1013执行操作。具体地,所述分发模块101的获取单元1011获取到客户端发送的访问某一网站或者页面的访问请求后,需要首先判断所述访问请求的类型,如果所述访问请求为https请求,则转去握手单元1013以执行与所述客户端的握手;如果所述访问请求为http请求,则执行重定向单元1012的操作。例如,如果获取单元1011获取的客户端的访问请求是:https://dict.youdao.com/,则转去握手单元1013以执行与所述客户端的握手,如果获取单元1011获取的客户端的访问请求是http://dict.youdao.com/,则执行重定向单元1012的操作。

若所述访问请求为http请求,且所述http请求中的主机域名已经实现从http到https的切换,则重定向单元1012将所述访问请求重定向至对应的https地址,获取对应的https请求。具体地,若所述访问请求为http请求,则需要判断所述http请求中的主机域名是否已经实现从http到https的切换,即所述http请求中的主机域名是否已经开启https,如果该主机域名未开启https,则解析http请求,处理完业务逻辑,最后返回一个http的响应给客户端;如果该主机域名已经开启https,则返回301至https://url,重定向至与该http请求对应的https地址,分发模块101获取对应的https请求。其中,所述主机域名例如为一个共享虚拟主机对应的主机域名,其中一个所述共享虚拟主机对应至少一个主机域名,一台运行在互联网上的物理服务器可划分成多个共享虚拟服务器。

握手单元1013根据所述https请求中的主机域名,在所述分发模块101的映射表中匹配获得与所述主机域名对应的证书id,根据所述证书id获取与所述主机域名对应的证书文件,完成与所述客户端的握手,其中,所述映射表中存储有所述主机域名实现http到https的切换时所建立或更新的主机域名与证书id的映射关系。具体地,握手单元1013根据sni协议获取https请求中的主机域名,然后根据所述主机域名在分发模块101对应的内存中存储的哈希表中找到与所述主机域名对应的ssl证书,所述ssl证书包括一个公共密钥和私用密钥,握手单元1013根据所述ssl证书与客户端进行ssl握手,其中,所述主机域名开启https时,为该主机域名匹配对应的ssl证书,并将该主机域名与对应的ssl证书id进行映射,然后将建立或更新的主机域名与证书id的映射关系存储到映射表中,然后所述分发模块101接收所述映射表并存储于其对应的内存中。所述映射表例如为哈希映射表。

在此,在开启或者更新https时,仅需建立或者更新存储有主机域名与证书id映射关系的映射表即可,关闭某一站点用户的https时,仅需删除映射表中该站点用户对应的主机域名与证书id映射关系以及对应的证书文件即可,无需重启web进程,在web进程被大量站点共享的条件下,仍然可以实现高频的无宕机支持https切换,并且当多个站点用户同时开启https时,只需更新主机域名与证书id的映射表,无需人工手动配置与重启。

转发单元1014将所述https请求转发至与所述共享虚拟主机对应的容器,以获取与所述https请求对应的内容并返回至所述客户端,其中,每个所述共享虚拟主机分别对应于一个独立的容器。具体地,握手单元1013根据与所述主机域名对应的证书文件,完成与所述客户端的握手后,转发单元1014将所述https请求转发至与所述共享虚拟主机对应的容器,从容器中获取与所述https请求对应的数据信息,并返回至所述客户端,其中,共享虚拟主机中的每一个虚拟主机运行于一个独立的容器,各容器间彼此隔离无网络通信,无服务进程和文件系统的共享。所述容器例如为docker容器,所述分发模块101例如为统一七层转发模块flowrouter,flowrouter代理层不提供内容,只提供对用户透明的反向代理功能,七层转发策略的更新由中控调度模块scheduler推送到flowrouter,转发策略的更新从被发起到实际生效的延时一般在秒级。flowrouter是一个无状态的软件模块,可以根据系统负载轻松进行横向扩容或缩减。

flowrouter为https切换功能的实现提供了重要基础。flowrouter不受站点用户控制,与docker隔离,是一个独立、安全的区域,docker与七层转发flowrouter解耦分离的分发模式使得用户的证书可以放在更为安全的flowrouter层。

在此,实现装置1采用分发模块与容器技术在共享虚拟主机中实现https,其中,每个所述共享虚拟主机分别运行于一个独立的容器,所述容器例如为轻量级的容器技术,轻量级容器技术在并不增加硬件成本的条件下,能够实现web服务进程的独享以及资源的有效隔离,并精确控制每个容器的硬件资源的使用配额,各种配置项或者扩展的安装等能力也可以直接开放给用户。轻量级容器技术加上分发模块101的七层转发,则使得整个系统的自动故障切换(failover)能力大大增强,秒级的容器重建能力加上分发模块101秒级的转发策略推送生效能力,使得故障发生时,单点的共享虚拟主机能够在很短的时间内实现自动failover。其中,所述轻量级的容器技术例如为docker。并且,仅通过建立、更新或者删除存储有主机域名与证书id映射关系的映射表即可在共享虚拟主机上实现开启或者关闭https,实时生效,无缝刷新。

图2示出了根据本发明一个优选实施例的在共享虚拟主机中实现https的实现装置结构示意图。该实现装置1还包括调度模块202。以下对该优选实施例进行详细描述:具体地,调度模块202,根据接收到的一个或多个站点用户的https启用指令,获取每个站点用户所分别对应的证书列表和每个证书的元信息,根据每个站点用户名下每个证书的所述元信息,从所述证书列表中为每个站点用户的共享虚拟主机确定对应的匹配证书,根据所述共享虚拟主机的主机域名与所述匹配证书的证书id之间的映射关系,建立或更新调度模块中的映射表,将所述映射表推送至所述分发模块以建立或更新存储于所述分发模块中的主机域名与证书id的映射表;其中,所述分发模块201还用于:根据所述映射表,更新所述分发模块中存储的对应的证书文件。分发模块201包括:获取单元2011,重定向单元2012,握手单元2013和转发单元2014。获取单元2011获取客户端的访问请求,若所述访问请求为https请求,转去握手单元执行操作;重定向单元2012,用于若所述访问请求为http请求,且所述http请求中的主机域名已经实现从http到https的切换,则将所述访问请求重定向至对应的https地址,获取对应的https请求;握手单元2013根据所述https请求中的主机域名,在所述分发模块的映射表中匹配获得与所述主机域名对应的证书id,根据所述证书id获取与所述主机域名对应的证书文件,完成与所述客户端的握手,其中,所述映射表中存储有所述主机域名实现http到https的切换时所建立或更新的主机域名与证书id的映射关系;转发单元2014将所述https请求转发至与所述共享虚拟主机对应的容器,以获取与所述https请求对应的内容并返回至所述客户端,其中,每个所述共享虚拟主机分别对应于一个独立的容器。其中,分发模块201,以及分发模块201包括的获取单元2011,重定向单元2012,握手单元2013和转发单元2014与图1对应装置相同或基本相同,故此处不再赘述,并通过引用的方式包含于此。

其中,首先,调度模块202根据接收到的一个或多个站点用户的https启用指令,获取每个站点用户所分别对应的证书列表和每个证书的元信息。具体地,一个或多个站点用户发出开启https的启用指令,所述启用指令包括开启https的指令和刷新https的指令,调度模块202接收该启用指令,其中,所述站点用户无需指定需要将哪个证书绑定到哪个域名,绑定匹配由系统自动完成,然后调度模块202根据接收的所述启用指令,自用户证书数据库中获取每个站点用户所分别对应的证书id列表和每个证书的元信息,其中,所述元信息包括cn(commonname,通称)、san(subjectalternativename,主体别名)和有效期。例如,站点用户想要实现该主机域名从http到https的切换,则发出开启https的开启指令,调度模块202接收该开启指令,调度模块202接收该开启指令自用户证书数据库中获取每个站点用户所分别对应的证书id列表和每个证书的元信息;当证书过期需要更换证书时,站点用户发出刷新https的刷新指令,调度模块202接收该开启指令,调度模块202接收该刷新指令自用户证书数据库中获取每个站点用户所分别对应的证书id列表和每个证书的元信息。

优选地,所述调度模块202包括平台(platform)和调度器(scheduler),例如,platform接收到站点用户的启用指令后,通过iam证书管理自用户证书数据库中拉取证书列表和元信息,然后scheduler自platform获取所述证书列表和元信息。

其次,调度模块202根据每个站点用户名下每个证书的所述元信息,从所述证书列表中为每个站点用户的共享虚拟主机确定对应的匹配证书。具体地,调度模块将每个站点用户名下每个证书的cn、san分别与发送启用指令的共享虚拟主机的主机域名进行自动比对,选择满足条件的证书中有效期最长的那个作为匹配证书,即,每个证书中都有对应的其能认证的主机域名,站点用户例如通过购买获得证书后,该证书便能认证该主机域名,通过将发送启用指令的共享虚拟主机的主机域名与证书能认证的主机域名进行比对,如果发送启用指令的共享虚拟主机的主机域名包括在至少一个证书的认证范围内时,选择所述至少一个证书中有效期最长的那个证书作为匹配证书。

再次,调度模块202根据所述共享虚拟主机的主机域名与所述匹配证书的证书id之间的映射关系,建立或更新调度模块202中的映射表。具体地,不同的站点用户同时或者相继发出启用指令后,调度模块202同时或相继获取每个站点用户所分别对应的证书列表和每个证书的元信息,并从所述证书列表中为每个站点用户的共享虚拟主机确定对应的匹配证书,根据每个共享虚拟主机的主机域名与各自匹配的证书的证书id之间的映射关系,将所述映射关系存入映射表中,建立或更新调度模块202中的映射表,其中所述映射表存储于调度模块202的数据库中。当调度模块202接收到启用指令前不存在映射表时,调度模块202根据所述共享虚拟主机的主机域名与所述匹配证书的证书id之间的映射关系,为调度模块202建立映射表;当调度模块202接收到启用指令前已经存在映射表时,调度模块202根据所述共享虚拟主机的主机域名与所述匹配证书的证书id之间的映射关系,更新调度模块202中已经存在的映射表。

最后,调度模块202将所述映射表推送至所述分发模块201以建立或更新存储于所述分发模块中的主机域名与证书id的映射表。具体地,调度模块202每隔预定时间间隔将存储于调度模块202中的映射表推送至所述分发模块201,例如,若设定调度模块202每隔1s向分发模块201推送一次所述映射表,在1s时间间隔内,会有至少一个站点用户发出启用指令,至少一个站点用户中的每一个站点用户的主机域名与证书id的映射关系都存储于调度模块202的映射表中,完成所述映射表的建立或者更新,然后将更新后的所述映射表分别推送至至少一个分发模块201,所述至少一个分发模块201建立或更新存储于所述分发模块中的主机域名与证书id的映射表。在此,所述实现装置1中存在至少一个分发模块201,调度模块202中存储的映射表进行更新后,将所述更新后的映射表每隔预定间隔时间统一推送到所述至少一个分发模块201中,提高了分发模块201中所述映射表更新的效率。

优选地,分发模块201根据所述映射表,更新所述分发模块中存储的对应的证书文件。具体地,分发模块201不断动态加载调度模块202推送的主机域名与证书id的映射表到内存中,根据所述映射表更新所述分发模块201中存储的对应的证书文件,例如,将分发模块201中存储的但是在映射表中没有对应的证书id的证书文件删除或者将映射表中存在的某证书id但是在分发模块201中却没有与之对应的证书文件时,重新为所述分发模块201下载对应的证书文件。

优选地,根据所述映射表,更新所述分发模块中存储的对应的证书文件包括:在所述分发模块201中,为所述映射表中增加的证书id下载对应的证书文件;将所述映射表中删除的证书id对应的存储于所述分发模块中的证书文件相应删除。具体地,分发模块201不断动态加载调度模块202推送的主机域名与证书id的映射表到内存中,用所述映射表替换分发模块201中原先存储的旧映射表,所述映射表记为新映射表,如果新映射表中的证书id在分发模块201中没有对应的证书文件时,即新映射表中出现了新的证书id,但是分发模块201中没有与新的证书id对应的证书文件时,则分发模块201向所述调度模块202发送下载与所述新的证书id对应的证书文件的请求,调度模块202接收到下载请求后自用户证书数据库中增量下载新的证书id对应的证书文件,例如调度模块202通过iam证书管理自用户证书数据库中增量下载新的证书id对应的证书文件;如果分发模块201中某些证书文件在新映射表中没有对应的证书id,则删除分发模块201中的这些证书文件。其中,所述证书文件包括但不限于公私钥信息。

进一步地,分发模块201不断动态加载调度模块202推送的主机域名与证书id的映射表到内存中,将所述映射表与分发模块201内存储的映射表进行比对,将所述映射表中出现的新的证书id与主机域名的对应关系存入分发模块201内存储的映射表中,并将所述新的证书id对应的证书文件,例如公私钥文件,下载到分发模块201的内存中,将所述映射表中没有而分发模块201内存储的映射表中存在的证书id与主机域名的对应关系从分发模块201内存储的映射表中移除,完成所述旧映射表的更新,并相应删除该证书id对应的证书文件。

优选地,实现装置1还包括删除模块203(未示出)。

其中,删除模块203根据站点用户的https关闭指令,删除在所述分发模块201与调度模块202中存储的所述映射表中该站点用户的主机域名与证书id之间的映射关系,并删除在所述分发模块201中存储的该站点用户对应的证书文件。具体地,当某一站点用户欲关闭https时,发出关闭https的关闭指令,删除模块203根据所述关闭指令,删除调度模块202中存储的所述映射表中该站点用户的主机域名与证书id之间的映射关系,以及删除分发模块201中存储的所述映射表中该站点用户的主机域名与证书id之间的映射关系和与所述证书id对应的证书文件,即该站点用户对应的证书文件。

优选地,实现装置1还包括:调整模块204(未示出)。

调整模块204根据系统负载,横向扩容或缩减所述分发模块201。具体地,所述分发模块201为无状态的软件模块,调整模块204可以根据系统负载,横向扩容或缩减所述分发模块201,使得分发模块201的使用比较灵活。

以下以采用docker这一容器技术,并且所述分发模块201采用七层转发模块flowrouter为例来详细说明当站点用户开启https时,所述实现装置1中各模块的具体执行过程。

1)实现装置1接收站点用户开启https的开启指令,站点用户无需指定需要将哪个证书绑定到哪个域名,而仅仅需要下达开启指令即可,绑定匹配由系统自动进行。

2)调度模块202获取用户已经上传到用户证书数据库,例如为百度云,的证书列表及每个证书的元信息,元信息主要包括cn(commonname)、san(subjectalternativename)、有效期。

3)调度模块202将用户名下所有证书的cn与san和共享虚拟主机的主机域名进行自动比对,选择满足条件的证书中有效期最长的那个作为匹配证书。

4)调度模块202将该主机域名与证书id的匹配关系更新推送到所有的flowrouter机器。

5)flowrouter不断动态加载主机域名与证书id的映射表,例如为哈希映射表,到内存中。当出现新的证书id时,将该证书的公私钥文件下载到本地并加载至内存;当已有的证书id已从最新的匹配关系表中移除时,从内存和文件系统中清除该证书id对应的公私钥文件。

6)当flowrouter接受到http请求时,会获取http请求对应的域名,如果该域名已经开启了https则返回301至https://url,重定向至https地址;当flowrouter接受到https请求时,会根据sni协议获取https请求中的主机域名,再根据所述主机域名在flowrouter内存中找到对应的证书文件与客户端进行ssl握手,将该https请求通过http协议转发至后端docker,然后获取返回内容,返回给客户端。

图3示出根据本发明一个方面的在基于容器的共享虚拟主机中实现https的方法的流程示意图。该方法包括:步骤s301,其中所述步骤s301包括:子步骤s3011,子步骤s3012,子步骤s3013和子步骤s3014。其中所述步骤s301以及子步骤s3011,子步骤s3012,子步骤s3013和子步骤s3014都通过分发模块实现,所述分发模块例如为统一七层转发模块flowrouter。

其中,在子步骤s3011中,实现装置1获取客户端的访问请求,若所述访问请求为https请求,转去子步骤s3013执行操作。具体地,在子步骤s3011中,实现装置1获取到客户端发送的访问某一网站或者页面的访问请求后,需要首先判断所述访问请求的类型,如果所述访问请求为https请求,则转去子步骤s3013以执行与所述客户端的握手;如果所述访问请求为http请求,则执行子步骤s3012的操作。例如,如果在子步骤s3011中,实现装置1获取的客户端的访问请求是:https://dict.youdao.com/,则转去子步骤s3013执行与所述客户端的握手,如果在子步骤s3011中,实现装置1获取的客户端的访问请求是http://dict.youdao.com/,则执行子步骤s3012的操作。

若所述访问请求为http请求,且所述http请求中的主机域名已经实现从http到https的切换,则在子步骤s3012中,实现装置1将所述访问请求重定向至对应的https地址,获取对应的https请求。具体地,若所述访问请求为http请求,则需要判断所述http请求中的主机域名是否已经实现从http到https的切换,即所述http请求中的主机域名是否已经开启https,如果该主机域名未开启https,则解析http请求,处理完业务逻辑,最后返回一个http的响应给客户端;如果该主机域名已经开启https,则返回301至https://url,重定向至与该http请求对应的https地址,在步骤s301中,实现装置获取对应的https请求。其中,所述主机域名例如为一个共享虚拟主机对应的主机域名,其中一个所述共享虚拟主机对应至少一个主机域名,一台运行在互联网上的物理服务器可划分成多个共享虚拟服务器。

在子步骤s3013中,实现装置1根据所述https请求中的主机域名,在所述分发模块的映射表中匹配获得与所述主机域名对应的证书id,根据所述证书id获取与所述主机域名对应的证书文件,完成与所述客户端的握手,其中,所述映射表中存储有所述主机域名实现http到https的切换时所建立或更新的主机域名与证书id的映射关系。具体地,在子步骤s3013中,实现装置1根据sni协议获取https请求中的主机域名,然后根据所述主机域名在分发模块对应的内存中存储的哈希表中找到与所述主机域名对应的ssl证书,所述ssl证书包括一个公共密钥和私用密钥,在子步骤s3013中,实现装置1根据所述ssl证书与客户端进行ssl握手,其中,所述主机域名开启https时,为该主机域名匹配对应的ssl证书,并将该主机域名与对应的ssl证书id进行映射,然后将建立或更新的主机域名与证书id的映射关系存储到映射表中,然后分发模块接收所述映射表并存储于其对应的内存中。所述映射表例如为哈希映射表。

在此,在开启或者更新https时,仅需建立或者更新存储有主机域名与证书id映射关系的映射表即可,关闭某一站点用户的https时,仅需删除映射表中该站点用户对应的主机域名与证书id映射关系以及对应的证书文件即可,无需重启web进程,在web进程被大量站点共享的条件下,仍然可以实现高频的无宕机支持https切换,并且当多个站点用户同时开启https时,只需更新主机域名与证书id的映射表,无需人工手动配置与重启。

在子步骤s3014中,实现装置1将所述https请求转发至与所述共享虚拟主机对应的容器,以获取与所述https请求对应的内容并返回至所述客户端,其中,每个所述共享虚拟主机分别对应于一个独立的容器。具体地,在子步骤s3013中,实现装置1根据与所述主机域名对应的证书文件,完成与所述客户端的握手后,在子步骤s3014中,实现装置1将所述https请求转发至与所述共享虚拟主机对应的容器,从容器中获取与所述https请求对应的数据信息,并返回至所述客户端,其中,共享虚拟主机中的每一个虚拟主机运行于一个独立的容器,各容器间彼此隔离无网络通信,无服务进程和文件系统的共享。所述容器例如为docker容器,所述分发模块例如为统一七层转发模块flowrouter,flowrouter代理层不提供内容,只提供对用户透明的反向代理功能,七层转发策略的更新由中控调度模块scheduler推送到flowrouter,转发策略的更新从被发起到实际生效的延时一般在秒级。flowrouter是一个无状态的软件模块,可以根据系统负载轻松进行横向扩容或缩减。

flowrouter为https切换功能的实现提供了重要基础。flowrouter不受站点用户控制,与docker隔离,是一个独立、安全的区域,docker与七层转发flowrouter解耦分离的分发模式使得用户的证书可以放在更为安全的flowrouter层。

在此,实现装置1采用分发模块与容器技术在共享虚拟主机中实现https,其中,每个所述共享虚拟主机分别运行于一个独立的容器,所述容器例如为轻量级的容器技术,轻量级容器技术在并不增加硬件成本的条件下,能够实现web服务进程的独享以及资源的有效隔离,并精确控制每个容器的硬件资源的使用配额,各种配置项或者扩展的安装等能力也可以直接开放给用户。轻量级容器技术加上分发模块的七层转发,则使得整个系统的自动故障切换(failover)能力大大增强,秒级的容器重建能力加上分发模块秒级的转发策略推送生效能力,使得故障发生时,单点的共享虚拟主机能够在很短的时间内实现自动failover。其中,所述轻量级的容器技术例如为docker。并且,仅通过建立、更新或者删除存储有主机域名与证书id映射关系的映射表即可在共享虚拟主机上实现开启或者关闭https,实时生效,无缝刷新。

优选地,该方法还包括步骤s302(未示出),其中,实现装置1包括调度模块和分发模块,步骤s302在调度模块中实现,步骤s301和子步骤s3011,s3012,s3013和s3014在分发模块中实现。具体地,在步骤s302中,实现装置1,根据接收到的一个或多个站点用户的https启用指令,获取每个站点用户所分别对应的证书列表和每个证书的元信息,根据每个站点用户名下每个证书的所述元信息,从所述证书列表中为每个站点用户的共享虚拟主机确定对应的匹配证书,根据所述共享虚拟主机的主机域名与所述匹配证书的证书id之间的映射关系,建立或更新调度模块中的映射表,将所述映射表推送至所述分发模块以建立或更新存储于所述分发模块中的主机域名与证书id的映射表;其中,在步骤s301中,实现装置1还可以根据所述映射表,更新所述分发模块中存储的对应的证书文件。

首先,在步骤s302中,实现装置1根据接收到的一个或多个站点用户的https启用指令,获取每个站点用户所分别对应的证书列表和每个证书的元信息。具体地,一个或多个站点用户发出开启https的启用指令,所述启用指令包括开启https的指令和刷新https的指令,在步骤s302中,实现装置1接收该启用指令,其中,所述站点用户无需指定需要将哪个证书绑定到哪个域名,绑定匹配由系统自动完成,然后在步骤s302中,实现装置1根据接收的所述启用指令,自用户证书数据库中获取每个站点用户所分别对应的证书id列表和每个证书的元信息,其中,所述元信息包括cn(commonname,通称)、san(subjectalternativename,主体别名)和有效期。例如,站点用户想要实现该主机域名从http到https的切换,则发出开启https的开启指令,在步骤s302中,实现装置1接收该开启指令,在步骤s302中,实现装置1接收该开启指令自用户证书数据库中获取每个站点用户所分别对应的证书id列表和每个证书的元信息;当证书过期需要更换证书时,站点用户发出刷新https的刷新指令,在步骤s302中,实现装置1接收该开启指令,接收该刷新指令自用户证书数据库中获取每个站点用户所分别对应的证书id列表和每个证书的元信息。

优选地,所述在步骤s302中,实现装置1包括平台(platform)和调度器(scheduler),例如,platform接收到站点用户的启用指令后,通过iam证书管理自用户证书数据库中拉取证书列表和元信息,然后scheduler自platform获取所述证书列表和元信息。

其次,在步骤s302中,实现装置1根据每个站点用户名下每个证书的所述元信息,从所述证书列表中为每个站点用户的共享虚拟主机确定对应的匹配证书。具体地,在步骤s302中,实现装置1将每个站点用户名下每个证书的cn、san分别与发送启用指令的共享虚拟主机的主机域名进行自动比对,选择满足条件的证书中有效期最长的那个作为匹配证书,即,每个证书中都有对应的其能认证的主机域名,站点用户例如通过购买获得证书后,该证书便能认证该主机域名,通过将发送启用指令的主机的主机域名与证书能认证的主机域名进行比对,如果发送启用指令的共享虚拟主机的主机域名包括在至少一个证书的认证范围内时,选择所述至少一个证书中有效期最长的那个证书作为匹配证书。

再次,在步骤s302中,实现装置1根据所述共享虚拟主机的主机域名与所述匹配证书的证书id之间的映射关系,建立或更新调度模块中的映射表。具体地,不同的站点用户同时或者相继发出启用指令后,在步骤s302中,实现装置1同时或相继获取每个站点用户所分别对应的证书列表和每个证书的元信息,并从所述证书列表中为每个站点用户的共享虚拟主机确定对应的匹配证书,根据每个共享虚拟主机的主机域名与各自匹配的证书的证书id之间的映射关系,将所述映射关系存入映射表中,建立或更新调度模块中的映射表,其中所述映射表存储于调度模块的数据库中。当在步骤s302中,实现装置1接收到启用指令前不存在映射表时,根据所述共享虚拟主机的主机域名与所述匹配证书的证书id之间的映射关系,为调度模块建立映射表;当在步骤s302中,实现装置1接收到启用指令前已经存在映射表时,根据所述共享虚拟主机的主机域名与所述匹配证书的证书id之间的映射关系,更新调度模块中已经存在的映射表。

最后,在步骤s302中,实现装置1将所述映射表推送至所述分发模块以建立或更新存储于所述分发模块中的主机域名与证书id的映射表。具体地,在步骤s302中,实现装置1每隔预定时间间隔将存储于调度模块中的映射表推送至所述分发模块,例如,若设定在步骤s302中,实现装置1每隔1s向分发模块推送一次所述映射表,在1s时间间隔内,会有至少一个站点用户发出启用指令,至少一个站点用户中的每一个站点用户的主机域名与证书id的映射关系都存储于调度模块的映射表中,完成所述映射表的建立或者更新,然后将更新后的所述映射表分别推送至至少一个分发模块,所述至少一个分发模块建立或更新存储于所述分发模块中的主机域名与证书id的映射表。在此,所述实现装置1中存在至少一个分发模块,将在调度模块中存储的映射表进行更新后每隔预定间隔时间统一推送到所述至少一个分发模块中,提高了分发模块中所述映射表更新的效率。

优选地,在步骤s301中,实现装置1根据所述映射表,更新所述分发模块中存储的对应的证书文件。具体地,在步骤s301中,实现装置1不断动态加载调度模块推送的主机域名与证书id的映射表到内存中,根据所述映射表更新所述分发模块中存储的对应的证书文件,例如,将分发模块中存储的但是在映射表中没有对应的证书id的证书文件删除或者将映射表中存在的某证书id但是在分发模块中却没有与之对应的证书文件时,重新为所述分发模块下载对应的证书文件。

优选地,根据所述映射表,更新所述分发模块中存储的对应的证书文件包括:在步骤s301中,实现装置1为分发模块的映射表增加的证书id下载对应的证书文件;将所述映射表中删除的证书id对应的存储于所述分发模块中的证书文件相应删除。具体地,在步骤s301中,实现装置1不断动态加载调度模块推送的主机域名与证书id的映射表到内存中,用所述映射表替换分发模块中原先存储的旧映射表,所述映射表记为新映射表,如果新映射表中的证书id在分发模块中没有对应的证书文件时,即新映射表中出现了新的证书id,但是分发模块中没有与新的证书id对应的证书文件时,则在步骤s301中,实现装置1通过分发模块向所述调度模块发送下载与所述新的证书id对应的证书文件的请求,在步骤s302中,实现装置1的调度模块接收到下载请求后自用户证书数据库中增量下载新的证书id对应的证书文件,例如在步骤s302中,实现装置1的调度模块通过iam证书管理自用户证书数据库中增量下载新的证书id对应的证书文件;如果分发模块中某些证书文件在新映射表中没有对应的证书id,则删除分发模块中的这些证书文件。其中,所述证书文件包括但不限于公钥信息、私钥信息。

进一步地,在步骤s301中,实现装置1不断动态加载调度模块推送的主机域名与证书id的映射表到内存中,将所述映射表与分发模块内存储的映射表进行比对,将所述映射表中出现的新的证书id与主机域名的对应关系存入分发模块内存储的映射表中,并将所述新的证书id对应的证书文件,例如公私钥文件,下载到分发模块的内存中,将所述映射表中没有而分发模块内存储的映射表中存在的证书id与主机域名的对应关系从分发模块内存储的映射表中移除,完成所述旧映射表的更新,并相应删除该证书id对应的证书文件。

优选地,该方法还包括步骤s303(未示出)。

其中,在步骤s303中,实现装置1根据站点用户的https关闭指令,删除在所述步骤s301中存储在分发模块与在步骤s302中存储在调度模块的所述映射表中该站点用户的主机域名与证书id之间的映射关系,并删除在所述分发模块中存储的该站点用户对应的证书文件。具体地,当某一站点用户欲关闭https时,发出关闭https的关闭指令,在步骤s303中,实现装置1根据所述关闭指令,删除调度模块中存储的所述映射表中该站点用户的主机域名与证书id之间的映射关系,以及删除分发模块中存储的所述映射表中该站点用户的主机域名与证书id之间的映射关系和与所述证书id对应的证书文件,即该站点用户对应的证书文件。

优选地,该方法还包括:步骤s304(未示出)。

在步骤s304中,实现装置1根据系统负载,横向扩容或缩减所述分发模块。具体地,所述分发模块为无状态的软件模块,在步骤s304中,实现装置1可以根据系统负载,横向扩容或缩减所述分发模块,使得分发模块的使用比较灵活。

以下以采用docker这一容器技术,并且所述分发模块采用七层转发模块flowrouter为例来详细说明当站点用户开启https时,所述实现装置1中各模块的具体执行过程。

1)实现装置1接收站点用户开启https的开启指令,站点用户无需指定需要将哪个证书绑定到哪个域名,而仅仅需要下达开启指令即可,绑定匹配由系统自动进行。

2)在步骤s302中,实现装置1获取用户已经上传到用户证书数据库,例如为百度云,的证书列表及每个证书的元信息,元信息主要包括cn(commonname)、san(subjectalternativename)、有效期。

3)在步骤s302中,实现装置1将用户名下所有证书的cn与san和共享虚拟主机的主机域名进行自动比对,选择满足条件的证书中有效期最长的那个作为匹配证书。

4)在步骤s302中,实现装置1将该主机域名与证书id的匹配关系更新推送到所有的flowrouter机器。

5)flowrouter不断动态加载主机域名与证书id的映射表,例如为哈希映射表,到内存中。当出现新的证书id时,将该证书的公私钥文件下载到本地并加载至内存;当已有的证书id已从最新的匹配关系表中移除时,从内存和文件系统中清除该证书id对应的公私钥文件。

6)当flowrouter接受到http请求时,会获取http请求对应的域名,如果该域名已经开启了https则返回301至https://url,重定向至https地址;当flowrouter接受到https请求时,会根据sni协议获取https请求中的主机域名,再根据所述主机域名在flowrouter内存中找到对应的证书文件与客户端进行ssl握手,将该https请求通过http协议转发至后端docker,然后获取返回内容,返回给客户端。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如前任一项所述的方法被执行。

本发明还提供了一种计算机程序产品,当所述计算机程序产品被计算机设备执行时,如前任一项所述的方法被执行。

本发明还提供了一种计算机设备,所述计算机设备包括:

一个或多个处理器;

存储器,用于存储一个或多个计算机程序;

当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如前任一项所述的方法。

需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,本发明的各个装置可采用专用集成电路(asic)或任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1