一种基于Nginx的双向认证方法及装置与流程

文档序号:11842951阅读:210来源:国知局
一种基于Nginx的双向认证方法及装置与流程

本发明涉及计算机领域,尤其涉及一种基于Nginx的双向认证方法及装置。



背景技术:

随着Internet的快速发展,网页应用也在迅速增加,Nginx作为一款高性能的HTTP和反向代理服务器,具有占有内存少,并发能力强的特点,被大量网站使用,如京东、新浪、网易、腾讯、淘宝等。但是,在Nginx作为反向代理tomcat实际应用过程中,由于目前大量的使用tomcat的web服务器未使用安全套接层(Secure Sockets Layer,SSL)加密传输协议,导致Nginx与客户端通信时,传输数据没有被加密,数据易被第三者恶意截获。另外,恶意客户端及web服务器也越来愈多,常会出现恶意客户端访问web服务器导致服务器性能下降或客户端遭到恶意web攻击。



技术实现要素:

本发明提供一种基于Nginx的双向认证方法及装置,用于实现服务器与客户端双向认证,保证数据通信、服务器和客户端的安全性。

本发明提供一种基于Nginx的双向认证方法,包括:

建立证书颁发机构;

使用所述证书颁发机构,签发服务器的证书和客户端的证书并存储;

根据所述服务器的证书和客户端的证书,配置Nginx的安全套接层SSL支持。

本发明实施例的一些有益效果可以包括:

本发明提供的基于Nginx的双向认证方法,在建立证书颁发机构后,签发服务器的证书和客户端的证书,并根据所述服务器的证书和客户端的证书,配置Nginx的安全套接层SSL支持,使得Nginx与客户端通信时,传输数据均经过加密,不仅能够实现服务器与客户端双向认证,而且能够保证服务器和客户端数据通信的安全性。

在一个实施例中,所述建立证书颁发机构,包括:

建立证书颁发机构的目录结构;

生成证书颁发机构的证书的公钥加密算法RSA密钥对,并存储在所述证书颁发机构的目录中;

根据所述证书颁发机构的证书的RSA密钥对,生成所述证书颁发机构的证书请求;

对所述证书颁发机构的证书请求进行自签名,生成所述证书颁发机构的证书并储存。

该实施例中,建立证书颁发机构的目录结构,并生成证书颁发机构的证书的RSA密钥对,随后根据证书颁发机构的证书请求对CA进行自签名,由于CA拥有一个证书,网上的公众用户通过验证CA的签字从而信任CA,任何人都可以得到CA的证书,CA在判明服务器和客户端申请者的身份后,可以为其签发证书,实现服务器和客户端的双向认证。

在一个实施例中,所述使用所述证书颁发机构,签发服务器的证书,包括:

生成服务器的证书的RSA密钥对并存储;

根据所述服务器的证书的RSA密钥对,生成服务器的证书请求;

使用所述证书颁发机构,对所述服务器的证书请求进行签名,生成服务器的证书。

该实施例中,在建立证书颁发机构后,签发服务器的证书,则客户端可以根据CA的公钥对服务器证书上的签字进行验证,一旦验证通过,则认为服务器是合法的,从而达到对服务器进行认证的目的。

在一个实施例中,所述使用所述证书颁发机构,签发客户端的证书,包括:

生成客户端的证书的RSA密钥对;

根据所述客户端的证书的RSA密钥对,生成客户端的证书请求;

使用所述证书颁发机构,对所述客户端的证书请求进行签名,生成客户端的证书。

该实施例中,在建立证书颁发机构后,签发客户端的证书,则服务器可以根据CA的公钥对客户端证书上的签字进行验证,一旦验证通过,则认为客户端是合法的,从而达到对客户端进行认证的目的。

在一个实施例中,所述根据所述服务器的证书和客户端的证书,配置Nginx的SSL支持,包括:

将Nginx配置文件中的ssl_certificate属性设置为所述服务器的证书,将ssl_client_certificate属性设置为所述客户端的证书,将ssl_certificate_key属性设置为所述服务器的证书的RSA密钥对。

该实施例中,通过配置Nginx的安全套接层SSL支持,使得Nginx与客户端通信时,传输数据均经过加密,保证数据通信、服务器和客户端的安全性。

