Nginx 实现https双向认证及负载均衡

Nginx安装配置

  • 下载Nginx

下载地址:http://nginx.org/en/download.html

  • 安装Nginx

A.Nginx不需要安装,直接将下载的程序解压缩到C盘根目录(视实际情况而定,此处根目录只供参考)。

Nginx解压的目录尽量使用英文路径,且不要有空格,避免不必要的错误,如:C:\nginx

 

B.打开命令提示符CMD,进入nginx目录,如:cd C:\nginx\nginx-1.12.2,运行命令: start nginx : 启动nginx。

启动Nginx后,在浏览器中访问http://localhost,可以看到默认的欢迎页

Nginx常用命令如下:

start nginx : 启动nginx

nginx -s reload  :修改配置后重新加载生效

nginx -s reopen  :重新打开日志文件

nginx -t -c C:\nginx\nginx-1.12.2\conf\nginx.conf 测试nginx配置文件是否正确

nginx -s stop  :快速停止nginx

nginx -s quit  :完整有序的停止nginx

OpenSLL安装配置

  • 获得OpenSLL

Windows环境建议下载编译好的包,直接安装。下载地址: http://slproweb.com/products/Win32OpenSSL.html

  • 安装OpenSSL

1、双击Win64OpenSSL-1_1_1a.exe

2、选择安装目录(安装目录建议不要存在空格)

3、选择资源文件存放路径,点击安装完成安装

  • 配置OpenSSL

设置环境变量,例如工具安装在C:\OpenSSL-Win64,则将C:\OpenSSL-Win64\bin;复制到Path中
https://img-blog.csdn.net/20180703165756830?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYTY0NzYwMDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

打开命令行程序cmd(以管理员身份运行),进入 Openssl 所在目录,运行以下命令确认是否安装成功

openssl 或直接执行 start C:\OpenSSL-Win64\bin\openssl.exe

https://img-blog.csdn.net/20180703170142488?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYTY0NzYwMDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

 

双向认证

  1. 使用openssl生成证书

创建一个文件夹存放生成的证书,如:“C:/SSLKeys”.打开命令控制台,进入C:/SSLKeys目录

  • 生成根级证书

1、创建根证私钥

openssl genrsa -out root-key.key 1024

2、创建根证书请求文件

openssl req -new -out root-req.csr -key root-key.key

3、自签根证书

openssl x509 -req -in root-req.csr -out root-cert.cer -signkey root-key.key -CAcreateserial -days 3650

创建根证书请求时,会让填写信息,其中国家,省市,公司等需要和后面的证书保持一致.后面challenge password的地方直接回车就好。

  • 生成服务端证书

1、生成服务端key

openssl genrsa -out server-key.key 1024

2、生成服务端请求文件

openssl req -new -out server-req.csr -key server-key.key

3、生成服务端证书(root证书,rootkey,服务端key,服务端请求文件这4个生成服务端证书)

openssl x509 -req -in server-req.csr -out server-cert.cer -signkey server-key.key -CA root-cert.cer -CAkey root-key.key -CAcreateserial -days 3650

创建根证书请求时,会让填写信息,其中国家,省市,公司等需要跟创建根证书时填写一致。

  • 生成客户端证书

1、生成客户端key

openssl genrsa -out client-key.key 1024

2、生成客户端请求文件

openssl req -new -out client-req.csr -key client-key.key

3、生成客户端证书(root证书,rootkey,客户端key,客户端请求文件这4个生成客户端证书)

openssl x509 -req -in client-req.csr -out client-cert.cer -signkey client-key.key -CA root-cert.cer -CAkey root-key.key -CAcreateserial -days 3650

4、生成客户端p12格式根证书(密码设置123456)

openssl pkcs12 -export -clcerts -in client-cert.cer -inkey client-key.key -out client.p12

 

创建根证书请求时,会让填写信息,其中国家,省市,公司等需要跟创建根证书时填写一致。

  • 生成证书

经过上面的操作,我们生成的证书如下:

  • 证书的配置
  1. 服务器Niginx配置

修改Nginx配置文件C:\nginx\nginx-1.12.2\conf\nginx.conf:

在server上方新增:

upstream test{ 

        server 192.168.10.1:8080 weight=2;    #服务器A的访问ip和端口 

        server 192.168.10.2:8080 weight=1;    #服务器B的访问ip和端口

}

修改server配置为:

server {

        listen       443 ssl;

        server_name  localhost;


        ssl_certificate      C:/SSLKeys/nginx/server-cert.cer; #server证书公钥

        ssl_certificate_key  C:/SSLKeys/nginx/server-key.key; #server私钥

             ssl_client_certificate C:/SSLKeys/nginx/root-cert.cer;  #根级证书公钥,用于验证各个二级client

             ssl_verify_client on;  #开启客户端证书验证 


        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;


        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers  on;


        location / {

            root   html;

            index  index.html index.htm;

                    proxy_pass  http://test; 

                    proxy_redirect  default;

        }

    }   

Nginx配置最终如下(下图为nginx.conf修改部分):

port:注意SSL认证的端口,修改为443接口,避免浏览器访问时还需要输入端口号。

参考上述启动Nginx的方式启动Nginx,在浏览器中输入

https://ip/index。以下为IE显示效果:

       点击继续浏览此网站,则出现400错误,是因为我们客户端证书还没有导入。

  • 客户端证书导入

1、双击“client.p12”导入客户端证书(默认会添加到IE浏览器,Firefox需要自己添加你的证书client.p12)

再次使用浏览器访问服务端,浏览器会让我们选择使用的证书。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章