本发明提供一种基于Nginx的双向认证装置,包括:

创建模块,用于建立证书颁发机构;

签发模块,用于使用所述创建模块建立的证书颁发机构,签发服务器的证书和客户端的证书并存储;

配置模块,用于根据所述签发模块签发的服务器的证书和客户端的证书,配置Nginx的安全套接层SSL支持。

在一个实施例中,所述创建模块包括:

目录创建子模块,用于建立证书颁发机构的目录结构;

第一密钥对生成子模块,用于生成证书颁发机构的证书的公钥加密算法RSA密钥对,并存储在所述目录创建子模块建立的证书颁发机构的目录中;

第一请求子模块,用于根据所述第一密钥对生成子模块生成的证书颁发机构的证书的RSA密钥对,生成所述证书颁发机构的证书请求;

第一签名子模块,用于对所述第一请求子模块生成的证书颁发机构的证书请求进行自签名,生成所述证书颁发机构的证书并储存。

在一个实施例中,所述签发模块包括:

第二密钥对生成子模块,用于生成服务器/客户端的证书的RSA密钥对并存储;

第二请求子模块,用于根据所述第二密钥对生成子模块生成的服务器/客户端的证书的RSA密钥对,生成服务器/客户端的证书请求;

第二签名子模块,用于使用所述创建模块建立的证书颁发机构,对所述第二请求子模块生成的服务器/客户端的证书请求进行签名,生成服务器/客户端的证书并存储。

在一个实施例中,所述配置模块,具体用于将Nginx配置文件中的ssl_certificate属性设置为所述服务器的证书,将ssl_client_certificate属性设置为所述客户端的证书,将ssl_certificate_key属性设置为所述服务器的证书的RSA密钥对。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明实施例中一种基于Nginx的双向认证方法的流程图;

图2为步骤101的实施方法流程图;

图3为使用所述证书颁发机构签发服务器的证书的流程图;

图4为使用所述证书颁发机构签发客户端的证书的流程图;

图5为本发明实施例一中一种基于Nginx的双向认证方法的流程图;

图6为本发明实施例提供的一种基于Nginx的双向认证装置结构示意图;

图7为本发明实施例提供的另一种基于Nginx的双向认证装置结构示意图;

图8为本发明实施例提供的另一种基于Nginx的双向认证装置结构示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1为本发明实施例中一种基于Nginx的双向认证方法的流程图。如图1所示,该方法包括以下步骤S101-S103:

S101:建立证书颁发机构(Certification Authority,CA)。

其中,CA也拥有一个证书(内含公钥和私钥),网上的公众用户通过验证CA的签字从而信任CA,任何人都可以得到CA的证书(含公钥),用以验证它所签发的证书。另外,CA在判明服务器和客户端申请者的身份后,可以为其签发证书。

S102:使用所述证书颁发机构,签发服务器的证书和客户端的证书并存储。

其中,如果客户端/服务器想得到一份属于自己的证书,可先向CA提出申请。在CA判明其身份后,便为他分配一个公钥,并且CA将该公钥与客户端/服务器的身份信息绑在一起,并为之签字后,便形成证书发给客户端/服务器。

S103:根据所述服务器的证书和客户端的证书,配置Nginx的安全套接层SSL支持。

其中,配置Nginx的安全套接层SSL支持后,如果客户端/服务端想鉴别服务器/客户端的真伪,可以用CA的公钥对对端证书上的签字进行验证,一旦验证通过,该证书就被认为是有效并合法的,对应的证书拥有者即为合法的,从而达到相互认证的目的。

优选地,S103包括:将Nginx配置文件中的ssl_certificate属性设置为所述服务器的证书,将ssl_client_certificate属性设置为所述客户端的证书,将ssl_certificate_key属性设置为所述服务器的证书的RSA密钥对。

本发明实施例提供的基于Nginx的双向认证方法,在建立证书颁发机构后,签发服务器的证书和客户端的证书,并根据所述服务器的证书和客户端的证书,配置Nginx的安全套接层SSL支持,使得Nginx与客户端通信时,传输数据均经过加密,不仅能够实现服务器与客户端双向认证,而且能够保证数据通信、服务器和客户端的安全性。

在一个实施例中,如图2所示,步骤S101可实施为以下步骤S201-S204:

S201:建立证书颁发机构的目录结构。

例如,此步骤可以通过以下命令实现:

#切换到openssl目录

cd/etc/pki

#初始化

mkdir-p CA/{private,newcerts}

touch CA/index.txt

echo 01>CA/serial

S202:生成证书颁发机构的证书的RSA密钥对,并存储在所述证书颁发机构的目录中。

此步骤中,需生成CA证书的RSA密钥对,并放在private目录下,实现命令可以如下:

openssl genrsa-des3-out CA/private/cakey.pem 2048

其中,genrsa用于生成RSA密钥对的openSSL命令;-des3表示使用3-DES对称加密算法加密密钥对;-out CA/private/cakey.pem表示将生成的RSA密钥对cakey.pem保存在CA/private/目录中;2048表示RSA模数位数,在一定程度上表征了密钥强度。

S203:根据所述证书颁发机构的证书的RSA密钥对,生成所述证书颁发机构的证书请求。

此步骤中,需生成CA证书的证书请求,实现命令可以如下:

openssl req-new-inform PEM-outform PEM-days 3650-key CA/private/cakey.pem-out careq.pem

其中,req用于生成证书请求的openSSL命令;-new生成一个新的证书请求;-days 3650表示从生成之时算起,证书时效为3650天;-key CA/private/cakey.pem指定CA/private/cakey.pem为证书所使用的密钥对文件;-out careq.pem令生成的证书请求保存到文件careq.pem中。

S204:对所述证书颁发机构的证书请求进行自签名,生成所述证书颁发机构的证书并储存。

此步骤中,需对证书请求自签名,生成CA证书并放在CA目录下,实现命令可以如下:

openssl ca-selfsign-keyform PEM-in careq.pem-out CA/cacert.pem

其中,ca用于执行CA相关操作的openSSL命令;-selfsign使用对证书请求进行签名的密钥对签发证书;-in careq.pem指定careq.pem为证书请求文件;-out CA/cacert.pem,指定将生成的CA证书cacert.pem保存在CA目录中。

在一个实施例中,如图3所示,步骤S102中使用所述证书颁发机构,签发服务器的证书的具体实施方法可以包括如下步骤S301-S303:

S301:生成服务器的证书的RSA密钥对并存储;

S302:根据所述服务器的证书的RSA密钥对,生成服务器的证书请求;

S303:使用所述证书颁发机构,对所述服务器的证书请求进行签名,生成服务器的证书。

例如,可以通过以下命令来实现图3所示的方法:

#生成服务器的RSA密钥对

Openssl genrsa-des3-out serverkey.pem

#生成服务器证书请求

opensslreq-new-inform PEM-outform PEM-days 3650-key serverkey.pem-out serverreq.pem

#使用CA签发服务器证书

opensslca-keyform PEM-in serverreq.pem-out servercert.pem

本发明实施例提供的基于Nginx的双向认证方法,在建立证书颁发机构后,签发服务器的证书,则客户端可以根据CA的公钥对服务器证书上的签字进行验证,一旦验证通过,则认为服务器是合法的,从而达到对服务器进行认证的目的。

在一个实施例中,如图4所示,步骤S102中使用所述证书颁发机构,签发客户端的证书的具体方法可以包括如下步骤S401-S403:

S401:生成客户端的证书的RSA密钥对;

S402:根据所述客户端的证书的RSA密钥对,生成客户端的证书请求;

S403:使用所述证书颁发机构,对所述客户端的证书请求进行签名,生成客户端的证书。

例如,可以通过以下命令来实现图4所示的方法:

#生成用户的RSA密钥对

opensslgenrsa-out clientkeynopass.pem

#生成用户证书请求

opensslreq-new-inform PEM-outform PEM-days 3650-key clientkeynopass.pem-out clientreq.pem

#使用CA签发用户证书

opensslca-keyform PEM-in clientreq.pem-out clientcert.pem

本发明实施例提供的基于Nginx的双向认证方法,在建立证书颁发机构后,签发客户端的证书,则服务器可以根据CA的公钥对客户端证书上的签字进行验证,一旦验证通过,则认为客户端是合法的,从而达到对客户端进行认证的目的。

下面通过具体实施例来说明本发明实施例提供的基于Nginx的双向认证方法。

实施例一

图5为本发明实施例一中一种基于Nginx的双向认证方法的流程图。如图5所示,包括以下步骤S501-S508:

S501:建立证书颁发机构的目录结构;

S502:生成证书颁发机构的证书的RSA密钥对,并存储在所述证书颁发机构的目录中;

S503:根据所述证书颁发机构的证书的RSA密钥对,生成所述证书颁发机构的证书请求;

S504:对所述证书颁发机构的证书请求进行自签名,生成所述证书颁发机构的证书并储存;

S505:生成服务器/客户端的证书的RSA密钥对并存储;

S506:根据服务器/客户端的证书的RSA密钥对,生成服务器/客户端的证书请求;

S507:使用所述证书颁发机构,对所述服务器/客户端的证书请求进行签名,生成服务器/客户端的证书并存储;

S508:根据所述服务器的证书和客户端的证书,配置Nginx的SSL支持。

其中,在nginx代理tomcat实现双向https加密的情况下,可将nginx的配置文件配置如下:

在tomcat代码里获取到项目路径:

<Valve className="org.apache.catalina.valves.RemoteIpValve"protocolHeader="X-Forwarded-Proto"protocolHeaderHttpsValue="https"remoteIpHeader="X-Forwarded-For"/>

启动tomcat和nginx,访问XXXXX(域名),自动跳转为https,并访问了tomcat项目的首页。

对应于上述实施例提供的一种基于Nginx的双向认证方法,本发明实施例还提供一种基于Nginx的双向认证装置,如图6所示,包括:

创建模块11,用于建立证书颁发机构;

签发模块12,用于使用创建模块11建立的证书颁发机构,签发服务器的证书和客户端的证书并存储;

配置模块13,用于根据签发模块12签发的服务器的证书和客户端的证书,配置Nginx的安全套接层SSL支持。

图6所示装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图7为本发明实施例提供的另一种基于Nginx的双向认证装置示意图,如图7所示,本实施例的装置在图6所示系统的基础上,进一步的,创建模块11可包括:

目录创建子模块111,用于建立证书颁发机构的目录结构;

第一密钥对生成子模块112,用于生成证书颁发机构的证书的公钥加密算法RSA密钥对,并存储在目录创建子模块111建立的证书颁发机构的目录中;

第一请求子模块113,用于根据第一密钥对生成子模块112生成的证书颁发机构的证书的RSA密钥对,生成所述证书颁发机构的证书请求;

第一签名子模块114,用于对第一请求子模块113生成的证书颁发机构的证书请求进行自签名,生成所述证书颁发机构的证书并储存。

图7所示装置,可以用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图8为本发明实施例提供的另一种基于Nginx的双向认证装置示意图,如图8所示,本实施例的装置在图6所示系统的基础上,进一步的,签发模块12可包括:

第二密钥对生成子模块121,用于生成服务器/客户端的证书的RSA密钥对并存储;

第二请求子模块122,用于根据第二密钥对生成子模块121生成的服务器/客户端的证书的RSA密钥对,生成服务器/客户端的证书请求;

第二签名子模块123,用于使用创建模块11建立的证书颁发机构,对第二请求子模块122生成的服务器/客户端的证书请求进行签名,生成服务器/客户端的证书并存储。

图7所示装置,可以用于执行图3或图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

在另一个实施例中,配置模块13,具体用于将Nginx配置文件中的ssl_certificate属性设置为所述服务器的证书,将ssl_client_certificate属性设置为所述客户端的证书,将ssl_certificate_key属性设置为所述服务器的证书的RSA密钥对。

本发明提供的基于Nginx的双向认证装置,建立证书颁发机构,采用所述证书颁发机构签发服务器的证书和客户端的证书,能够实现服务器与客户端双向认证,此外,该装置根据所述服务器的证书和客户端的证书,配置Nginx的安全套接层SSL支持,使得Nginx与客户端通信时,传输数据均经过加密,能够保证数据通信、服务器和客户端的安全性。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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